Class: ROM::SQL::Plugin::Pagination::Pager

Inherits:
Object
  • Object
show all
Extended by:
Initializer
Defined in:
lib/rom/sql/plugin/pagination.rb

Overview

Pager object provides the underlying pagination API for relations

Instance Attribute Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#current_pageInteger (readonly)

Returns Current page number.

Returns:

  • (Integer)

    Current page number



27
# File 'lib/rom/sql/plugin/pagination.rb', line 27

option :current_page, default: -> { 1 }

#datasetSequel::Dataset (readonly)

Returns Relation's dataset.

Returns:

  • (Sequel::Dataset)

    Relation's dataset



23
# File 'lib/rom/sql/plugin/pagination.rb', line 23

param :dataset

#per_pageInteger (readonly) Also known as: limit_value

Returns Current per-page number.

Returns:

  • (Integer)

    Current per-page number



31
# File 'lib/rom/sql/plugin/pagination.rb', line 31

option :per_page

Instance Method Details

#at(dataset, current_page, per_page = self.per_page) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



100
101
102
103
104
105
106
107
108
# File 'lib/rom/sql/plugin/pagination.rb', line 100

def at(dataset, current_page, per_page = self.per_page)
  current_page = current_page.to_i
  per_page = per_page.to_i

  self.class.new(
    dataset.offset((current_page - 1) * per_page).limit(per_page),
    current_page: current_page, per_page: per_page
  )
end

#first_in_pageInteger

Return one-based index of first tuple in page

Returns:

  • (Integer)


84
85
86
# File 'lib/rom/sql/plugin/pagination.rb', line 84

def first_in_page
  ((current_page - 1) * per_page) + 1
end

#last_in_pageInteger

Return one-based index of last tuple in page

Returns:

  • (Integer)


93
94
95
96
97
# File 'lib/rom/sql/plugin/pagination.rb', line 93

def last_in_page
  return total if current_page == total_pages

  current_page * per_page
end

#next_pageInteger

Return next page number

Examples:

users.page(2).pager.next_page
# => 3

Returns:

  • (Integer)


42
43
44
45
# File 'lib/rom/sql/plugin/pagination.rb', line 42

def next_page
  num = current_page + 1
  num if total_pages >= num
end

#prev_pageInteger

Return previous page number

Examples:

users.page(2).pager.prev_page
# => 1

Returns:

  • (Integer)


56
57
58
59
# File 'lib/rom/sql/plugin/pagination.rb', line 56

def prev_page
  num = current_page - 1
  num if num.positive?
end

#totalInteger

Return total number of tuples

Returns:

  • (Integer)


66
67
68
# File 'lib/rom/sql/plugin/pagination.rb', line 66

def total
  dataset.unlimited.count
end

#total_pagesInteger

Return total number of pages

Returns:

  • (Integer)


75
76
77
# File 'lib/rom/sql/plugin/pagination.rb', line 75

def total_pages
  (total / per_page.to_f).ceil
end