class RedisPagination::Paginator::SortedSetPaginator
Public Class Methods
Initialize a new instance with a given Redis key
and options.
@param key [String] Redis sorted set key. @param options [Hash] Options for paginator.
# File lib/redis_pagination/paginator/sorted_set_paginator.rb, line 8 def initialize(key, options = {}) @key = key end
Public Instance Methods
Retrieve all items for key
.
@param options [Hash] Options. Valid options are :with_scores and :reverse.
:with_scores controls whether the score is returned along with the item. Default is +true+. :reverse controls whether to return items in highest-to-lowest (+true+) or loweest-to-highest order (+false+). Default is +true+.
@return a Hash
containing :current_page
, :total_pages
, :total_items
and :items
.
# File lib/redis_pagination/paginator/sorted_set_paginator.rb, line 66 def all(options = {}) with_scores = options.has_key?(:with_scores) ? options[:with_scores] : true reverse = options.has_key?(:reverse) ? options[:reverse] : true { :current_page => 1, :total_pages => 1, :total_items => total_items, :items => if reverse RedisPagination.redis.zrevrange(@key, 0, -1, :with_scores => with_scores) else RedisPagination.redis.zrange(@key, 0, -1, :with_scores => with_scores) end } end
Retrieve a page of items for key
.
@param page [int] Page of items to retrieve. @param options [Hash] Options. Valid options are :page_size, :with_scores and :reverse.
:page_size controls the page size for the call. Default is +RedisPagination.page_size+. :with_scores controls whether the score is returned along with the item. Default is +true+. :reverse controls whether to return items in highest-to-lowest (+true+) or loweest-to-highest order (+false+). Default is +true+.
@return a Hash
containing :current_page
, :total_pages
, :total_items
and :items
.
# File lib/redis_pagination/paginator/sorted_set_paginator.rb, line 37 def page(page, options = {}) current_page = page < 1 ? 1 : page index_for_redis = current_page - 1 page_size = options[:page_size] || RedisPagination.page_size starting_offset = index_for_redis * page_size ending_offset = (starting_offset + page_size) - 1 with_scores = options.has_key?(:with_scores) ? options[:with_scores] : true reverse = options.has_key?(:reverse) ? options[:reverse] : true { :current_page => current_page, :total_pages => total_pages(page_size), :total_items => total_items, :items => if reverse RedisPagination.redis.zrevrange(@key, starting_offset, ending_offset, :with_scores => with_scores) else RedisPagination.redis.zrange(@key, starting_offset, ending_offset, :with_scores => with_scores) end } end
Return the total number of items for key
.
@return the total number of items for key
.
# File lib/redis_pagination/paginator/sorted_set_paginator.rb, line 24 def total_items RedisPagination.redis.zcard(@key) end
Return the total number of pages for key
.
@param page_size [int] Page size to calculate total number of pages.
@return the total number of pages for key
.
# File lib/redis_pagination/paginator/sorted_set_paginator.rb, line 17 def total_pages(page_size = RedisPagination.page_size) (RedisPagination.redis.zcard(@key) / page_size.to_f).ceil end