Class: RecordPaginator

Inherits:
Object
  • Object
show all
Defined in:
app/services/record_paginator.rb

Overview

Manages creation of links for a subset of paginated ActiveRecord objects. Depends on Kaminari having already been mixed-into ActiveRecord.

Instance Method Summary collapse

Constructor Details

#initialize(params, records) ⇒ RecordPaginator

Returns a new instance of RecordPaginator



5
6
7
8
# File 'app/services/record_paginator.rb', line 5

def initialize(params, records)
  @params = params
  @records = records
end

Instance Method Details

Returns named link parameters suitable for rendering in the UI or API

Parameters:

  • base_link_params (Hash)

Returns:

  • (Hash<Symbol, String>)

    named link parameters suitable for rendering in the UI or API



22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# File 'app/services/record_paginator.rb', line 22

def pagination_links_for(base_link_params)
  base_page_params = { size: pagination_size }
  first_page = base_page_params.merge(number: 1)

  first_page_params = base_link_params.merge(page: first_page)

  links = {
    first: first_page_params
  }

  if query.prev_page
    previous_page_params = base_page_params.merge(number: query.prev_page)
    links[:previous] = base_link_params.merge(page: previous_page_params)
  end

  if query.next_page
    next_page_params = base_page_params.merge(number: query.next_page)
    links[:next] = base_link_params.merge(page: next_page_params)
  end

  links
end

#queryActiveRecord::Relation

Returns the original records query with which we were initialized, with Kaminari pagination applied

Returns:

  • (ActiveRecord::Relation)

    the original records query with which we were initialized, with Kaminari pagination applied



11
12
13
14
15
16
17
18
# File 'app/services/record_paginator.rb', line 11

def query
  @query ||= begin
               records.
                 page(pagination_number).
                 per(pagination_size)
                #  without_count
             end
end