simple_paginator 0.0.4 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 8f2849b7d941f9af41dde4fd22ae539ac1d505d5
4
- data.tar.gz: e2f4c9261b998d51238de7df7a4ec0db0479f2e9
3
+ metadata.gz: 16438bedf85b6b691f53f25b47e0afd4fcf38c73
4
+ data.tar.gz: 69a2c23b02fb29566bb83bcf0782ea7289dc0902
5
5
  SHA512:
6
- metadata.gz: c8d1ba19069ac6568ca32daa524b940e5dc290c45c6e41115b6b688ca41c510780665d581a84f3cdf943d3a92e12454fdcfb411ca9f4f1b0b9ff96232c4c0322
7
- data.tar.gz: 1ca4e949eea9baf78583c1f3f2825658521a29c04ed49868696a0bfd89e52a151c4ee939c5d8e9f86d6f02a367f06ba5c38a9fd5d6a351d3640c303c85c2604c
6
+ metadata.gz: d3e14abc254343d5774775d4c80f731bdc1d53a65ecf825c7f49bb661b824f0617cc6103bae6fb4b96e7ce5b59cf14ef1daad1eb4dd8ddc9491be1f46676c8b0
7
+ data.tar.gz: a6edc6b289fb3a1fa7f6182038d7efc41ba6da9291a0ced9af5218d1885b8de665a06c036ffc9f6bced919ef89cd2b9ffeb4712f46b397fd5e2529eb24d45a08
data/.gitignore CHANGED
@@ -15,3 +15,4 @@ spec/reports
15
15
  test/tmp
16
16
  test/version_tmp
17
17
  tmp
18
+ vendor/bundle
@@ -1,5 +1,5 @@
1
1
  language: ruby
2
2
  rvm:
3
+ - 2.1.1
3
4
  - 2.0.0
4
5
  - 1.9.3
5
- - rbx-19mode
data/README.md CHANGED
@@ -39,7 +39,8 @@ You will get 26 (per_page + 1) records when you can get next page.
39
39
 
40
40
  ```
41
41
  Post.paged(1) #=> returns 26 records at most.
42
- Post.paged(11) #=> returns 0 records if page is more than max_page.
42
+ Post.paged #=> same as above.
43
+ Post.paged(11) #=> returns 0 records if page (argument) > max_page.
43
44
  ```
44
45
 
45
46
  You can use `per_page`, `max_page` to change default behavior.
@@ -52,6 +53,13 @@ class Post < ActiveRecord::Base
52
53
  end
53
54
  ```
54
55
 
56
+ You are also be able to change them at `.paged` option.
57
+ These parameters will override `per_page`, `max_page` values.
58
+
59
+ ```
60
+ Post.paged(1, per_page: 5, max_page: 10)
61
+ ```
62
+
55
63
  ## Contributing
56
64
 
57
65
  1. Fork it
@@ -1,35 +1,43 @@
1
1
  require "simple_paginator/version"
2
- require 'active_support/concern'
3
2
  require 'active_record'
4
3
 
5
4
  module SimplePaginator
6
- extend ActiveSupport::Concern
7
-
8
5
  DEFAULT_PER_PAGE = 25
9
6
  DEFAULT_MAX_PAGE = 10
10
7
 
11
- included do
12
- per_page DEFAULT_PER_PAGE
13
- max_page DEFAULT_MAX_PAGE
14
- scope :paged, ->(page) {
8
+ def self.included(base)
9
+ base.extend ClassMethods
10
+
11
+ base.class_eval do
12
+ per_page DEFAULT_PER_PAGE
13
+ max_page DEFAULT_MAX_PAGE
14
+ end
15
+ end
16
+
17
+ module ClassMethods
18
+ def paged(page, options = {})
15
19
  num = page_number(page)
16
- if num > @max_page
17
- none
18
- elsif num == @max_page
19
- limit(@per_page).offset((num-1)*@per_page)
20
+ per_page = options[:per_page].presence || @per_page
21
+ max_page = options[:max_page].presence || @max_page
22
+
23
+ if num > max_page
24
+ scoped = none
25
+ elsif num == max_page
26
+ scoped = limit(per_page).offset((num-1)*per_page)
20
27
  else
21
- limit(@per_page+1).offset((num-1)*@per_page)
28
+ scoped = limit(per_page+1).offset((num-1)*per_page)
22
29
  end
23
- }
24
- end
30
+ scoped
31
+ end
25
32
 
26
- module ClassMethods
27
33
  def page_number(raw_page)
28
34
  [raw_page.to_i, 1].max
29
35
  end
36
+
30
37
  def per_page(per_page)
31
38
  @per_page = per_page
32
39
  end
40
+
33
41
  def max_page(max_page)
34
42
  @max_page = max_page
35
43
  end
@@ -1,3 +1,3 @@
1
1
  module SimplePaginator
2
- VERSION = "0.0.4"
2
+ VERSION = "1.0.0"
3
3
  end
@@ -18,10 +18,9 @@ Gem::Specification.new do |spec|
18
18
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
19
  spec.require_paths = ["lib"]
20
20
 
21
- spec.add_development_dependency "bundler", "~> 1.3"
21
+ spec.add_development_dependency "bundler"
22
22
  spec.add_development_dependency "rake"
23
23
  spec.add_development_dependency 'rspec'
24
24
  spec.add_development_dependency 'sqlite3'
25
- spec.add_dependency 'activesupport'
26
25
  spec.add_dependency 'activerecord'
27
26
  end
@@ -57,7 +57,7 @@ describe SimplePaginator do
57
57
  context 'per_page, max_page are default' do
58
58
  context 'page = 1' do
59
59
  let(:page) { 1 }
60
- it 'send :limit, :offset method' do
60
+ it 'should send :limit, :offset method' do
61
61
  Post.should_receive(:limit).with(26).once { Post }
62
62
  Post.should_receive(:offset).with(0).once
63
63
  Post.paged(page)
@@ -65,7 +65,7 @@ describe SimplePaginator do
65
65
  end
66
66
  context 'page = 2' do
67
67
  let(:page) { 2 }
68
- it 'send :limit, :offset method' do
68
+ it 'should send :limit, :offset method' do
69
69
  Post.should_receive(:limit).with(26).once { Post }
70
70
  Post.should_receive(:offset).with(25).once
71
71
  Post.paged(page)
@@ -73,7 +73,7 @@ describe SimplePaginator do
73
73
  end
74
74
  context 'page = 10' do
75
75
  let(:page) { 10 }
76
- it 'send :limit, :offset method' do
76
+ it 'should send :limit, :offset method' do
77
77
  Post.should_receive(:limit).with(25).once { Post }
78
78
  Post.should_receive(:offset).with(25 * (page-1)).once
79
79
  Post.paged(page)
@@ -81,7 +81,7 @@ describe SimplePaginator do
81
81
  end
82
82
  context 'page = 11' do
83
83
  let(:page) { 11 }
84
- it 'send :none method' do
84
+ it 'should send :none method' do
85
85
  Post.should_receive(:none).once
86
86
  Post.paged(page)
87
87
  end
@@ -105,7 +105,7 @@ describe SimplePaginator do
105
105
 
106
106
  context 'page = 1' do
107
107
  let(:page) { 1 }
108
- it 'send :limit, :offset method' do
108
+ it 'should send :limit, :offset method' do
109
109
  Post.should_receive(:limit).with(4).once { Post }
110
110
  Post.should_receive(:offset).with(0).once
111
111
  Post.paged(page)
@@ -113,7 +113,7 @@ describe SimplePaginator do
113
113
  end
114
114
  context 'page = 2' do
115
115
  let(:page) { 2 }
116
- it 'send :limit, :offset method' do
116
+ it 'should send :limit, :offset method' do
117
117
  Post.should_receive(:limit).with(3).once { Post }
118
118
  Post.should_receive(:offset).with(3).once
119
119
  Post.paged(page)
@@ -121,12 +121,96 @@ describe SimplePaginator do
121
121
  end
122
122
  context 'page = 3' do
123
123
  let(:page) { 3 }
124
- it 'send :limit, :offset method' do
124
+ it 'should send :none' do
125
125
  Post.should_receive(:none).once
126
126
  Post.paged(page)
127
127
  end
128
128
  end
129
129
  end
130
+
131
+ context 'change per_page by parameter' do
132
+ let(:per_page) { 5 }
133
+
134
+ before do
135
+ Post.class_eval {
136
+ per_page 3
137
+ max_page 2
138
+ }
139
+ end
140
+
141
+ after do
142
+ Post.class_eval {
143
+ per_page SimplePaginator::DEFAULT_PER_PAGE
144
+ max_page SimplePaginator::DEFAULT_MAX_PAGE
145
+ }
146
+ end
147
+
148
+ context 'page = 1' do
149
+ let(:page) { 1 }
150
+ it 'should send :limit, :offset method' do
151
+ Post.should_receive(:limit).with(6).once { Post }
152
+ Post.should_receive(:offset).with(0).once
153
+ Post.paged(page, per_page: per_page)
154
+ end
155
+ end
156
+ context 'page = 2' do
157
+ let(:page) { 2 }
158
+ it 'should send :limit, :offset method' do
159
+ Post.should_receive(:limit).with(5).once { Post }
160
+ Post.should_receive(:offset).with(5).once
161
+ Post.paged(page, per_page: per_page)
162
+ end
163
+ end
164
+ context 'page = 3' do
165
+ let(:page) { 3 }
166
+ it 'should send :none method' do
167
+ Post.should_receive(:none).once
168
+ Post.paged(page, per_page: per_page)
169
+ end
170
+ end
171
+ end
172
+
173
+ context 'change max_page by parameter' do
174
+ let(:max_page) { 1 }
175
+
176
+ before do
177
+ Post.class_eval {
178
+ per_page 3
179
+ max_page 2
180
+ }
181
+ end
182
+
183
+ after do
184
+ Post.class_eval {
185
+ per_page SimplePaginator::DEFAULT_PER_PAGE
186
+ max_page SimplePaginator::DEFAULT_MAX_PAGE
187
+ }
188
+ end
189
+
190
+ context 'page = 1' do
191
+ let(:page) { 1 }
192
+ it 'should send :limit, :offset method' do
193
+ Post.should_receive(:limit).with(3).once { Post }
194
+ Post.should_receive(:offset).with(0).once
195
+ Post.paged(page, max_page: max_page)
196
+ end
197
+ end
198
+ context 'page = 2' do
199
+ let(:page) { 2 }
200
+ it 'should send :none method' do
201
+ Post.should_receive(:none).once
202
+ Post.paged(page, max_page: max_page)
203
+ end
204
+ end
205
+ context 'page = 3' do
206
+ let(:page) { 3 }
207
+ it 'should send :none method' do
208
+ Post.should_receive(:none).once
209
+ Post.paged(page, max_page: max_page)
210
+ end
211
+ end
212
+ end
213
+
130
214
  end
131
215
  end
132
- end
216
+ end
metadata CHANGED
@@ -1,97 +1,83 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: simple_paginator
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Satoshi Ebisawa
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-08-08 00:00:00.000000000 Z
11
+ date: 2014-05-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ~>
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '1.3'
19
+ version: '0'
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ~>
24
+ - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: '1.3'
26
+ version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - '>='
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
33
  version: '0'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - '>='
38
+ - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rspec
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - '>='
45
+ - - ">="
46
46
  - !ruby/object:Gem::Version
47
47
  version: '0'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - '>='
52
+ - - ">="
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: sqlite3
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - '>='
59
+ - - ">="
60
60
  - !ruby/object:Gem::Version
61
61
  version: '0'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - '>='
67
- - !ruby/object:Gem::Version
68
- version: '0'
69
- - !ruby/object:Gem::Dependency
70
- name: activesupport
71
- requirement: !ruby/object:Gem::Requirement
72
- requirements:
73
- - - '>='
74
- - !ruby/object:Gem::Version
75
- version: '0'
76
- type: :runtime
77
- prerelease: false
78
- version_requirements: !ruby/object:Gem::Requirement
79
- requirements:
80
- - - '>='
66
+ - - ">="
81
67
  - !ruby/object:Gem::Version
82
68
  version: '0'
83
69
  - !ruby/object:Gem::Dependency
84
70
  name: activerecord
85
71
  requirement: !ruby/object:Gem::Requirement
86
72
  requirements:
87
- - - '>='
73
+ - - ">="
88
74
  - !ruby/object:Gem::Version
89
75
  version: '0'
90
76
  type: :runtime
91
77
  prerelease: false
92
78
  version_requirements: !ruby/object:Gem::Requirement
93
79
  requirements:
94
- - - '>='
80
+ - - ">="
95
81
  - !ruby/object:Gem::Version
96
82
  version: '0'
97
83
  description: Useful paginator library for building APIs.
@@ -101,9 +87,9 @@ executables: []
101
87
  extensions: []
102
88
  extra_rdoc_files: []
103
89
  files:
104
- - .gitignore
105
- - .rspec
106
- - .travis.yml
90
+ - ".gitignore"
91
+ - ".rspec"
92
+ - ".travis.yml"
107
93
  - Gemfile
108
94
  - LICENSE.txt
109
95
  - README.ja.md
@@ -124,21 +110,20 @@ require_paths:
124
110
  - lib
125
111
  required_ruby_version: !ruby/object:Gem::Requirement
126
112
  requirements:
127
- - - '>='
113
+ - - ">="
128
114
  - !ruby/object:Gem::Version
129
115
  version: '0'
130
116
  required_rubygems_version: !ruby/object:Gem::Requirement
131
117
  requirements:
132
- - - '>='
118
+ - - ">="
133
119
  - !ruby/object:Gem::Version
134
120
  version: '0'
135
121
  requirements: []
136
122
  rubyforge_project:
137
- rubygems_version: 2.0.3
123
+ rubygems_version: 2.2.2
138
124
  signing_key:
139
125
  specification_version: 4
140
126
  summary: Useful paginator library for building APIs.
141
127
  test_files:
142
128
  - spec/simple_paginator_spec.rb
143
129
  - spec/spec_helper.rb
144
- has_rdoc: