@@ -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
3039end
3140
0 commit comments