Class: OccamsRecord::Batches::OffsetLimit::Scoped
- Inherits:
-
Object
- Object
- OccamsRecord::Batches::OffsetLimit::Scoped
- Defined in:
- lib/occams-record/batches/offset_limit/scoped.rb
Overview
Implements batched loading for ActiveRecord model scopes.
Instance Method Summary collapse
-
#enum(batch_size:, use_transaction: true, append_order_by: nil) ⇒ Enumerator
Returns an Enumerator that yields batches of records, of size “of”.
-
#initialize(model, scope, use: nil, query_logger: nil, eager_loaders: nil) ⇒ Scoped
constructor
A new instance of Scoped.
Constructor Details
#initialize(model, scope, use: nil, query_logger: nil, eager_loaders: nil) ⇒ Scoped
Returns a new instance of Scoped.
8 9 10 11 |
# File 'lib/occams-record/batches/offset_limit/scoped.rb', line 8 def initialize(model, scope, use: nil, query_logger: nil, eager_loaders: nil) @model, @scope = model, scope @use, @query_logger, @eager_loaders = use, query_logger, eager_loaders end |
Instance Method Details
#enum(batch_size:, use_transaction: true, append_order_by: nil) ⇒ Enumerator
Returns an Enumerator that yields batches of records, of size “of”. NOTE ActiveRecord 5+ provides the ‘in_batches’ method to do something similiar, but unlike this it doesn’t respect ORDER BY.
23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
# File 'lib/occams-record/batches/offset_limit/scoped.rb', line 23 def enum(batch_size:, use_transaction: true, append_order_by: nil) append_order = case append_order_by when false then nil when nil then @model.primary_key else append_order_by end Enumerator.new do |y| if use_transaction and @model.connection.open_transactions == 0 @model.connection.transaction { run_batches y, batch_size, append_order } else run_batches y, batch_size, append_order end end end |