class Paged

Public Class Methods

new(items, opts) click to toggle source
# File lib/paged.rb, line 4
def initialize(items, opts)
  raise ArgumentError.new ':page_size must be a positive number' unless opts[:page_size] and opts[:page_size] > 0
  @items = items
  @page_size = opts[:page_size]
  @page = 0
end

Public Instance Methods

next_page() click to toggle source
# File lib/paged.rb, line 25
def next_page
  return if outside_bounds
  page + 1 if page < total_pages
end
page() click to toggle source
# File lib/paged.rb, line 16
def page
  @page + 1
end
page=(page) click to toggle source
# File lib/paged.rb, line 11
def page=(page)
  raise ArgumentError.new 'page must be a number' if not page.kind_of? Numeric
  @page = page - 1
end
previous_page() click to toggle source
# File lib/paged.rb, line 20
def previous_page
  return if outside_bounds
  page - 1 if page > 1
end
respond_to?(symbol, include_private=false) click to toggle source
# File lib/paged.rb, line 30
def respond_to?(symbol, include_private=false)
  @items.respond_to? symbol, include_private
end

Private Instance Methods

method_missing(symbol, *args, &block) click to toggle source
# File lib/paged.rb, line 36
def method_missing(symbol, *args, &block)
  page_of_items.send(symbol, *args, &block)
end
outside_bounds() click to toggle source
# File lib/paged.rb, line 53
def outside_bounds
  @page < 0 or @page > total_pages
end
page_of_items() click to toggle source
# File lib/paged.rb, line 40
def page_of_items
  return [] if outside_bounds
  @items[start_index, @page_size]
end
start_index() click to toggle source
# File lib/paged.rb, line 45
def start_index
  @page * @page_size
end
total_pages() click to toggle source
# File lib/paged.rb, line 49
def total_pages
  (@items.size.quo @page_size).ceil
end