Class: RedisPagination::Paginator::SortedSetPaginator
- Inherits:
-
Object
- Object
- RedisPagination::Paginator::SortedSetPaginator
- Defined in:
- lib/redis_pagination/paginator/sorted_set_paginator.rb
Instance Method Summary collapse
-
#all(options = {}) ⇒ Object
Retrieve all items for
key. -
#initialize(key, options = {}) ⇒ SortedSetPaginator
constructor
Initialize a new instance with a given Redis
keyand options. -
#page(page, options = {}) ⇒ Object
Retrieve a page of items for
key. -
#total_items ⇒ Object
Return the total number of items for
key. -
#total_pages(page_size = RedisPagination.page_size) ⇒ Object
Return the total number of pages for
key.
Constructor Details
#initialize(key, options = {}) ⇒ SortedSetPaginator
Initialize a new instance with a given Redis key and options.
8 9 10 |
# File 'lib/redis_pagination/paginator/sorted_set_paginator.rb', line 8 def initialize(key, = {}) @key = key end |
Instance Method Details
#all(options = {}) ⇒ Object
Retrieve all items for key.
66 67 68 69 70 71 72 73 74 75 76 77 78 |
# File 'lib/redis_pagination/paginator/sorted_set_paginator.rb', line 66 def all( = {}) with_scores = .has_key?(:with_scores) ? [:with_scores] : true reverse = .has_key?(:reverse) ? [:reverse] : true { :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 |
#page(page, options = {}) ⇒ Object
Retrieve a page of items for key.
37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
# File 'lib/redis_pagination/paginator/sorted_set_paginator.rb', line 37 def page(page, = {}) current_page = page < 1 ? 1 : page index_for_redis = current_page - 1 page_size = [:page_size] || RedisPagination.page_size starting_offset = index_for_redis * page_size ending_offset = (starting_offset + page_size) - 1 with_scores = .has_key?(:with_scores) ? [:with_scores] : true reverse = .has_key?(:reverse) ? [: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 |
#total_items ⇒ Object
Return the total number of items for key.
24 25 26 |
# File 'lib/redis_pagination/paginator/sorted_set_paginator.rb', line 24 def total_items RedisPagination.redis.zcard(@key) end |
#total_pages(page_size = RedisPagination.page_size) ⇒ Object
Return the total number of pages for key.
17 18 19 |
# 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 |