paginate-responder 1.5.0 → 1.6.0.b0
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/.travis.yml +13 -7
- data/Appraisals +15 -0
- data/Gemfile +0 -6
- data/Rakefile +6 -10
- data/gemfiles/rails_3_2.gemfile +7 -0
- data/gemfiles/rails_4_2.gemfile +7 -0
- data/gemfiles/rails_5_0.gemfile +7 -0
- data/gemfiles/rails_head.gemfile +7 -0
- data/lib/paginate-responder.rb +5 -10
- data/lib/paginate-responder/base.rb +129 -0
- data/lib/paginate-responder/kaminari_adapter.rb +37 -0
- data/lib/paginate-responder/version.rb +2 -2
- data/lib/paginate-responder/will_paginate_adapter.rb +36 -0
- data/lib/responders/paginate_responder.rb +25 -5
- data/paginate-responder.gemspec +9 -4
- data/spec/paginate_responder_spec.rb +158 -0
- data/spec/spec_helper.rb +46 -0
- data/spec/support/05-setup-and-teardown-adapter.rb +38 -0
- data/{test/test_helper.rb → spec/support/10-application.rb} +28 -28
- metadata +101 -26
- data/gemfiles/Gemfile.rails-4-1 +0 -7
- data/gemfiles/Gemfile.rails-4-2 +0 -8
- data/gemfiles/Gemfile.rails-head +0 -6
- data/lib/paginate-responder/adapter/base.rb +0 -46
- data/lib/paginate-responder/adapter/kaminari_adapter.rb +0 -34
- data/lib/paginate-responder/adapter/paginate_adapter.rb +0 -31
- data/lib/paginate-responder/paginator.rb +0 -99
- data/test/paginate_responder_test.rb +0 -247
@@ -1,34 +0,0 @@
|
|
1
|
-
module PaginateResponder::Adapter
|
2
|
-
|
3
|
-
# Pagination adapter for kaminari.
|
4
|
-
#
|
5
|
-
class KaminariAdapter < Base
|
6
|
-
|
7
|
-
def suitable?
|
8
|
-
resource.respond_to?(:page) and not resource.respond_to?(:paginate)
|
9
|
-
end
|
10
|
-
|
11
|
-
def paginate(opts)
|
12
|
-
resource.page(opts[:page]).per(opts[:per_page])
|
13
|
-
end
|
14
|
-
|
15
|
-
def defaults
|
16
|
-
{
|
17
|
-
:per_page => Kaminari.config.default_per_page,
|
18
|
-
:max_per_page => Kaminari.config.max_per_page
|
19
|
-
}
|
20
|
-
end
|
21
|
-
|
22
|
-
def total_pages
|
23
|
-
resource.num_pages if resource.respond_to? :num_pages
|
24
|
-
end
|
25
|
-
|
26
|
-
def total_count
|
27
|
-
resource.total_count if resource.respond_to? :total_count
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
|
-
if defined?(:Kaminari)
|
32
|
-
::PaginateResponder::Paginator.register KaminariAdapter
|
33
|
-
end
|
34
|
-
end
|
@@ -1,31 +0,0 @@
|
|
1
|
-
module PaginateResponder::Adapter
|
2
|
-
|
3
|
-
# Pagination adapter for will_paginate.
|
4
|
-
#
|
5
|
-
class PaginateAdapter < Base
|
6
|
-
|
7
|
-
def suitable?
|
8
|
-
resource.respond_to?(:paginate)
|
9
|
-
end
|
10
|
-
|
11
|
-
def paginate(opts)
|
12
|
-
resource.paginate :page => opts[:page], :per_page => opts[:per_page]
|
13
|
-
end
|
14
|
-
|
15
|
-
def defaults
|
16
|
-
{ :per_page => 50, :max_per_page => 50 }
|
17
|
-
end
|
18
|
-
|
19
|
-
def total_pages
|
20
|
-
resource.total_pages if resource.respond_to? :total_pages
|
21
|
-
end
|
22
|
-
|
23
|
-
def total_count
|
24
|
-
resource.total_entries if resource.respond_to? :total_entries
|
25
|
-
end
|
26
|
-
end
|
27
|
-
|
28
|
-
if defined?(:WillPaginate)
|
29
|
-
::PaginateResponder::Paginator.register PaginateAdapter
|
30
|
-
end
|
31
|
-
end
|
@@ -1,99 +0,0 @@
|
|
1
|
-
module PaginateResponder
|
2
|
-
class Paginator
|
3
|
-
attr_reader :responder, :adapter, :resource
|
4
|
-
|
5
|
-
def initialize(responder)
|
6
|
-
@responder = responder
|
7
|
-
@resource = responder.resource
|
8
|
-
@adapter = find_adapter
|
9
|
-
end
|
10
|
-
|
11
|
-
def find_adapter
|
12
|
-
return controller.pagination_adapter(resource) if controller.respond_to? :pagination_adapter
|
13
|
-
|
14
|
-
self.class.adapters.each do |adapter_class|
|
15
|
-
begin
|
16
|
-
adapter_class.new(resource).tap do |adapter|
|
17
|
-
return adapter if adapter.suitable?
|
18
|
-
end
|
19
|
-
rescue
|
20
|
-
next
|
21
|
-
end
|
22
|
-
end
|
23
|
-
Adapter::Base.new(resource)
|
24
|
-
end
|
25
|
-
|
26
|
-
def request; responder.request end
|
27
|
-
def response; controller.response end
|
28
|
-
def controller; responder.controller end
|
29
|
-
|
30
|
-
def paginate!
|
31
|
-
resource!
|
32
|
-
headers!
|
33
|
-
|
34
|
-
resource
|
35
|
-
end
|
36
|
-
|
37
|
-
def headers!
|
38
|
-
link! 'first', 1
|
39
|
-
link! 'prev', page - 1 if page > 1
|
40
|
-
link! 'next', page + 1 if total_pages && page < total_pages
|
41
|
-
link! 'last', total_pages if total_pages
|
42
|
-
|
43
|
-
response.headers["X-Total-Pages"] = total_pages.to_s if total_pages
|
44
|
-
response.headers["X-Total-Count"] = total_count.to_s if total_count
|
45
|
-
response.headers["X-Per-Page"] = per_page.to_s
|
46
|
-
end
|
47
|
-
|
48
|
-
def link!(rel, page)
|
49
|
-
pagination_params = { :page => page }
|
50
|
-
pagination_params[:per_page] = per_page if request.params.has_key?(:per_page)
|
51
|
-
response.link(controller.url_for(request.params.merge(pagination_params)), :rel => rel)
|
52
|
-
end
|
53
|
-
|
54
|
-
def resource!
|
55
|
-
@resource = @adapter.paginate! :page => page, :per_page => per_page
|
56
|
-
end
|
57
|
-
|
58
|
-
def page
|
59
|
-
@page ||= controller.page.try(:to_i) if controller.respond_to? :page
|
60
|
-
@page ||= controller.params[:page].try(:to_i)
|
61
|
-
@page ||= 1
|
62
|
-
rescue
|
63
|
-
1
|
64
|
-
end
|
65
|
-
|
66
|
-
def per_page
|
67
|
-
@per_page ||= controller.per_page.try(:to_i) if controller.respond_to? :per_page
|
68
|
-
@per_page ||= controller.params[:per_page].try(:to_i)
|
69
|
-
@per_page ||= @adapter.defaults[:per_page].try(:to_i)
|
70
|
-
@per_page = [[1, @per_page].max, max_per_page].min
|
71
|
-
rescue
|
72
|
-
max_per_page
|
73
|
-
end
|
74
|
-
|
75
|
-
def max_per_page
|
76
|
-
@max_per_page ||= controller.max_per_page.try(:to_i) if controller.respond_to? :max_per_page
|
77
|
-
@max_per_page ||= @adapter.defaults[:max_per_page].try(:to_i)
|
78
|
-
@max_per_page ||= 50
|
79
|
-
end
|
80
|
-
|
81
|
-
def total_pages
|
82
|
-
@adapter.total_pages
|
83
|
-
end
|
84
|
-
|
85
|
-
def total_count
|
86
|
-
@adapter.total_count
|
87
|
-
end
|
88
|
-
|
89
|
-
class << self
|
90
|
-
def adapters
|
91
|
-
@adapters ||= []
|
92
|
-
end
|
93
|
-
|
94
|
-
def register(adapter)
|
95
|
-
adapters << adapter
|
96
|
-
end
|
97
|
-
end
|
98
|
-
end
|
99
|
-
end
|
@@ -1,247 +0,0 @@
|
|
1
|
-
require 'test_helper.rb'
|
2
|
-
|
3
|
-
GEM = ENV['GEM'].to_s.split ','
|
4
|
-
GEM = ['will_paginate'] if GEM.empty?
|
5
|
-
puts "[INFO] Running tests with #{GEM.join(' and ')}."
|
6
|
-
|
7
|
-
class PaginateResponderTest < ActionController::TestCase
|
8
|
-
tests PaginateController
|
9
|
-
|
10
|
-
def array_resource
|
11
|
-
('AA'..'zz').to_a
|
12
|
-
end
|
13
|
-
|
14
|
-
GEM.each do |gem|
|
15
|
-
case gem
|
16
|
-
when 'will_paginate'
|
17
|
-
require 'will_paginate/array'
|
18
|
-
require 'will_paginate/active_record'
|
19
|
-
when 'kaminari'
|
20
|
-
require 'kaminari'
|
21
|
-
require 'kaminari/models/array_extension'
|
22
|
-
Kaminari::Hooks.init
|
23
|
-
|
24
|
-
Kaminari.configure do |config|
|
25
|
-
config.default_per_page = 50
|
26
|
-
config.max_per_page = 50
|
27
|
-
end
|
28
|
-
|
29
|
-
def array_resource
|
30
|
-
Kaminari.paginate_array ('AA'..'zz').to_a
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
|
-
def setup
|
36
|
-
if ActiveRecord::VERSION::MAJOR >= 4
|
37
|
-
@controller.resource = ArModel.all
|
38
|
-
else
|
39
|
-
@controller.resource = ArModel.scoped
|
40
|
-
end
|
41
|
-
end
|
42
|
-
|
43
|
-
def json
|
44
|
-
JSON[@response.body]
|
45
|
-
end
|
46
|
-
|
47
|
-
def test_pagination
|
48
|
-
get :index, format: :json
|
49
|
-
|
50
|
-
assert_equal 50, json.size
|
51
|
-
assert_equal (1..50).to_a, json
|
52
|
-
end
|
53
|
-
|
54
|
-
def test_pagination_arr
|
55
|
-
@controller.resource = array_resource
|
56
|
-
get :index, format: :json
|
57
|
-
|
58
|
-
assert_equal 50, json.size
|
59
|
-
assert_equal ('AA'..'zz').to_a[0..49], json
|
60
|
-
end
|
61
|
-
|
62
|
-
def test_pagination_assoc
|
63
|
-
@controller.resource = ArModel.find(1).ar_assoc_models
|
64
|
-
get :index, format: :json
|
65
|
-
|
66
|
-
assert_equal 5, json.size
|
67
|
-
assert_equal (1..5).to_a, json
|
68
|
-
end
|
69
|
-
|
70
|
-
def test_pagination_page_2
|
71
|
-
get :index, format: :json, page: 2
|
72
|
-
|
73
|
-
assert_equal 50, json.size
|
74
|
-
assert_equal (51..100).to_a, json
|
75
|
-
end
|
76
|
-
|
77
|
-
def test_pagination_arr_page_2
|
78
|
-
@controller.resource = array_resource
|
79
|
-
get :index, format: :json, page: 2
|
80
|
-
|
81
|
-
assert_equal 50, json.size
|
82
|
-
assert_equal ('AA'..'zz').to_a[50..99], json
|
83
|
-
end
|
84
|
-
|
85
|
-
def test_pagination_per_page
|
86
|
-
get :index, format: :json, page: 1, per_page: 10
|
87
|
-
|
88
|
-
assert_equal 10, json.size
|
89
|
-
assert_equal (1..10).to_a, json
|
90
|
-
end
|
91
|
-
|
92
|
-
|
93
|
-
def test_pagination_arr_per_page
|
94
|
-
@controller.resource = array_resource
|
95
|
-
get :index, format: :json, page: 1, per_page: 10
|
96
|
-
|
97
|
-
assert_equal 10, json.size
|
98
|
-
assert_equal ('AA'..'zz').to_a[0..9], json
|
99
|
-
end
|
100
|
-
|
101
|
-
def test_pagination_per_page_2
|
102
|
-
get :index, format: :json, page: 2, per_page: 10
|
103
|
-
|
104
|
-
assert_equal 10, json.size
|
105
|
-
assert_equal (11..20).to_a, json
|
106
|
-
end
|
107
|
-
|
108
|
-
def test_pagination_arr_per_page_2
|
109
|
-
@controller.resource = array_resource
|
110
|
-
get :index, format: :json, page: 2, per_page: 10
|
111
|
-
|
112
|
-
assert_equal 10, json.size
|
113
|
-
assert_equal ('AA'..'zz').to_a[10..19], json
|
114
|
-
end
|
115
|
-
|
116
|
-
def test_headers
|
117
|
-
get :index, format: :json
|
118
|
-
|
119
|
-
assert_equal 3, response.links.size
|
120
|
-
|
121
|
-
assert_equal 'first', response.links[0][:params][:rel]
|
122
|
-
assert_equal 'http://test.host/index.json?page=1', response.links[0][:url]
|
123
|
-
|
124
|
-
assert_equal 'next', response.links[1][:params][:rel]
|
125
|
-
assert_equal 'http://test.host/index.json?page=2', response.links[1][:url]
|
126
|
-
|
127
|
-
assert_equal 'last', response.links[2][:params][:rel]
|
128
|
-
assert_equal 'http://test.host/index.json?page=14', response.links[2][:url]
|
129
|
-
end
|
130
|
-
|
131
|
-
def test_headers_page_2
|
132
|
-
get :index, format: :json, page: 2
|
133
|
-
|
134
|
-
assert_equal 4, response.links.size
|
135
|
-
|
136
|
-
assert_equal 'first', response.links[0][:params][:rel]
|
137
|
-
assert_equal 'http://test.host/index.json?page=1', response.links[0][:url]
|
138
|
-
|
139
|
-
assert_equal 'prev', response.links[1][:params][:rel]
|
140
|
-
assert_equal 'http://test.host/index.json?page=1', response.links[1][:url]
|
141
|
-
|
142
|
-
assert_equal 'next', response.links[2][:params][:rel]
|
143
|
-
assert_equal 'http://test.host/index.json?page=3', response.links[2][:url]
|
144
|
-
|
145
|
-
assert_equal 'last', response.links[3][:params][:rel]
|
146
|
-
assert_equal 'http://test.host/index.json?page=14', response.links[3][:url]
|
147
|
-
end
|
148
|
-
|
149
|
-
def test_headers_page_5
|
150
|
-
get :index, format: :json, page: 5
|
151
|
-
|
152
|
-
assert_equal 4, response.links.size
|
153
|
-
|
154
|
-
assert_equal 'first', response.links[0][:params][:rel]
|
155
|
-
assert_equal 'http://test.host/index.json?page=1', response.links[0][:url]
|
156
|
-
|
157
|
-
assert_equal 'prev', response.links[1][:params][:rel]
|
158
|
-
assert_equal 'http://test.host/index.json?page=4', response.links[1][:url]
|
159
|
-
|
160
|
-
assert_equal 'next', response.links[2][:params][:rel]
|
161
|
-
assert_equal 'http://test.host/index.json?page=6', response.links[2][:url]
|
162
|
-
|
163
|
-
assert_equal 'last', response.links[3][:params][:rel]
|
164
|
-
assert_equal 'http://test.host/index.json?page=14', response.links[3][:url]
|
165
|
-
end
|
166
|
-
|
167
|
-
def test_headers_last_page
|
168
|
-
get :index, format: :json, page: 14
|
169
|
-
|
170
|
-
assert_equal 3, response.links.size
|
171
|
-
|
172
|
-
assert_equal 'first', response.links[0][:params][:rel]
|
173
|
-
assert_equal 'http://test.host/index.json?page=1', response.links[0][:url]
|
174
|
-
|
175
|
-
assert_equal 'prev', response.links[1][:params][:rel]
|
176
|
-
assert_equal 'http://test.host/index.json?page=13', response.links[1][:url]
|
177
|
-
|
178
|
-
assert_equal 'last', response.links[2][:params][:rel]
|
179
|
-
assert_equal 'http://test.host/index.json?page=14', response.links[2][:url]
|
180
|
-
end
|
181
|
-
|
182
|
-
def test_headers_page_before_last_page
|
183
|
-
get :index, format: :json, page: 13
|
184
|
-
|
185
|
-
assert_equal 4, response.links.size
|
186
|
-
|
187
|
-
assert_equal 'first', response.links[0][:params][:rel]
|
188
|
-
assert_equal 'http://test.host/index.json?page=1', response.links[0][:url]
|
189
|
-
|
190
|
-
assert_equal 'prev', response.links[1][:params][:rel]
|
191
|
-
assert_equal 'http://test.host/index.json?page=12', response.links[1][:url]
|
192
|
-
|
193
|
-
assert_equal 'next', response.links[2][:params][:rel]
|
194
|
-
assert_equal 'http://test.host/index.json?page=14', response.links[2][:url]
|
195
|
-
|
196
|
-
assert_equal 'last', response.links[3][:params][:rel]
|
197
|
-
assert_equal 'http://test.host/index.json?page=14', response.links[3][:url]
|
198
|
-
end
|
199
|
-
|
200
|
-
def test_headers_per_page
|
201
|
-
get :index, format: :json, page: 1, per_page: 10
|
202
|
-
|
203
|
-
assert_equal 3, response.links.size
|
204
|
-
|
205
|
-
assert_equal 'first', response.links[0][:params][:rel]
|
206
|
-
assert_equal 'http://test.host/index.json?page=1&per_page=10', response.links[0][:url]
|
207
|
-
|
208
|
-
assert_equal 'next', response.links[1][:params][:rel]
|
209
|
-
assert_equal 'http://test.host/index.json?page=2&per_page=10', response.links[1][:url]
|
210
|
-
|
211
|
-
assert_equal 'last', response.links[2][:params][:rel]
|
212
|
-
assert_equal 'http://test.host/index.json?page=68&per_page=10', response.links[2][:url]
|
213
|
-
end
|
214
|
-
|
215
|
-
def test_headers_per_page_maximum
|
216
|
-
get :index, format: :json, page: 1, per_page: 100
|
217
|
-
|
218
|
-
assert_equal 3, response.links.size
|
219
|
-
|
220
|
-
assert_equal 'first', response.links[0][:params][:rel]
|
221
|
-
assert_equal 'http://test.host/index.json?page=1&per_page=50', response.links[0][:url]
|
222
|
-
|
223
|
-
assert_equal 'next', response.links[1][:params][:rel]
|
224
|
-
assert_equal 'http://test.host/index.json?page=2&per_page=50', response.links[1][:url]
|
225
|
-
|
226
|
-
assert_equal 'last', response.links[2][:params][:rel]
|
227
|
-
assert_equal 'http://test.host/index.json?page=14&per_page=50', response.links[2][:url]
|
228
|
-
end
|
229
|
-
|
230
|
-
def test_custom_headers_total_pages
|
231
|
-
get :index, format: :json
|
232
|
-
|
233
|
-
assert_equal '14', response.headers['X-Total-Pages']
|
234
|
-
end
|
235
|
-
|
236
|
-
def test_custom_headers_total_count
|
237
|
-
get :index, format: :json
|
238
|
-
|
239
|
-
assert_equal '676', response.headers['X-Total-Count']
|
240
|
-
end
|
241
|
-
|
242
|
-
def test_custom_headers_per_page
|
243
|
-
get :index, format: :json
|
244
|
-
|
245
|
-
assert_equal '50', response.headers['X-Per-Page']
|
246
|
-
end
|
247
|
-
end
|