class OffsetPaginator

Attributes

limit[R]
offset[R]

Public Class Methods

new(params) click to toggle source
# File lib/jsonapi/paginator.rb, line 34
def initialize(params)
  parse_pagination_params(params)
  verify_pagination_params
end
requires_record_count() click to toggle source
# File lib/jsonapi/paginator.rb, line 39
def self.requires_record_count
  true
end

Public Instance Methods

apply(relation, _order_options) click to toggle source
# File lib/jsonapi/paginator.rb, line 43
def apply(relation, _order_options)
  relation.offset(@offset).limit(@limit)
end

Private Instance Methods

parse_pagination_params(params) click to toggle source
# File lib/jsonapi/paginator.rb, line 92
def parse_pagination_params(params)
  if params.nil?
    @offset = 0
    @limit = JSONAPI.configuration.default_page_size
  elsif params.is_a?(ActionController::Parameters)
    validparams = params.permit(:offset, :limit)

    @offset = validparams[:offset] ? validparams[:offset].to_i : 0
    @limit = validparams[:limit] ? validparams[:limit].to_i : JSONAPI.configuration.default_page_size
  else
    fail JSONAPI::Exceptions::InvalidPageObject.new
  end
rescue ActionController::UnpermittedParameters => e
  raise JSONAPI::Exceptions::PageParametersNotAllowed.new(e.params)
end
verify_pagination_params() click to toggle source
# File lib/jsonapi/paginator.rb, line 108
def verify_pagination_params
  if @limit < 1
    fail JSONAPI::Exceptions::InvalidPageValue.new(:limit, @limit)
  elsif @limit > JSONAPI.configuration.maximum_page_size
    fail JSONAPI::Exceptions::InvalidPageValue.new(:limit, @limit,
                                                   detail: "Limit exceeds maximum page size of #{JSONAPI.configuration.maximum_page_size}.")
  end

  if @offset < 0
    fail JSONAPI::Exceptions::InvalidPageValue.new(:offset, @offset)
  end
end