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