Class: RedisPagination::Paginator::ListPaginator

Inherits:
Object
  • Object
show all
Defined in:
lib/redis_pagination/paginator/list_paginator.rb

Instance Method Summary collapse

Constructor Details

#initialize(key, options = {}) ⇒ ListPaginator

Initialize a new instance with a given Redis key and options.

Parameters:

  • key (String)

    Redis list key.

  • options (Hash) (defaults to: {})

    Options for paginator.



8
9
10
# File 'lib/redis_pagination/paginator/list_paginator.rb', line 8

def initialize(key, options = {})
  @key = key
end

Instance Method Details

#all(options = {}) ⇒ Object

Retrieve all items for key.

Returns:

  • a Hash containing :total_items and :items.



53
54
55
56
57
58
# File 'lib/redis_pagination/paginator/list_paginator.rb', line 53

def all(options = {})
  {
    :total_items => total_items,
    :items => RedisPagination.redis.lrange(@key, 0, -1)
  }
end

#page(page, options = {}) ⇒ Object

Retrieve a page of items for key.

Parameters:

  • page (int)

    Page of items to retrieve.

  • options (Hash) (defaults to: {})

    Options. Valid options are :page_size. :page_size controls the page size for the call. Default is RedisPagination.page_size.

Returns:

  • a Hash containing :current_page, :total_pages, :total_items and :items.



35
36
37
38
39
40
41
42
43
44
45
46
47
48
# File 'lib/redis_pagination/paginator/list_paginator.rb', line 35

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

  {
    :current_page => current_page,
    :total_pages => total_pages(page_size),
    :total_items => total_items,
    :items => RedisPagination.redis.lrange(@key, starting_offset, ending_offset)
  }
end

#total_itemsObject

Return the total number of items for key.

Returns:

  • the total number of items for key.



24
25
26
# File 'lib/redis_pagination/paginator/list_paginator.rb', line 24

def total_items
  RedisPagination.redis.llen(@key)
end

#total_pages(page_size = RedisPagination.page_size) ⇒ Object

Return the total number of pages for key.

Parameters:

  • page_size (int) (defaults to: RedisPagination.page_size)

    Page size to calculate total number of pages.

Returns:

  • the total number of pages for key.



17
18
19
# File 'lib/redis_pagination/paginator/list_paginator.rb', line 17

def total_pages(page_size = RedisPagination.page_size)
  (RedisPagination.redis.llen(@key) / page_size.to_f).ceil
end