class MR::Factory::RecordStack

Attributes

factory_config[R]
record_data[R]
record_lookup[R]
record_stacks[R]

Public Class Methods

for_record(record, factory_config) click to toggle source
# File lib/mr/factory/record_stack.rb, line 9
def self.for_record(record, factory_config)
  self.new(RecordData.new(record), factory_config)
end
new(record_data, factory_config, record_lookup = nil) click to toggle source
# File lib/mr/factory/record_stack.rb, line 16
def initialize(record_data, factory_config, record_lookup = nil)
  @record_data    = record_data
  @factory_config = factory_config
  @record_lookup  = record_lookup || build_lookup(@record_data)

  @record_stacks = @record_data.association_datas.map do |association_data|
    next unless association_data.required?(factory_config)

    associated_record_data = association_data.get_record_data(
      @factory_config,
      @record_lookup
    )
    associated_factory_config = @factory_config.factory_config_for(
      association_data.name,
      associated_record_data.record_class
    )
    @record_lookup[associated_record_data.record_class] ||= associated_record_data
    @record_data.set_association(association_data.name, associated_record_data)
    MR::Factory::RecordStack.new(
      associated_record_data,
      associated_factory_config,
      @record_lookup
    )
  end.compact
end

Public Instance Methods

create() click to toggle source
# File lib/mr/factory/record_stack.rb, line 46
def create
  self.create_dependencies
  self.record_data.create_record
  true
end
create_dependencies() click to toggle source
# File lib/mr/factory/record_stack.rb, line 58
def create_dependencies
  self.record_stacks.each(&:create)
  self.record_data.refresh_record_associations
  true
end
Also aliased as: create_deps
create_deps()
Alias for: create_dependencies
destroy() click to toggle source
# File lib/mr/factory/record_stack.rb, line 52
def destroy
  self.record_data.destroy_record
  self.destroy_dependencies
  true
end
destroy_dependencies() click to toggle source
# File lib/mr/factory/record_stack.rb, line 65
def destroy_dependencies
  self.record_stacks.each(&:destroy)
  true
end
Also aliased as: destroy_deps
destroy_deps()
record() click to toggle source
# File lib/mr/factory/record_stack.rb, line 42
def record
  self.record_data.record
end

Private Instance Methods

build_lookup(record_data) click to toggle source
# File lib/mr/factory/record_stack.rb, line 73
def build_lookup(record_data)
  load_preset_associations_into_lookup({}, record_data)
end
load_preset_associations_into_lookup(lookup, record_data) click to toggle source
# File lib/mr/factory/record_stack.rb, line 77
def load_preset_associations_into_lookup(lookup, record_data)
  record_data.association_datas.select(&:preset?).each do |association_data|
    preset_record_data = association_data.preset_record_data
    lookup[preset_record_data.record_class] ||= preset_record_data
    load_preset_associations_into_lookup(lookup, preset_record_data)
  end
  lookup
end