class MR::Factory::RecordStack::AssociationData

Attributes

association[R]
preset_record_data[R]

Public Class Methods

new(association) click to toggle source
# File lib/mr/factory/record_stack.rb, line 137
def initialize(association)
  @association = association

  preset_record = association.owner.send("#{self.name}")
  @preset_record_data = RecordData.new(preset_record) if preset_record
end

Public Instance Methods

<=>(other) click to toggle source
Calls superclass method
# File lib/mr/factory/record_stack.rb, line 172
def <=>(other)
  if other.kind_of?(self.class)
    self.name.to_s <=> other.name.to_s
  else
    super
  end
end
get_record_data(factory_config, lookup) click to toggle source
# File lib/mr/factory/record_stack.rb, line 162
def get_record_data(factory_config, lookup)
  if self.preset?
    self.preset_record_data
  elsif (lookup_record_data = get_lookup_record_data(factory_config, lookup))
    lookup_record_data
  else
    RecordData.new(build_record(factory_config))
  end
end
name() click to toggle source
# File lib/mr/factory/record_stack.rb, line 144
def name
  self.association.reflection.name
end
preset?() click to toggle source
# File lib/mr/factory/record_stack.rb, line 152
def preset?
  !self.preset_record_data.nil?
end
record_class() click to toggle source
# File lib/mr/factory/record_stack.rb, line 148
def record_class
  self.association.klass
end
required?(factory_config) click to toggle source
# File lib/mr/factory/record_stack.rb, line 156
def required?(factory_config)
  self.preset?                                      ||
  factory_config.force_in_stack_association?(self.name) ||
  columns_required?(self.association)
end

Private Instance Methods

build_record(factory_config) click to toggle source
# File lib/mr/factory/record_stack.rb, line 199
def build_record(factory_config)
  factory_config.build_associated_record(self.name, self.record_class)
rescue NoRecordClassError
  raise NoRecordClassError.for_association(self.association)
end
column_required?(record, column_name) click to toggle source
# File lib/mr/factory/record_stack.rb, line 210
def column_required?(record, column_name)
  column = record.column_for_attribute(column_name)
  !(column.nil? || column.null)
end
columns_required?(association) click to toggle source
# File lib/mr/factory/record_stack.rb, line 205
def columns_required?(association)
  column_required?(association.owner, association.reflection.foreign_key)  ||
  column_required?(association.owner, association.reflection.foreign_type)
end
get_lookup_record_data(factory_config, lookup) click to toggle source

get the intersection of the record classes and use a random match to get a record data from the lookup; if their are no matching record classes the intersection returns an empty array which will return a `nil` value from the lookup

# File lib/mr/factory/record_stack.rb, line 186
def get_lookup_record_data(factory_config, lookup)
  record_classes = lookup_record_classes(factory_config) & lookup.keys
  lookup[record_classes.sample]
end
lookup_record_classes(factory_config) click to toggle source
# File lib/mr/factory/record_stack.rb, line 191
def lookup_record_classes(factory_config)
  if self.record_class
    [self.record_class]
  else
    factory_config.record_classes_for(self.name)
  end
end