Class: Huginn::Datatable::Paginator
- Inherits:
-
Object
- Object
- Huginn::Datatable::Paginator
- Defined in:
- lib/huginn/datatable/paginator.rb
Overview
Splits datatable execution into two phases:
1. build the filtered/ordered relation
2. count lean, paginate with Pagy, then preload associations only
on the small paginated subset.
The base relation never carries joins (association filters, ranges, orders and the search are all resolved through primary-key subqueries), so the count stays a plain COUNT(*) over the stripped relation.
Instance Attribute Summary collapse
-
#includes ⇒ Object
readonly
Returns the value of attribute includes.
-
#params ⇒ Object
readonly
Returns the value of attribute params.
-
#relation ⇒ Object
readonly
Returns the value of attribute relation.
Class Method Summary collapse
Instance Method Summary collapse
- #call ⇒ Object
-
#initialize(relation, params, includes: []) ⇒ Paginator
constructor
A new instance of Paginator.
Constructor Details
#initialize(relation, params, includes: []) ⇒ Paginator
Returns a new instance of Paginator.
23 24 25 26 27 |
# File 'lib/huginn/datatable/paginator.rb', line 23 def initialize(relation, params, includes: []) @relation = relation @params = params @includes = Array(includes).compact end |
Instance Attribute Details
#includes ⇒ Object (readonly)
Returns the value of attribute includes.
17 18 19 |
# File 'lib/huginn/datatable/paginator.rb', line 17 def includes @includes end |
#params ⇒ Object (readonly)
Returns the value of attribute params.
17 18 19 |
# File 'lib/huginn/datatable/paginator.rb', line 17 def params @params end |
#relation ⇒ Object (readonly)
Returns the value of attribute relation.
17 18 19 |
# File 'lib/huginn/datatable/paginator.rb', line 17 def relation @relation end |
Class Method Details
.call(relation, params, includes: []) ⇒ Object
19 20 21 |
# File 'lib/huginn/datatable/paginator.rb', line 19 def self.call(relation, params, includes: []) new(relation, params, includes: includes).call end |
Instance Method Details
#call ⇒ Object
29 30 31 32 33 34 35 |
# File 'lib/huginn/datatable/paginator.rb', line 29 def call pagy = build_pagy data = relation.offset(pagy.offset).limit(limit_for(pagy)) data = data.preload(*includes) if includes.any? { total_count: pagy.count, data: data } end |