simple_paginator 0.0.4 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/.travis.yml +1 -1
- data/README.md +9 -1
- data/lib/simple_paginator.rb +23 -15
- data/lib/simple_paginator/version.rb +1 -1
- data/simple_paginator.gemspec +1 -2
- data/spec/simple_paginator_spec.rb +92 -8
- metadata +20 -35
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 16438bedf85b6b691f53f25b47e0afd4fcf38c73
|
4
|
+
data.tar.gz: 69a2c23b02fb29566bb83bcf0782ea7289dc0902
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d3e14abc254343d5774775d4c80f731bdc1d53a65ecf825c7f49bb661b824f0617cc6103bae6fb4b96e7ce5b59cf14ef1daad1eb4dd8ddc9491be1f46676c8b0
|
7
|
+
data.tar.gz: a6edc6b289fb3a1fa7f6182038d7efc41ba6da9291a0ced9af5218d1885b8de665a06c036ffc9f6bced919ef89cd2b9ffeb4712f46b397fd5e2529eb24d45a08
|
data/.gitignore
CHANGED
data/.travis.yml
CHANGED
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
|
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
|
data/lib/simple_paginator.rb
CHANGED
@@ -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
|
12
|
-
|
13
|
-
|
14
|
-
|
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
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
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(
|
28
|
+
scoped = limit(per_page+1).offset((num-1)*per_page)
|
22
29
|
end
|
23
|
-
|
24
|
-
|
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
|
data/simple_paginator.gemspec
CHANGED
@@ -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"
|
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 :
|
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
|
+
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:
|
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: '
|
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: '
|
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.
|
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:
|