Class: OccamsRecord::EagerLoaders::Base

Inherits:
Object
  • Object
show all
Defined in:
lib/occams-record/eager_loaders/base.rb

Overview

Base class for eagoer loading an association. IMPORTANT eager loaders MUST remain stateless after initialization!

Direct Known Subclasses

BelongsTo, Habtm, HasOne

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(ref, scope = nil, use: nil, as: nil) { ... } ⇒ Base

ActiveRecord::Relation on which you may call all the normal query hethods (select, where, etc) as well as any scopes you’ve defined on the model.

Parameters:

  • ref (ActiveRecord::Association)

    the ActiveRecord association

  • scope (Proc) (defaults to: nil)

    a scope to apply to the query (optional). It will be passed an

  • use (Array(Module)) (defaults to: nil)

    optional Module to include in the result class (single or array)

  • as (Symbol) (defaults to: nil)

    Load the association usign a different attribute name

Yields:

  • perform eager loading on this association (optional)



18
19
20
21
22
# File 'lib/occams-record/eager_loaders/base.rb', line 18

def initialize(ref, scope = nil, use: nil, as: nil, &eval_block)
  @ref, @scope, @use, @as, @eval_block = ref, scope, use, as, eval_block
  @model = ref.klass
  @name = (as || ref.name).to_s
end

Instance Attribute Details

#nameString (readonly)

Returns association name.

Returns:

  • (String)

    association name



8
9
10
# File 'lib/occams-record/eager_loaders/base.rb', line 8

def name
  @name
end

Instance Method Details

#run(rows, query_logger: nil) ⇒ Object

Run the query and merge the results into the given rows.

Parameters:

  • rows (Array<OccamsRecord::Results::Row>)

    Array of rows used to calculate the query.

  • query_logger (Array<String>) (defaults to: nil)


30
31
32
33
34
35
# File 'lib/occams-record/eager_loaders/base.rb', line 30

def run(rows, query_logger: nil)
  query(rows) { |*args|
    assoc_rows = args[0] ? Query.new(args[0], use: @use, query_logger: query_logger, &@eval_block).run : []
    merge! assoc_rows, rows, *args[1..-1]
  }
end