class JsonApiPaginator

Attributes

meta[R]
params[R]
result_set[R]

Public Class Methods

new(result_set, data) click to toggle source
# File lib/json_api_paginator.rb, line 6
def initialize(result_set, data)
  @params = params_for_uri(result_set.uri)
  @result_set = result_set
  @links = data['links'] || {}
  @meta = data['meta'] || {}
end

Public Instance Methods

current_page() click to toggle source
# File lib/json_api_paginator.rb, line 48
def current_page
  (params['page']['number'] || 1).to_i
end
first() click to toggle source
# File lib/json_api_paginator.rb, line 21
def first
  links['first'] ? result_set.links.fetch_link('first') : nil
end
last() click to toggle source
# File lib/json_api_paginator.rb, line 25
def last
  links['last'] ? result_set.links.fetch_link('last') : nil
end
next() click to toggle source
# File lib/json_api_paginator.rb, line 13
def next
  links['next'] ? result_set.links.fetch_link('next') : nil
end
next_page() click to toggle source
# File lib/json_api_paginator.rb, line 56
def next_page
  current_page < total_pages ? (current_page + 1) : nil
end
per_page() click to toggle source
# File lib/json_api_paginator.rb, line 44
def per_page
  params['page']['size'].to_i
end
prev() click to toggle source
# File lib/json_api_paginator.rb, line 17
def prev
  links['prev'] ? result_set.links.fetch_link('prev') : nil
end
previous_page() click to toggle source
# File lib/json_api_paginator.rb, line 52
def previous_page
  current_page > 1 ? (current_page - 1) : nil
end
total_count()
Alias for: total_entries
total_entries() click to toggle source
# File lib/json_api_paginator.rb, line 39
def total_entries
  meta['total_count'].to_i || per_page * total_pages
end
Also aliased as: total_count
total_pages() click to toggle source
# File lib/json_api_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['page']['number'].to_i
  else
    current_page
  end
end

Private Instance Methods

params_for_uri(uri) click to toggle source
# File lib/json_api_paginator.rb, line 62
def params_for_uri(uri)
  return {} unless uri
  uri = Addressable::URI.parse(uri)
  Rack::Utils.parse_nested_query(uri.query || '')
end