class Webby::Paginator
Attributes
count[R]
directory[R]
filename[R]
per_page[R]
resource[R]
Public Class Methods
new(count, per_page, resource, &select)
click to toggle source
Instantiate a new Paginator object
Provide:
-
A total count of the number of objects to paginate
-
The number of objects in each page
-
A block that returns the array of items
-
The block is passed the item offset (and the number of items to show per page, for convenience, if the arity is 2)
-
# File lib/webby/stelan/paginator.rb, line 32 def initialize(count, per_page, resource, &select) @count, @per_page, @resource = count, per_page, resource @meta_data = @resource._meta_data.dup @filename = @resource.filename @directory = @resource.directory unless select raise MissingSelectError, "Must provide block to select data for each page" end @select = select end
Public Instance Methods
each() { |page(number)| ... }
click to toggle source
# File lib/webby/stelan/paginator.rb, line 58 def each 1.upto(number_of_pages) do |number| yield page(number) end end
first()
click to toggle source
First page object
# File lib/webby/stelan/paginator.rb, line 49 def first page 1 end
last()
click to toggle source
Last page object
# File lib/webby/stelan/paginator.rb, line 54 def last page number_of_pages end
number_of_pages()
click to toggle source
Total number of pages
# File lib/webby/stelan/paginator.rb, line 44 def number_of_pages (@count / @per_page).to_i + (@count % @per_page > 0 ? 1 : 0) end
page(number)
click to toggle source
Retrieve page object by number
# File lib/webby/stelan/paginator.rb, line 65 def page(number) number = (n = number.to_i) > 0 ? n : 1 Page.new(self, number, lambda { offset = (number - 1) * @per_page args = [offset] args << @per_page if @select.arity == 2 @select.call(*args) }) end
reset()
click to toggle source
Finalizer method that should be called when the paginator is finished
# File lib/webby/stelan/paginator.rb, line 76 def reset resource._reset(@meta_data) end