Module: ActiveHouse::Querying::Page

Extended by:
ActiveSupport::Concern
Included in:
ActiveHouse::QueryBuilder
Defined in:
lib/active_house/querying/page.rb

Instance Method Summary collapse

Instance Method Details

#initial_valuesObject



6
7
8
# File 'lib/active_house/querying/page.rb', line 6

def initial_values
  super.merge page_number: nil
end

#page(page_number) ⇒ Object



10
11
12
# File 'lib/active_house/querying/page.rb', line 10

def page(page_number)
  dup.page!(page_number)
end

#page!(page_number) ⇒ Object

Raises:

  • (ArgumentError)


14
15
16
17
18
19
20
# File 'lib/active_house/querying/page.rb', line 14

def page!(page_number)
  page_number ||= 1
  raise ArgumentError, 'page_number must be >= 1' if page_number < 1

  values[:page_number] = page_number
  self
end

#per(page_size) ⇒ Object

Raises:

  • (ArgumentError)


22
23
24
25
26
27
28
29
30
31
# File 'lib/active_house/querying/page.rb', line 22

def per(page_size)
  page_number = values[:page_number] || 1
  raise ArgumentError, 'page_number must be >= 1' if page_number < 1
  raise ArgumentError, 'page_size must be >= 0' if page_size < 0

  offset = (page_number - 1) * page_size
  records = limit(page_size, offset).to_a
  total_count = count
  Kaminari.paginate_array(records, total_count: total_count).page(page_number).per(page_size)
end