class Redis::Objects::Pagination::Paginator
Public Class Methods
new(object, method_name, options = {})
click to toggle source
# File lib/redis/objects/pagination/paginator.rb, line 10 def initialize(object, method_name, options = {}) @object = object @method_name, *@method_args = case method_name when Hash name, args = method_name.first [name, *Array.wrap(args)] else Array.wrap(method_name) end raise InvalidArgument if object.method(@method_name).arity.abs < 2 @limit, @offset, @total_count = (options[:limit] || ::Redis::Objects::Pagination.config.default_per_page).to_i, options[:offset].to_i, options[:total_count] end
Public Instance Methods
current_page()
click to toggle source
Current page number
@return [Integer]
# File lib/redis/objects/pagination/paginator.rb, line 77 def current_page @offset / @limit + 1 end
first_page?()
click to toggle source
First page?
@return [Boolean]
# File lib/redis/objects/pagination/paginator.rb, line 98 def first_page? current_page == 1 end
last_page?()
click to toggle source
Last page?
@return [Boolean]
# File lib/redis/objects/pagination/paginator.rb, line 105 def last_page? current_page >= total_pages end
limit(num)
click to toggle source
Set limit
@param [Integer] limit @return [Paginator]
# File lib/redis/objects/pagination/paginator.rb, line 48 def limit(num) self.class.new @object, [@method_name, *@method_args], limit: num, offset: @offset end
limit_value()
click to toggle source
Limit value
@return [Integer]
# File lib/redis/objects/pagination/paginator.rb, line 112 def limit_value @limit end
next_page()
click to toggle source
Next page number
@return [Integer]
# File lib/redis/objects/pagination/paginator.rb, line 84 def next_page current_page + 1 unless last_page? end
offset(num)
click to toggle source
Set offset
@param [Integer] offset @return [Paginator]
# File lib/redis/objects/pagination/paginator.rb, line 56 def offset(num) self.class.new @object, [@method_name, *@method_args], limit: @limit, offset: num end
offset_value()
click to toggle source
Offset value
@return [Integer]
# File lib/redis/objects/pagination/paginator.rb, line 119 def offset_value @offset end
page(num = 1)
click to toggle source
Change page
@param [Integer] page number @return [Paginator]
# File lib/redis/objects/pagination/paginator.rb, line 30 def page(num = 1) num = num.to_i - 1 num = [num, 0].max offset(@limit * num) end
paginate()
click to toggle source
Fetch collection of current page
@return [Array]
# File lib/redis/objects/pagination/paginator.rb, line 126 def paginate args = [start_index, end_index, *@method_args].compact @object.send @method_name, *args end
per(num)
click to toggle source
Set number of items per page
@param [Integer] number of items per page @return [Paginator]
# File lib/redis/objects/pagination/paginator.rb, line 40 def per(num) limit(num).offset((current_page - 1) * num) end
prev_page()
click to toggle source
Previous page number
@return [Integer]
# File lib/redis/objects/pagination/paginator.rb, line 91 def prev_page current_page - 1 unless first_page? end
total_count()
click to toggle source
Total number of items
@return [Integer]
# File lib/redis/objects/pagination/paginator.rb, line 63 def total_count @total_count || @object.size end
total_pages()
click to toggle source
Total number of pages
@return [Integer]
# File lib/redis/objects/pagination/paginator.rb, line 70 def total_pages (total_count / @limit.to_f).ceil end
Private Instance Methods
end_index()
click to toggle source
# File lib/redis/objects/pagination/paginator.rb, line 137 def end_index index = @offset + @limit - 1 if total_count <= index total_count else index end end
start_index()
click to toggle source
# File lib/redis/objects/pagination/paginator.rb, line 133 def start_index @offset end