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