Module: ApiPagination

Defined in:
lib/api-pagination.rb,
lib/api-pagination/hooks.rb,
lib/api-pagination/version.rb

Defined Under Namespace

Classes: Hooks, Version

Constant Summary collapse

VERSION =
Version.to_s

Class Attribute Summary collapse

Class Method Summary collapse

Class Attribute Details

.paginatorObject (readonly)

Returns the value of attribute paginator.



5
6
7
# File 'lib/api-pagination.rb', line 5

def paginator
  @paginator
end

Class Method Details

.pages_from(collection) ⇒ Object



34
35
36
37
38
39
40
41
42
43
44
45
46
# File 'lib/api-pagination.rb', line 34

def pages_from(collection)
  {}.tap do |pages|
    unless collection.first_page?
      pages[:first] = 1
      pages[:prev]  = collection.current_page - 1
    end

    unless collection.last_page?
      pages[:last] = collection.total_pages
      pages[:next] = collection.current_page + 1
    end
  end
end

.paginate(collection, options = {}) ⇒ Object



7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# File 'lib/api-pagination.rb', line 7

def paginate(collection, options = {})
  options[:page]     = options[:page].to_i
  options[:page]     = 1 if options[:page] <= 0
  options[:per_page] = options[:per_page].to_i

  case ApiPagination.paginator
  when :kaminari
    if Kaminari.config.max_per_page && options[:per_page] > Kaminari.config.max_per_page
      options[:per_page] = Kaminari.config.max_per_page
    elsif options[:per_page] <= 0
      options[:per_page] = Kaminari.config.default_per_page
    end
    collection = Kaminari.paginate_array(collection) if collection.is_a?(Array)
    collection.page(options[:page]).per(options[:per_page])
  when :will_paginate
    options[:per_page] = WillPaginate.per_page if options[:per_page] <= 0

    if defined?(Sequel::Dataset) && collection.kind_of?(Sequel::Dataset)
      collection.paginate(options[:page], options[:per_page])
    else
      collection.paginate(:page => options[:page], :per_page => options[:per_page])
    end
  else
    raise StandardError, "Unknown paginator: #{ApiPagination.paginator}"
  end
end

.total_from(collection) ⇒ Object



48
49
50
51
52
53
# File 'lib/api-pagination.rb', line 48

def total_from(collection)
  case ApiPagination.paginator
    when :kaminari      then collection.total_count.to_s
    when :will_paginate then collection.total_entries.to_s
  end
end