module DataMapper::Pagination

Constants

VERSION

Attributes

pager[RW]

DataMapper::Pager instance.

Public Class Methods

defaults() click to toggle source

Default pagination values.

Options

:per_page       Records per page; defaults to 6
:size           Number of intermediate page number links to be shown; Defaults to 7
:pager_class    Class for the div that contains the pagination links, defaults to 'pager'
:previous_text  Text for the 'previous' link, defaults to 'Previous'
:next_text      Text for the 'next' link, defaults to 'Next'
:first_text     Text for the 'first' link, defaults to 'First'
:last_text      Text for the 'last' link, defaults to 'Last'
:more_text      Text for the 'more' indicator, defaults to '...'

Examples

DataMapper::Pagination.defaults[:size] = 5
# File lib/dm-pager/defaults.rb, line 36
def self.defaults
  @defaults
end

Public Instance Methods

page(page = nil, options = {}) click to toggle source

Page collection by the page number and options provided.

Since pagers will commonly be used with query strings, we coerce all numeric strings such as '12' to their integer value 12. This is the case for page, :per_page, :page, etc.

Options

:page       Current page number
:per_page   Results per page; defaults to 6
:order      Defaults to [:id.desc]
:page_param The paramter to use to encode the page.  Default :page

Examples

User.all.page
User.all.page(2)
User.all.page(2, :per_page => 5)
User.all.page(:page => 2, :per_page => 5)
User.all.page(:page => 2, :page_param => :user_page)
# File lib/dm-pager/pagination.rb, line 33
def page page = nil, options = {}
  options, page = page, nil if page.is_a? Hash
  page_param  = pager_option(:page_param, options)
  page ||= pager_option page_param, options
  options.delete page_param
  page = 1 unless (page = page.to_i) && page > 1
  per_page    = pager_option(:per_page, options).to_i
  query = options.dup
  collection = new_collection scoped_query(options = {
    :limit => per_page,
    :offset => (page - 1) * per_page,
    :order => [:id.desc]
  }.merge(query))
  query.delete :order
  options.merge! :total => count(query), page_param => page, :page_param => page_param
  collection.pager = DataMapper::Pager.new options
  collection
end

Private Instance Methods

pager_option(key, options = {}) click to toggle source

Return value for key from indifferent hash options.

* Checks for sym key
* Checks for string key
* Checks DataMapper::Pagination.defaults for the sym key
* Deletes both keys to prevent them from being part of the query
# File lib/dm-pager/pagination.rb, line 63
def pager_option key, options = {}
  a = options.delete key.to_sym
  b = options.delete key.to_s
  a || b || Pagination.defaults[key.to_sym]
end