class ActiveModelSerializers::Adapter::JsonApi::PaginationLinks
Constants
- FIRST_PAGE
- MissingSerializationContextError
Attributes
adapter_options[R]
collection[R]
context[R]
Public Class Methods
new(collection, adapter_options)
click to toggle source
# File lib/active_model_serializers/adapter/json_api/pagination_links.rb, line 12 def initialize(collection, adapter_options) @collection = collection @adapter_options = adapter_options @context = adapter_options.fetch(:serialization_context) do fail MissingSerializationContextError, <<-EOF.freeze JsonApi::PaginationLinks requires a ActiveModelSerializers::SerializationContext. Please pass a ':serialization_context' option or override CollectionSerializer#paginated? to return 'false'. EOF end end
Public Instance Methods
as_json()
click to toggle source
# File lib/active_model_serializers/adapter/json_api/pagination_links.rb, line 24 def as_json { self: location_url, first: first_page_url, prev: prev_page_url, next: next_page_url, last: last_page_url } end
Private Instance Methods
first_page_url()
click to toggle source
# File lib/active_model_serializers/adapter/json_api/pagination_links.rb, line 44 def first_page_url url_for_page(1) end
last_page_url()
click to toggle source
# File lib/active_model_serializers/adapter/json_api/pagination_links.rb, line 48 def last_page_url if collection.total_pages == 0 url_for_page(FIRST_PAGE) else url_for_page(collection.total_pages) end end
location_url()
click to toggle source
# File lib/active_model_serializers/adapter/json_api/pagination_links.rb, line 40 def location_url url_for_page(collection.current_page) end
next_page_url()
click to toggle source
# File lib/active_model_serializers/adapter/json_api/pagination_links.rb, line 61 def next_page_url return nil if collection.total_pages == 0 || collection.current_page == collection.total_pages url_for_page(collection.next_page) end
per_page()
click to toggle source
# File lib/active_model_serializers/adapter/json_api/pagination_links.rb, line 84 def per_page @per_page ||= collection.try(:per_page) || collection.try(:limit_value) || collection.size end
prev_page_url()
click to toggle source
# File lib/active_model_serializers/adapter/json_api/pagination_links.rb, line 56 def prev_page_url return nil if collection.current_page == FIRST_PAGE url_for_page(collection.current_page - FIRST_PAGE) end
query_parameters()
click to toggle source
# File lib/active_model_serializers/adapter/json_api/pagination_links.rb, line 80 def query_parameters @query_parameters ||= context.query_parameters end
request_url()
click to toggle source
# File lib/active_model_serializers/adapter/json_api/pagination_links.rb, line 76 def request_url @request_url ||= context.request_url end
url(options = {})
click to toggle source
# File lib/active_model_serializers/adapter/json_api/pagination_links.rb, line 72 def url(options = {}) @url ||= options.fetch(:links, {}).fetch(:self, nil) || request_url end
url_for_page(number)
click to toggle source
# File lib/active_model_serializers/adapter/json_api/pagination_links.rb, line 66 def url_for_page(number) params = query_parameters.dup params[:page] = { size: per_page, number: number } "#{url(adapter_options)}?#{params.to_query}" end