class JsonApiable::PaginationParser

Attributes

default_page_size[R]
no_pagination[R]
page_param[R]

Public Class Methods

new(page_arg, no_pagination_arg, default_page_size) click to toggle source
# File lib/json_apiable/pagination_parser.rb, line 11
def initialize(page_arg, no_pagination_arg, default_page_size)
  @page_param = page_arg
  @no_pagination = no_pagination_arg
  @default_page_size = default_page_size
end
parse_pagination!(query_params, default_page_size) click to toggle source
# File lib/json_apiable/pagination_parser.rb, line 5
def self.parse_pagination!(query_params, default_page_size)
  PaginationParser.new(query_params[:page], query_params[:no_pagination], default_page_size).parse!
end

Public Instance Methods

parse!() click to toggle source
# File lib/json_apiable/pagination_parser.rb, line 17
def parse!
  if no_pagination
    jsonapi_page_hash = nil
  elsif invalid_page_param?
    raise ArgumentError, 'page'
  elsif invalid_page_number?
    raise ArgumentError, 'page[number]'
  elsif invalid_page_size?
    raise ArgumentError, 'page[size]'
  else
    jsonapi_page_hash = page_param.presence.to_h.with_indifferent_access
    # convert values to integers
    jsonapi_page_hash = jsonapi_page_hash.merge(jsonapi_page_hash) { |_, v| v.to_i } if jsonapi_page_hash.present?
    jsonapi_page_hash = { number: Configuration::DEFAULT_PAGE_NUMBER, size: default_page_size } if jsonapi_page_hash.blank?
    jsonapi_page_hash[:number] = Configuration::DEFAULT_PAGE_NUMBER if jsonapi_page_hash[:number].blank?
    jsonapi_page_hash[:size] = default_page_size if jsonapi_page_hash[:size].blank?
  end
  jsonapi_page_hash
end

Private Instance Methods

invalid_number?(number_param) click to toggle source
# File lib/json_apiable/pagination_parser.rb, line 53
def invalid_number?(number_param)
  return true unless number_param.integer?

  number = number_param.to_i
  number > Configuration::MAX_PAGE_SIZE || number.zero? || number.negative?
end
invalid_page_number?() click to toggle source
# File lib/json_apiable/pagination_parser.rb, line 43
def invalid_page_number?
  page_num_param = page_param&.dig(:number)
  page_num_param.present? && invalid_number?(page_num_param)
end
invalid_page_param?() click to toggle source
# File lib/json_apiable/pagination_parser.rb, line 39
def invalid_page_param?
  page_param.present? && !page_param.is_a?(HashWithIndifferentAccess)
end
invalid_page_size?() click to toggle source
# File lib/json_apiable/pagination_parser.rb, line 48
def invalid_page_size?
  page_size_param = page_param&.dig(:size)
  page_size_param.present? && invalid_number?(page_size_param)
end