class FlattenRecord::Meta::AssociatedAttr
Public Class Methods
new(parent, association, association_klass, model)
click to toggle source
Calls superclass method
# File lib/flatten_record/meta/associated_attr.rb, line 4 def initialize(parent, association, association_klass, model) super(parent, association_klass, model) @association = Struct. new(:foreign_key, :name, :options). new(association.foreign_key, association.name, association.options) end
Public Instance Methods
denormalize(instance, to_record)
click to toggle source
# File lib/flatten_record/meta/associated_attr.rb, line 11 def denormalize(instance, to_record) normal_s = instance.send(@association.name) return nullify(to_record) if normal_s.blank? if normal_s.respond_to?(:find_each) to_record = multiply_and_denormalize(normal_s, to_record) else to_record = denormalize_children(normal_s, to_record) to_record = [to_record] end to_record.flatten end
foreign_key()
click to toggle source
# File lib/flatten_record/meta/associated_attr.rb, line 24 def foreign_key @association.foreign_key end
nullify(to_record)
click to toggle source
# File lib/flatten_record/meta/associated_attr.rb, line 28 def nullify(to_record) children.each do |child| child.nullify(to_record) end to_record end
Protected Instance Methods
options()
click to toggle source
# File lib/flatten_record/meta/associated_attr.rb, line 36 def options @association.options end
Private Instance Methods
duplicate(to_record)
click to toggle source
# File lib/flatten_record/meta/associated_attr.rb, line 55 def duplicate(to_record) if to_record.respond_to?(:each) to_record.map{|r| duplicate(r)} else to_record.dup end end
multiply_and_denormalize(records, to_record)
click to toggle source
# File lib/flatten_record/meta/associated_attr.rb, line 41 def multiply_and_denormalize(records, to_record) new_records = [] index = 0 records.find_each do |record| new_records.push ( index == 0 ? denormalize_children(record, to_record) : denormalize_children(record, duplicate(to_record)) ) index += 1 end new_records end