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
links[R]
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
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