class JSOM::Pagination::Paginator

Attributes

page[R]

Public Instance Methods

call(collection, params:, base_url: '') click to toggle source
# File lib/jsom/pagination/paginator.rb, line 6
def call(collection, params:, base_url: '')
  @page = Page.new(params)

  pagy, records = pagy_custom(collection, page: page)

  meta = MetaData.new(total: pagy.count, pages: pagy.pages)
  # pagy methods: :count, :page, :items, :vars, :pages, :last, :offset, :from, :to, :prev, :next
  links = Links.new(page: page, total_pages: pagy.pages, url: base_url)
  Collection.new(items: records, links: links, meta: meta)
end

Private Instance Methods

pagy_custom(collection, page:) click to toggle source
# File lib/jsom/pagination/paginator.rb, line 21
def pagy_custom(collection, page:)
  pagy = Pagy.new(count: collection.count, page: page.number, items: page.size)
  paginated =
    if collection.is_a?(Array)
      collection[pagy.offset, pagy.items]
    else
      collection.offset(pagy.offset).limit(pagy.items).to_a
    end
  [pagy, paginated]
end