class FrederickAPI::V2::Helpers::Paginator

Custom paginator for json api client Fixes param names for pagination Also adds ability to get all records from a paginated API

Public Instance Methods

all_records() click to toggle source
# File lib/frederick_api/v2/helpers/paginator.rb, line 13
def all_records
  current_result_set = nil
  results = self.result_set.to_a
  first_resource = self.result_set.first

  (total_pages - current_page).times do
    first_resource.class.with_headers(first_resource.custom_headers) do
      current_result_set = current_result_set ? current_result_set.pages.next : self.result_set.pages.next
      raise 'next link not found' unless current_result_set
      results.push(*current_result_set.to_a)
    end
  end

  results
end
current_page() click to toggle source
# File lib/frederick_api/v2/helpers/paginator.rb, line 47
def current_page
  params.fetch("page.#{page_param}", 1).to_i
end
per_page() click to toggle source
# File lib/frederick_api/v2/helpers/paginator.rb, line 41
def per_page
  params.fetch("page.#{per_page_param}") do
    result_set.length
  end.to_i
end
total_pages() click to toggle source
# File lib/frederick_api/v2/helpers/paginator.rb, line 29
def total_pages
  if links['last']
    uri = result_set.links.link_url_for('last')
    last_params = params_for_uri(uri)
    last_params.fetch("page.#{page_param}") do
      current_page
    end.to_i
  else
    current_page
  end
end