lib/acfs/collections/paginatable.rb in acfs-0.34.0.1.b286 vs lib/acfs/collections/paginatable.rb in acfs-0.34.0.1.b287
- old
+ new
@@ -1,16 +1,71 @@
module Acfs::Collections
module Paginatable
+ extend ActiveSupport::Concern
+
+ included do
+ def self.operation(action, opts = {}, &block)
+ opts[:url]
+ end
+ end
+
def total_pages
@total_pages
end
def current_page
@current_page
end
- def setup_pagination(params, header)
+ def process_response(response)
+ setup_params response.request.params if response.request
+ setup_headers response.headers
+ end
+
+ def next_page
+ page 'next'
+ end
+
+ def prev_page
+ page 'prev'
+ end
+
+ def first_page
+ page 'first'
+ end
+
+ def last_page
+ page 'last'
+ end
+
+ def page(rel)
+ if relations[rel]
+ @resource_class.all nil, url: relations[rel]
+ else
+ raise ArgumentError.new "No relative page `#{rel}'."
+ end
+ end
+
+ private
+ def relations
+ @relations ||= {}
+ end
+
+ def setup_headers(headers)
+ @total_pages = Integer(headers['X-Total-Pages']) if headers['X-Total-Pages']
+
+ setup_links headers['Link'] if headers['Link']
+ end
+
+ def setup_links(links)
+ links.split(/,\s+/).each do |link|
+ if link =~ /^\s*<([^>]+)>.*\s+rel="([\w_-]+)".*$/
+ relations[$2] = $1
+ end
+ end
+ end
+
+ def setup_params(params)
@current_page = Integer(params.fetch(:page, 1)) rescue params[:page]
- @total_pages = Integer(header['X-Total-Pages']) if header['X-Total-Pages']
end
end
end