Module: Sinja::Sequel::Pagination

Defined in:
lib/sinja/sequel/pagination.rb

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.included(_) ⇒ Object



13
14
15
# File 'lib/sinja/sequel/pagination.rb', line 13

def self.included(_)
  abort "You must `prepend' Sinja::Sequel::Pagination, not `include' it!"
end

.prepended(base) ⇒ Object



5
6
7
8
9
10
11
# File 'lib/sinja/sequel/pagination.rb', line 5

def self.prepended(base)
  base.sinja.configure { |c| c.page_using = {
    :number=>1,
    :size=>10,
    :record_count=>nil
  }}
end

Instance Method Details

#page(collection, opts) ⇒ Object



17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# File 'lib/sinja/sequel/pagination.rb', line 17

def page(collection, opts)
  return collection, {} unless collection.respond_to?(:paginate) ||
    collection.respond_to?(:dataset) && (collection = collection.dataset).respond_to?(:paginate)

  opts = settings._sinja.page_using.merge(opts)
  collection = collection.paginate \
    opts[:number].to_i,
    opts[:size].to_i,
    (opts[:record_count].to_i if opts[:record_count])

  # Attributes common to all pagination links
  base = {
    :size=>collection.page_size,
    :record_count=>collection.pagination_record_count
  }

  pagination = {
    :first=>base.merge(:number=>1),
    :self=>base.merge(:number=>collection.current_page),
    :last=>base.merge(:number=>collection.page_count)
  }
  pagination[:next] = base.merge(:number=>collection.next_page) if collection.next_page
  pagination[:prev] = base.merge(:number=>collection.prev_page) if collection.prev_page

  return collection, pagination
end