class RedisModel::Helpers::SortedSetPaginator

Public: Pagination helper for elements contained in a sorted set defined based on RedisModel.

Example:

paginator = RedisModel::Helpers::SortedSetPaginator.new(sorted_set_object)

paginator.per(10).page(2)
# => Returns objects in the second page.

Elements in sorted set is ordered in descending score order, which is consistent with that of RedisModel::Types::SortedSet handles the object.

Public Class Methods

new(sorted_set) click to toggle source
# File lib/redis_model/helpers/sorted_set_paginator.rb, line 21
def initialize(sorted_set)
  @sorted_set = sorted_set
end

Public Instance Methods

each() { |element| ... } click to toggle source
# File lib/redis_model/helpers/sorted_set_paginator.rb, line 54
def each(&block)
  result.each do |element|
    yield element
  end
end
load_default_options() click to toggle source
# File lib/redis_model/helpers/sorted_set_paginator.rb, line 25
def load_default_options
  @per ||= 20
  @page ||= 1
end
max_id(id) click to toggle source
# File lib/redis_model/helpers/sorted_set_paginator.rb, line 48
def max_id(id)
  @max = id

  self
end
page(page_number) click to toggle source
# File lib/redis_model/helpers/sorted_set_paginator.rb, line 30
def page(page_number)
  @page = page_number.to_i

  self
end
per(number_per_page) click to toggle source
# File lib/redis_model/helpers/sorted_set_paginator.rb, line 36
def per(number_per_page)
  @per = number_per_page.to_i

  self
end
result() click to toggle source
# File lib/redis_model/helpers/sorted_set_paginator.rb, line 60
def result
  load_default_options

  @result ||= (@since || @max) ? result_with_score : result_with_rank
end
result_with_rank() click to toggle source
# File lib/redis_model/helpers/sorted_set_paginator.rb, line 72
def result_with_rank
  from = (@page - 1) * @per
  to = from + @per - 1

  @sorted_set.get_range_by_rank(from, to)
end
result_with_score() click to toggle source
# File lib/redis_model/helpers/sorted_set_paginator.rb, line 66
def result_with_score
  raw_result = @sorted_set.get_range(@since || '-inf', @max || '+inf')

  Kaminari.paginate_array(raw_result).page(@page).per(@per)
end
since_id(id) click to toggle source
# File lib/redis_model/helpers/sorted_set_paginator.rb, line 42
def since_id(id)
  @since = id

  self
end