class PireLoader::Loaders::Singular

Attributes

association[R]

Public Class Methods

new(association) click to toggle source
# File lib/pire_loader/loaders/singular.rb, line 12
def initialize(association)
  @association = association
end
preload(association) click to toggle source
# File lib/pire_loader/loaders/singular.rb, line 8
def self.preload(association)
  new(association).preload
end

Public Instance Methods

preload() click to toggle source
# File lib/pire_loader/loaders/singular.rb, line 16
def preload
  owner_records.each do |record|
    join_value = record[join_foreign_key]

    record.association(reflection.name).target = associated_records[join_value]
  end
end

Private Instance Methods

associated_records() click to toggle source
# File lib/pire_loader/loaders/singular.rb, line 31
def associated_records
  @associated_records ||= association.scope
                                     .except(:limit)
                                     .rewhere(foreign_key => join_values)
                                     .to_a
                                     .index_by(&foreign_key.to_sym)
end
join_values() click to toggle source
# File lib/pire_loader/loaders/singular.rb, line 43
def join_values
  owner_records.map { |record| record[join_foreign_key] }
end
owner_records() click to toggle source
# File lib/pire_loader/loaders/singular.rb, line 39
def owner_records
  @owner_records ||= association.owner.parent_relation.records
end