module Pina::Utils::Pagination

Public Instance Methods

collect_items() click to toggle source
# File lib/pina/utils/pagination.rb, line 27
def collect_items
  resource = self

  [].tap do |collection|
    loop do
      collection.push(*resource.items)
      resource = resource.next_page

      break unless resource
    end
  end
end
first_page() click to toggle source
# File lib/pina/utils/pagination.rb, line 8
def first_page
  resource.all
end
last_page() click to toggle source
# File lib/pina/utils/pagination.rb, line 16
def last_page
  paginate(_meta['pagination']['last'])
end
next_page() click to toggle source
# File lib/pina/utils/pagination.rb, line 4
def next_page
  paginate(_meta['pagination']['next'])
end
paginate(page_url) click to toggle source
# File lib/pina/utils/pagination.rb, line 20
def paginate(page_url)
  params = extract_params(page_url)
  return unless params&.fetch('page')

  resource.all(params)
end
previous_page() click to toggle source
# File lib/pina/utils/pagination.rb, line 12
def previous_page
  paginate(_meta['pagination']['previous'])
end

Private Instance Methods

extract_params(url) click to toggle source
# File lib/pina/utils/pagination.rb, line 46
def extract_params(url)
  return unless url

  index = url.index('?')
  return unless index

  params_to_hash(url[index + 1..-1])
end
params_to_hash(params) click to toggle source
# File lib/pina/utils/pagination.rb, line 55
def params_to_hash(params)
  {}.tap do |params_hash|
    params.split('&').each do |element|
      param = element.split('=')
      params_hash[param.first] = param.last
    end
  end
end
resource() click to toggle source
# File lib/pina/utils/pagination.rb, line 42
def resource
  Object.const_get("Pina::#{self.class.to_s.split('::').last}")
end