Class: Redis::Objects::Pagination::Paginator

Inherits:
Object
  • Object
show all
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

Methods included from CollectionProxy

#each, #to_ary

Constructor Details

#initialize(object, method_name, options = {}) ⇒ Paginator

Returns a new instance of Paginator.

Raises:



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, options = {})
  @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 = (options[:limit] || ::Redis::Objects::Pagination.config.default_per_page).to_i, options[:offset].to_i, options[:total_count]
end

Instance Method Details

#current_pageInteger

Current page number

Returns:

  • (Integer)


77
78
79
# File 'lib/redis/objects/pagination/paginator.rb', line 77

def current_page
  @offset / @limit + 1
end

#first_page?Boolean

First page?

Returns:

  • (Boolean)


98
99
100
# File 'lib/redis/objects/pagination/paginator.rb', line 98

def first_page?
  current_page == 1
end

#last_page?Boolean

Last page?

Returns:

  • (Boolean)


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

Parameters:

  • limit (Integer)

Returns:



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_valueInteger

Limit value

Returns:

  • (Integer)


112
113
114
# File 'lib/redis/objects/pagination/paginator.rb', line 112

def limit_value
  @limit
end

#next_pageInteger

Next page number

Returns:

  • (Integer)


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

Parameters:

  • offset (Integer)

Returns:



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_valueInteger

Offset value

Returns:

  • (Integer)


119
120
121
# File 'lib/redis/objects/pagination/paginator.rb', line 119

def offset_value
  @offset
end

#page(num = 1) ⇒ Paginator

Change page

Parameters:

  • page (Integer)

    number

Returns:



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

#paginateArray

Fetch collection of current page

Returns:

  • (Array)


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

Parameters:

  • number (Integer)

    of items per page

Returns:



40
41
42
# File 'lib/redis/objects/pagination/paginator.rb', line 40

def per(num)
  limit(num).offset((current_page - 1) * num)
end

#prev_pageInteger

Previous page number

Returns:

  • (Integer)


91
92
93
# File 'lib/redis/objects/pagination/paginator.rb', line 91

def prev_page
  current_page - 1 unless first_page?
end

#total_countInteger

Total number of items

Returns:

  • (Integer)


63
64
65
# File 'lib/redis/objects/pagination/paginator.rb', line 63

def total_count
  @total_count || @object.size
end

#total_pagesInteger

Total number of pages

Returns:

  • (Integer)


70
71
72
# File 'lib/redis/objects/pagination/paginator.rb', line 70

def total_pages
  (total_count / @limit.to_f).ceil
end