class ActionPager::Pager

Constants

DEFAULTS

Attributes

collection[R]
current_page[R]
near[R]
options[R]
per_page[R]

Public Class Methods

new(collection, options={}) click to toggle source
# File lib/action_pager/pager.rb, line 9
def initialize(collection, options={})
  @options = options
  opts = DEFAULTS.merge(options)
  @current_page = opts[:page]
  @per_page = opts[:per]
  @near = opts[:near]
  @collection = collection
end

Public Instance Methods

bottom_gap?() click to toggle source

show bottom (left) gap mark in pager?

# File lib/action_pager/pager.rb, line 129
def bottom_gap?
  near_pages.first > 1
end
collection_at(page) click to toggle source
# File lib/action_pager/pager.rb, line 23
def collection_at(page)
  offset = offset_at(page)
  if collection.is_a?(Array)
    collection.drop(offset).first(per_page)
  else # for ActiveRecord::Relation and other OR mapper collections
    collection.offset(offset).limit(per_page)
  end
end
collection_count() click to toggle source
# File lib/action_pager/pager.rb, line 76
def collection_count
  @_collection_count ||= collection.count
end
current_collection() click to toggle source
# File lib/action_pager/pager.rb, line 32
def current_collection
  collection_at(current_page)
end
current_offset() click to toggle source
# File lib/action_pager/pager.rb, line 56
def current_offset
  offset_at(current_page)
end
first_collection() click to toggle source
# File lib/action_pager/pager.rb, line 36
def first_collection
  collection_at(first_page)
end
first_offset() click to toggle source
# File lib/action_pager/pager.rb, line 60
def first_offset
  offset_at(first_page)
end
first_page() click to toggle source
# File lib/action_pager/pager.rb, line 80
def first_page
  1
end
first_page?() click to toggle source
# File lib/action_pager/pager.rb, line 84
def first_page?
  current_page == 1
end
last_collection() click to toggle source
# File lib/action_pager/pager.rb, line 40
def last_collection
  collection_at(last_page)
end
last_offset() click to toggle source
# File lib/action_pager/pager.rb, line 64
def last_offset
  offset_at(last_page)
end
last_page() click to toggle source
# File lib/action_pager/pager.rb, line 88
def last_page
  @last_page ||= collection_count / per_page + 1
end
Also aliased as: total_pages
last_page?() click to toggle source
# File lib/action_pager/pager.rb, line 93
def last_page?
  current_page == last_page
end
near_pages() click to toggle source

pages that numbers are displayed

# File lib/action_pager/pager.rb, line 112
def near_pages
  @near_pages ||= begin
    if current_page <= near + 1
      upper_page = shown_page_count >= last_page ? last_page : shown_page_count
      1..upper_page
    elsif current_page >= last_page - near - 1
      bottom_page = last_page - shown_page_count + 1
      (bottom_page > 1 ? bottom_page : 1)..last_page
    else
      bottom_page = current_page - near
      upper_page = current_page + near
      (bottom_page > 1 ? bottom_page : 1)..(upper_page < last_page ? upper_page : last_page)
    end
  end
end
next_collection() click to toggle source
# File lib/action_pager/pager.rb, line 48
def next_collection
  collection_at(next_page)
end
next_offset() click to toggle source
# File lib/action_pager/pager.rb, line 72
def next_offset
  offset_at(next_page)
end
next_page() click to toggle source
# File lib/action_pager/pager.rb, line 102
def next_page
  page = current_page + 1
  page <= last_page ? page : nil
end
offset_at(page) click to toggle source
# File lib/action_pager/pager.rb, line 52
def offset_at(page)
  (page - 1) * per_page
end
prev_collection() click to toggle source
# File lib/action_pager/pager.rb, line 44
def prev_collection
  collection_at(prev_page)
end
prev_offset() click to toggle source
# File lib/action_pager/pager.rb, line 68
def prev_offset
  offset_at(prev_page)
end
prev_page() click to toggle source
# File lib/action_pager/pager.rb, line 97
def prev_page
  page = current_page - 1
  page >= 1 ? page : nil
end
scoped() click to toggle source
# File lib/action_pager/pager.rb, line 18
def scoped
  warn "[DEPRECATION] `scoped` is deprecated.  Please use `current_collection` instead."
  current_collection
end
shown_page_count() click to toggle source
# File lib/action_pager/pager.rb, line 107
def shown_page_count
  near * 2 + 1
end
total_pages()
Alias for: last_page
upper_gap?() click to toggle source

show upper (right) gap mark in pager?

# File lib/action_pager/pager.rb, line 134
def upper_gap?
  near_pages.last < last_page
end