class PagedPaginator

Attributes

number[R]
size[R]

Public Class Methods

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

Public Instance Methods

apply(relation, _order_options) click to toggle source
# File lib/jsonapi/paginator.rb, line 138
def apply(relation, _order_options)
  offset = (@number - 1) * @size
  relation.offset(offset).limit(@size)
end
calculate_page_count(record_count) click to toggle source
# File lib/jsonapi/paginator.rb, line 134
def calculate_page_count(record_count)
  (record_count / @size.to_f).ceil
end

Private Instance Methods

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

    @size = validparams[:size] ? validparams[:size].to_i : JSONAPI.configuration.default_page_size
    @number = validparams[:number] ? validparams[:number].to_i : 1
  else
    @size = JSONAPI.configuration.default_page_size
    @number = params.to_i
  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 197
def verify_pagination_params
  if @size < 1
    fail JSONAPI::Exceptions::InvalidPageValue.new(:size, @size)
  elsif @size > JSONAPI.configuration.maximum_page_size
    fail JSONAPI::Exceptions::InvalidPageValue.new(:size, @size,
                                                   detail: "size exceeds maximum page size of #{JSONAPI.configuration.maximum_page_size}.")
  end

  if @number < 1
    fail JSONAPI::Exceptions::InvalidPageValue.new(:number, @number)
  end
end