Class: Redis::Objects::Pagination::Paginator
- Inherits:
-
Object
- Object
- Redis::Objects::Pagination::Paginator
- Includes:
- CollectionProxy
- Defined in:
- lib/redis/objects/pagination/paginator.rb,
lib/redis/objects/pagination/paginator/collection_proxy.rb
Defined Under Namespace
Modules: CollectionProxy
Instance Method Summary collapse
-
#current_page ⇒ Integer
Current page number.
-
#first_page? ⇒ Boolean
First page?.
-
#initialize(object, method_name, options = {}) ⇒ Paginator
constructor
A new instance of Paginator.
-
#last_page? ⇒ Boolean
Last page?.
-
#limit(num) ⇒ Paginator
Set limit.
-
#limit_value ⇒ Integer
Limit value.
-
#next_page ⇒ Integer
Next page number.
-
#offset(num) ⇒ Paginator
Set offset.
-
#offset_value ⇒ Integer
Offset value.
-
#page(num = 1) ⇒ Paginator
Change page.
-
#paginate ⇒ Array
Fetch collection of current page.
-
#per(num) ⇒ Paginator
Set number of items per page.
-
#prev_page ⇒ Integer
Previous page number.
-
#total_count ⇒ Integer
Total number of items.
-
#total_pages ⇒ Integer
Total number of pages.
Methods included from CollectionProxy
Constructor Details
#initialize(object, method_name, options = {}) ⇒ Paginator
Returns a new instance of Paginator.
10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
# File 'lib/redis/objects/pagination/paginator.rb', line 10 def initialize(object, method_name, = {}) @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 = ([:limit] || ::Redis::Objects::Pagination.config.default_per_page).to_i, [:offset].to_i, [:total_count] end |
Instance Method Details
#current_page ⇒ Integer
Current page number
77 78 79 |
# File 'lib/redis/objects/pagination/paginator.rb', line 77 def current_page @offset / @limit + 1 end |
#first_page? ⇒ Boolean
First page?
98 99 100 |
# File 'lib/redis/objects/pagination/paginator.rb', line 98 def first_page? current_page == 1 end |
#last_page? ⇒ Boolean
Last page?
105 106 107 |
# File 'lib/redis/objects/pagination/paginator.rb', line 105 def last_page? current_page >= total_pages end |
#limit(num) ⇒ Paginator
Set limit
48 49 50 |
# 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 ⇒ Integer
Limit value
112 113 114 |
# File 'lib/redis/objects/pagination/paginator.rb', line 112 def limit_value @limit end |
#next_page ⇒ Integer
Next page number
84 85 86 |
# File 'lib/redis/objects/pagination/paginator.rb', line 84 def next_page current_page + 1 unless last_page? end |
#offset(num) ⇒ Paginator
Set offset
56 57 58 |
# 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 ⇒ Integer
Offset value
119 120 121 |
# File 'lib/redis/objects/pagination/paginator.rb', line 119 def offset_value @offset end |
#page(num = 1) ⇒ Paginator
Change page
30 31 32 33 34 |
# 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 ⇒ Array
Fetch collection of current page
126 127 128 129 |
# 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) ⇒ Paginator
Set number of items per page
40 41 42 |
# File 'lib/redis/objects/pagination/paginator.rb', line 40 def per(num) limit(num).offset((current_page - 1) * num) end |
#prev_page ⇒ Integer
Previous page number
91 92 93 |
# File 'lib/redis/objects/pagination/paginator.rb', line 91 def prev_page current_page - 1 unless first_page? end |
#total_count ⇒ Integer
Total number of items
63 64 65 |
# File 'lib/redis/objects/pagination/paginator.rb', line 63 def total_count @total_count || @object.size end |
#total_pages ⇒ Integer
Total number of pages
70 71 72 |
# File 'lib/redis/objects/pagination/paginator.rb', line 70 def total_pages (total_count / @limit.to_f).ceil end |