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