class Godmin::Paginator

Constants

WINDOW_SIZE

Attributes

current_page[R]
per_page[R]

Public Class Methods

new(resources, per_page: 25, current_page: nil) click to toggle source
# File lib/godmin/paginator.rb, line 7
def initialize(resources, per_page: 25, current_page: nil)
  @resources = resources
  @per_page = per_page
  @current_page = current_page ? current_page.to_i : 1
end

Public Instance Methods

pages() click to toggle source
# File lib/godmin/paginator.rb, line 17
def pages
  @pages ||= begin
    pages = (1..total_pages).to_a

    return pages unless total_pages > WINDOW_SIZE

    if current_page < WINDOW_SIZE
      pages.slice(0, WINDOW_SIZE)
    elsif current_page > (total_pages - WINDOW_SIZE)
      pages.slice(-WINDOW_SIZE, WINDOW_SIZE)
    else
      pages.slice(pages.index(current_page) - (WINDOW_SIZE / 2), WINDOW_SIZE)
    end
  end
end
paginate() click to toggle source
# File lib/godmin/paginator.rb, line 13
def paginate
  @resources.limit(per_page).offset(offset)
end
total_pages() click to toggle source
# File lib/godmin/paginator.rb, line 33
def total_pages
  @total_pages ||= (total_resources.to_f / per_page).ceil
end
total_resources() click to toggle source
# File lib/godmin/paginator.rb, line 37
def total_resources
  @total_resources ||= begin
    count = @resources.count

    if count.respond_to?(:count)
      count.count
    else
      count
    end
  end
end

Private Instance Methods

offset() click to toggle source
# File lib/godmin/paginator.rb, line 51
def offset
  (current_page * per_page) - per_page
end