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.

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)



22
23
24
25
26
# File 'lib/occams-record/eager_loaders/base.rb', line 22

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

#eval_blockProc (readonly)

Returns optional Proc for eager loading things on this association.

Returns:

  • (Proc)

    optional Proc for eager loading things on this association



12
13
14
# File 'lib/occams-record/eager_loaders/base.rb', line 12

def eval_block
  @eval_block
end

#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

#useArray<Module> (readonly)

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

Returns:

  • (Array<Module>)

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



10
11
12
# File 'lib/occams-record/eager_loaders/base.rb', line 10

def use
  @use
end

Instance Method Details

#merge!(assoc_rows, rows) ⇒ Object

Merges the associated rows into the parent rows.

Parameters:



43
44
45
# File 'lib/occams-record/eager_loaders/base.rb', line 43

def merge!(assoc_rows, rows)
  raise 'Not Implemented'
end

#query(rows) ⇒ Object

Yield one or more ActiveRecord::Relation objects to a given block.

Parameters:



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

def query(rows)
  raise 'Not Implemented'
end