class JsonApiClient::Paginating::NestedParamPaginator

An alternate, more consistent Paginator that always wraps pagination query string params in a top-level wrapper_name, e.g. page=2, page=10.

Constants

DEFAULT_PAGE_PARAM
DEFAULT_PER_PAGE_PARAM
DEFAULT_WRAPPER_NAME

Attributes

params[R]
result_set[R]

Public Class Methods

new(result_set, data) click to toggle source
# File lib/json_api_client/paginating/nested_param_paginator.rb, line 57
def initialize(result_set, data)
  @params = params_for_uri(result_set.uri)
  @result_set = result_set
  @links = data["links"]
end
page_param() click to toggle source
# File lib/json_api_client/paginating/nested_param_paginator.rb, line 25
def page_param
  @_page_param ||= DEFAULT_PAGE_PARAM
  "#{wrapper_name}[#{@_page_param}]"
end
page_param=(param = DEFAULT_PAGE_PARAM) click to toggle source
# File lib/json_api_client/paginating/nested_param_paginator.rb, line 30
def page_param=(param = DEFAULT_PAGE_PARAM)
  raise ArgumentError, "don't wrap page_param" unless valid_param?(param)

  @_page_param = param.to_s
end
per_page_param() click to toggle source
# File lib/json_api_client/paginating/nested_param_paginator.rb, line 36
def per_page_param
  @_per_page_param ||= DEFAULT_PER_PAGE_PARAM
  "#{wrapper_name}[#{@_per_page_param}]"
end
per_page_param=(param = DEFAULT_PER_PAGE_PARAM) click to toggle source
# File lib/json_api_client/paginating/nested_param_paginator.rb, line 41
def per_page_param=(param = DEFAULT_PER_PAGE_PARAM)
  raise ArgumentError, "don't wrap per_page_param" unless valid_param?(param)

  @_per_page_param = param
end
wrapper_name() click to toggle source
# File lib/json_api_client/paginating/nested_param_paginator.rb, line 15
def wrapper_name
  @_wrapper_name ||= DEFAULT_WRAPPER_NAME
end
wrapper_name=(param = DEFAULT_WRAPPER_NAME) click to toggle source
# File lib/json_api_client/paginating/nested_param_paginator.rb, line 19
def wrapper_name=(param = DEFAULT_WRAPPER_NAME)
  raise ArgumentError, "don't wrap wrapper_name" unless valid_param?(param)

  @_wrapper_name = param.to_s
end

Private Class Methods

valid_param?(param) click to toggle source
# File lib/json_api_client/paginating/nested_param_paginator.rb, line 49
def valid_param?(param)
  !(param.nil? || param.to_s.include?("[") || param.to_s.include?("]"))
end

Public Instance Methods

current_page() click to toggle source
# File lib/json_api_client/paginating/nested_param_paginator.rb, line 105
def current_page
  params.fetch(page_param, 1).to_i
end
first() click to toggle source
# File lib/json_api_client/paginating/nested_param_paginator.rb, line 71
def first
  result_set.links.fetch_link("first")
end
last() click to toggle source
# File lib/json_api_client/paginating/nested_param_paginator.rb, line 75
def last
  result_set.links.fetch_link("last")
end
limit_value()
Alias for: per_page
next() click to toggle source
# File lib/json_api_client/paginating/nested_param_paginator.rb, line 63
def next
  result_set.links.fetch_link("next")
end
next_page() click to toggle source
# File lib/json_api_client/paginating/nested_param_paginator.rb, line 117
def next_page
  current_page < total_pages ? (current_page + 1) : nil
end
offset() click to toggle source
# File lib/json_api_client/paginating/nested_param_paginator.rb, line 95
def offset
  per_page * (current_page - 1)
end
out_of_bounds?() click to toggle source
# File lib/json_api_client/paginating/nested_param_paginator.rb, line 109
def out_of_bounds?
  current_page > total_pages
end
page_param() click to toggle source
# File lib/json_api_client/paginating/nested_param_paginator.rb, line 121
def page_param
  self.class.page_param
end
per_page() click to toggle source
# File lib/json_api_client/paginating/nested_param_paginator.rb, line 99
def per_page
  params.fetch(per_page_param) do
    result_set.length
  end.to_i
end
Also aliased as: limit_value
per_page_param() click to toggle source
# File lib/json_api_client/paginating/nested_param_paginator.rb, line 125
def per_page_param
  self.class.per_page_param
end
prev() click to toggle source
# File lib/json_api_client/paginating/nested_param_paginator.rb, line 67
def prev
  result_set.links.fetch_link("prev")
end
previous_page() click to toggle source
# File lib/json_api_client/paginating/nested_param_paginator.rb, line 113
def previous_page
  current_page > 1 ? (current_page - 1) : nil
end
total_count() click to toggle source
# File lib/json_api_client/paginating/nested_param_paginator.rb, line 93
def total_count; total_entries; end
total_entries() click to toggle source

this is an estimate, not necessarily an exact count

# File lib/json_api_client/paginating/nested_param_paginator.rb, line 90
def total_entries
  per_page * total_pages
end
total_pages() click to toggle source
# File lib/json_api_client/paginating/nested_param_paginator.rb, line 79
def total_pages
  if links["last"]
    uri = result_set.links.link_url_for("last")
    last_params = params_for_uri(uri)
    last_params.fetch(page_param, &method(:current_page)).to_i
  else
    current_page
  end
end

Protected Instance Methods

params_for_uri(uri) click to toggle source
# File lib/json_api_client/paginating/nested_param_paginator.rb, line 133
def params_for_uri(uri)
  return {} unless uri
  uri = Addressable::URI.parse(uri)
  ( uri.query_values || {} ).with_indifferent_access
end