class ApiMe::Pagination

Attributes

page_offset[RW]
page_size[RW]
scope[RW]

Public Class Methods

new(scope:, page_params:) click to toggle source
# File lib/api_me/pagination.rb, line 7
def initialize(scope:, page_params:)
  self.scope = scope
  return unless page_params
  self.page_size = page_params[:size]
  self.page_offset = page_params[:offset]
end

Public Instance Methods

page_meta() click to toggle source
# File lib/api_me/pagination.rb, line 18
def page_meta # rubocop:disable Metrics/MethodLength
  return {} unless paging?
  {
    size: page_meta_size,
    offset: page_offset,
    record_count: scope.size,
    total_records: scope.total_count,
    total_pages: scope.total_pages,
    iteration_count_start: iteration_count_start,
    iteration_count_end: iteration_count_end,
    current_iteration_count: current_iteration_count
  }
end
results() click to toggle source
# File lib/api_me/pagination.rb, line 14
def results
  paging? ? page.per.scope : scope
end

Protected Instance Methods

current_iteration_count() click to toggle source
# File lib/api_me/pagination.rb, line 46
def current_iteration_count
  iteration_count_start - iteration_count_offset
end
iteration_count_end() click to toggle source
# File lib/api_me/pagination.rb, line 38
def iteration_count_end
  page_size.to_i * page_offset.to_i
end
iteration_count_offset() click to toggle source
# File lib/api_me/pagination.rb, line 42
def iteration_count_offset
  scope.total_count < iteration_count_end ? scope.total_count : iteration_count_end
end
iteration_count_start() click to toggle source
# File lib/api_me/pagination.rb, line 34
def iteration_count_start
  (page_size.to_i * (page_offset.to_i - 1)) + 1
end
page() click to toggle source
# File lib/api_me/pagination.rb, line 54
def page
  self.scope = scope.page(page_offset ? page_offset : 1)
  self
end
page_meta_size() click to toggle source
# File lib/api_me/pagination.rb, line 50
def page_meta_size
  page_size.nil? ? default_page_size : page_size
end
per() click to toggle source
# File lib/api_me/pagination.rb, line 59
def per
  self.scope = scope.per(page_size) if page_size
  self
end

Private Instance Methods

default_page_size() click to toggle source
# File lib/api_me/pagination.rb, line 66
def default_page_size
  Kaminari.config.default_per_page
end
paging?() click to toggle source
# File lib/api_me/pagination.rb, line 70
def paging?
  page_size || page_offset
end