Skip to content

Commit b5a7fa7

Browse files
committed
Add paginate_with a la respond_with
Signed-off-by: David Celis <[email protected]>
1 parent 81ec702 commit b5a7fa7

File tree

2 files changed

+27
-22
lines changed

2 files changed

+27
-22
lines changed

lib/rails/pagination.rb

Lines changed: 26 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -2,30 +2,39 @@ module Rails
22
module Pagination
33
protected
44

5-
def paginate(options)
6-
collection = options[:json] || options[:xml]
5+
def paginate(options)
6+
collection = options[:json] || options[:xml]
77

8-
block = Proc.new do |collection|
9-
links = (headers['Link'] || "").split(',').map(&:strip)
10-
url = request.original_url.sub(/\?.*$/, '')
11-
pages = ApiPagination.pages_from(collection)
8+
collection = _paginate_collection(collection)
9+
options[:json] = collection if options[:json]
10+
options[:xml] = collection if options[:xml]
1211

13-
pages.each do |k, v|
14-
new_params = request.query_parameters.merge(:page => v)
15-
links << %(<#{url}?#{new_params.to_param}>; rel="#{k}")
16-
end
12+
render options
13+
end
1714

18-
headers['Link'] = links.join(', ') unless links.empty?
19-
headers['Total'] = ApiPagination.total_from(collection)
20-
end
15+
def paginate_with(collection)
16+
respond_with _paginate_collection(collection)
17+
end
18+
19+
private
2120

22-
collection = ApiPagination.paginate(collection, params, &block)
21+
def _paginate_collection(collection)
22+
block = Proc.new do |collection|
23+
links = (headers['Link'] || "").split(',').map(&:strip)
24+
url = request.original_url.sub(/\?.*$/, '')
25+
pages = ApiPagination.pages_from(collection)
2326

24-
options[:json] = collection if options[:json]
25-
options[:xml] = collection if options[:xml]
27+
pages.each do |k, v|
28+
new_params = request.query_parameters.merge(:page => v)
29+
links << %(<#{url}?#{new_params.to_param}>; rel="#{k}")
30+
end
2631

27-
render options
32+
headers['Link'] = links.join(', ') unless links.empty?
33+
headers['Total'] = ApiPagination.total_from(collection)
2834
end
35+
36+
ApiPagination.paginate(collection, params, &block)
37+
end
2938
end
3039
end
3140

spec/support/numbers_controller.rb

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -45,8 +45,6 @@ def teardown(*methods)
4545
class NumbersController < ActionController::Base
4646
include Rails.application.routes.url_helpers
4747

48-
# after_filter :only => [:index] { paginate(:numbers) }
49-
5048
def index
5149
page = params.fetch(:page, 1).to_i
5250
total = params.fetch(:count).to_i
@@ -57,8 +55,6 @@ def index
5755
headers['Link'] = %(<#{numbers_url}?#{query.to_param}>; rel="without")
5856
end
5957

60-
numbers = (1..total).to_a
61-
62-
paginate :json => numbers
58+
paginate :json => (1..total).to_a
6359
end
6460
end

0 commit comments

Comments
 (0)