module Sinja::Sequel::Pagination

Public Class Methods

included(_) click to toggle source
# File lib/sinja/sequel/pagination.rb, line 13
def self.included(_)
  abort "You must `prepend' Sinja::Sequel::Pagination, not `include' it!"
end
prepended(base) click to toggle source
# File lib/sinja/sequel/pagination.rb, line 5
def self.prepended(base)
  base.sinja.configure { |c| c.page_using = {
    :number=>1,
    :size=>10,
    :record_count=>nil
  }}
end

Public Instance Methods

page(collection, opts) click to toggle source
# File lib/sinja/sequel/pagination.rb, line 17
def page(collection, opts)
  return collection, {} unless collection.respond_to?(:paginate) ||
    collection.respond_to?(:dataset) && (collection = collection.dataset).respond_to?(:paginate)

  opts = settings._sinja.page_using.merge(opts)
  collection = collection.paginate \
    opts[:number].to_i,
    opts[:size].to_i,
    (opts[:record_count].to_i if opts[:record_count])

  # Attributes common to all pagination links
  base = {
    :size=>collection.page_size,
    :record_count=>collection.pagination_record_count
  }

  pagination = {
    :first=>base.merge(:number=>1),
    :self=>base.merge(:number=>collection.current_page),
    :last=>base.merge(:number=>collection.page_count)
  }
  pagination[:next] = base.merge(:number=>collection.next_page) if collection.next_page
  pagination[:prev] = base.merge(:number=>collection.prev_page) if collection.prev_page

  return collection, pagination
end