class Pagoid::Pager
Attributes
options[RW]
paginatable[RW]
Public Class Methods
new(paginatable, options = {})
click to toggle source
Initialize
@param [Object] paginatable Some object(like an Array or ActiveRecord Object) for pagination @param [Hash] options options hash for tweaking pagination @option options [Fixnum] :page The page number @option options [Fixnum] :per_page The page size @option options [Fixnum] :order_by Callable on each element (or column) to sort by @option options [Fixnum] :direction “desc” or “asc”
# File lib/pagoid/pager.rb, line 24 def initialize(paginatable, options = {}) self.paginatable = AdapterRouter.new(paginatable).route self.options = options.dup end
Public Instance Methods
display_headers?()
click to toggle source
Describes whether or not to publish paging reference
@return boolean describing whether to display pagination headers
# File lib/pagoid/pager.rb, line 54 def display_headers? !paginated.nil? end
headers()
click to toggle source
Hash of data for publishing on a payload for Paging reference
@return [Hash] hash of paging data
# File lib/pagoid/pager.rb, line 39 def headers { total: paginated.total_count, total_pages: paginated.total_pages, first_page: paginated.first_page?, last_page: paginated.last_page?, current_page: paginated.current_page, limit: paginated.limit_value, offset: paginated.offset_value } end
paginated()
click to toggle source
Memoized method of Paged, Sized, and Ordered output
@return ordered, sized, paged data
# File lib/pagoid/pager.rb, line 32 def paginated @paginated ||= pered end
Private Instance Methods
direction()
click to toggle source
# File lib/pagoid/pager.rb, line 119 def direction options[:direction].to_s == "asc" ? :asc : :desc end
order_by()
click to toggle source
# File lib/pagoid/pager.rb, line 115 def order_by (!options[:order_by].nil? ? options[:order_by] : :created_at).to_s end
order_by_value(orderable)
click to toggle source
# File lib/pagoid/pager.rb, line 103 def order_by_value(orderable) orderable.respond_to?(order_by) ? orderable.public_send(order_by) : orderable end
order_callable()
click to toggle source
# File lib/pagoid/pager.rb, line 79 def order_callable order_method_hash[order_method] || sort_proc || ->(o) { o } end
order_method()
click to toggle source
# File lib/pagoid/pager.rb, line 83 def order_method order_methods.find { |method| coerce.respond_to? method } end
order_method_hash()
click to toggle source
# File lib/pagoid/pager.rb, line 87 def order_method_hash { order: ->(orderable) { orderable.order "#{order_by} #{direction}" } } end
order_methods()
click to toggle source
# File lib/pagoid/pager.rb, line 107 def order_methods order_method_hash.keys end
ordered()
click to toggle source
# File lib/pagoid/pager.rb, line 67 def ordered coerce(order_callable.call(paginatable)) end
page()
click to toggle source
# File lib/pagoid/pager.rb, line 111 def page options[:page].to_i > 0 ? options[:page].to_i : 1 end
paged()
click to toggle source
# File lib/pagoid/pager.rb, line 71 def paged ordered.page(page) end
per_page()
click to toggle source
# File lib/pagoid/pager.rb, line 75 def per_page options[:per_page].to_i > 0 ? options[:per_page].to_i : 100 end
pered()
click to toggle source
# File lib/pagoid/pager.rb, line 63 def pered paged.per(per_page) end
sort_proc()
click to toggle source
# File lib/pagoid/pager.rb, line 93 def sort_proc if coerce.respond_to?(:sort) ->(orderable) { orderable.sort { |a,b| direction == :asc ? order_by_value(a) <=> order_by_value(b) : order_by_value(b) <=> order_by_value(a) } } end end