module Rails::Pagination
def _discover_format(options)
def _discover_format(options) for response_format in ApiPagination.config.response_formats return response_format if options.key?(response_format) end end
def _paginate_collection(collection, options={})
def _paginate_collection(collection, options={}) options[:page] = ApiPagination.config.page_param(params) options[:per_page] ||= ApiPagination.config.per_page_param(params) collection, pagy = ApiPagination.paginate(collection, options) links = (headers['Link'] || '').split(',').map(&:strip) url = base_url + request.path_info pages = ApiPagination.pages_from(pagy || collection, options) pages.each do |k, v| new_params = request.query_parameters.merge(:page => v) links << %(<#{url}?#{new_params.to_param}>; rel="#{k}") end total_header = ApiPagination.config.total_header per_page_header = ApiPagination.config.per_page_header page_header = ApiPagination.config.page_header include_total = ApiPagination.config.include_total headers['Link'] = links.join(', ') unless links.empty? headers[per_page_header] = options[:per_page].to_s headers[page_header] = options[:page].to_s unless page_header.nil? headers[total_header] = total_count(pagy || collection, options).to_s if include_total return collection end
def base_url
def base_url ApiPagination.config.base_url || request.base_url end
def paginate(*options_or_collection)
def paginate(*options_or_collection) options = options_or_collection.extract_options! collection = options_or_collection.first return _paginate_collection(collection, options) if collection response_format = _discover_format(options) collection = options[response_format] collection = _paginate_collection(collection, options) options[response_format] = collection if options[response_format] render options end
def paginate_with(collection)
def paginate_with(collection) respond_with _paginate_collection(collection) end
def total_count(collection, options)
def total_count(collection, options) total_count = if ApiPagination.config.paginator == :kaminari paginate_array_options = options[:paginate_array_options] paginate_array_options[:total_count] if paginate_array_options end total_count || ApiPagination.total_from(collection) end