module MR::Factory::WithAssociationsConfig::InstanceMethods

Public Instance Methods

add_association_factory(association_name, factory, options = nil) click to toggle source
# File lib/mr/factory/config.rb, line 149
def add_association_factory(association_name, factory, options = nil)
  reflection = self.record_class.reflect_on_association(association_name)
  if reflection.nil?
    raise NoAssociationError, "there is no #{association_name.inspect} " \
                              "association for #{self.record_class.inspect}"
  end

  options ||= {}
  if options[:force_in_stack]
    (self.force_in_stack_association_names << association_name).uniq!
  end

  add_default_factory(factory.record_class, factory)

  # for polymorphic associations add a lookup with no associated record
  # class, this will allow a polymorphic association without their foreign
  # type attribute set to use the configured factories for the association
  if reflection.options[:polymorphic]
    key = AssociationFactoriesKey.new(association_name)
    add_association_factory_by_key(key, factory)
  end

  key = AssociationFactoriesKey.new(association_name, factory.record_class)
  add_association_factory_by_key(key, factory)
end
ar_association_for(object, name) click to toggle source
# File lib/mr/factory/config.rb, line 175
def ar_association_for(object, name)
  raise NotImplementedError
end
association_factories() click to toggle source
# File lib/mr/factory/config.rb, line 122
def association_factories
  @association_factories ||= {}
end
build_associated_record(association_name, record_class) click to toggle source
# File lib/mr/factory/config.rb, line 145
def build_associated_record(association_name, record_class)
  raise NotImplementedError
end
default_factories() click to toggle source
# File lib/mr/factory/config.rb, line 112
def default_factories
  @default_factories ||= Hash.new do |h, record_class|
    # raise a no record class error if passed a `nil` record class, this
    # can happen when a polymorphic association is passed to `factory_for`
    # and its foreign type attribute isn't set
    raise NoRecordClassError if record_class.nil?
    h[record_class] = build_factory_for_record_class(record_class)
  end
end
factories_for(association_name, record_class) click to toggle source
# File lib/mr/factory/config.rb, line 126
def factories_for(association_name, record_class)
  key = AssociationFactoriesKey.new(association_name, record_class)
  self.association_factories[key] || [self.default_factories[record_class]]
end
factory_config_for(association_name, record_class) click to toggle source
# File lib/mr/factory/config.rb, line 135
def factory_config_for(association_name, record_class)
  self.factory_for(association_name, record_class).config
end
factory_for(association_name, record_class) click to toggle source
# File lib/mr/factory/config.rb, line 131
def factory_for(association_name, record_class)
  self.factories_for(association_name, record_class).sample
end
force_in_stack_association?(association_name) click to toggle source
# File lib/mr/factory/config.rb, line 108
def force_in_stack_association?(association_name)
  self.force_in_stack_association_names.include?(association_name)
end
force_in_stack_association_names() click to toggle source
# File lib/mr/factory/config.rb, line 104
def force_in_stack_association_names
  @force_in_stack_association_names ||= []
end
record_class() click to toggle source
# File lib/mr/factory/config.rb, line 100
def record_class
  self.object_class
end
record_classes_for(association_name) click to toggle source
# File lib/mr/factory/config.rb, line 139
def record_classes_for(association_name)
  self.factories_for(association_name, nil).map(&:record_class)
rescue NoRecordClassError
  []
end

Private Instance Methods

add_association_factory_by_key(key, factory) click to toggle source
# File lib/mr/factory/config.rb, line 187
def add_association_factory_by_key(key, factory)
  self.association_factories[key] = [] if !self.association_factories.key?(key)
  self.association_factories[key] << factory
end
add_default_factory(record_class, factory) click to toggle source
# File lib/mr/factory/config.rb, line 192
def add_default_factory(record_class, factory)
  if !self.default_factories.key?(record_class)
    self.default_factories[record_class] = factory
  end
end
build_factory_for_record_class(record_class) click to toggle source
# File lib/mr/factory/config.rb, line 183
def build_factory_for_record_class(record_class)
  raise NotImplementedError
end
object_builder_class() click to toggle source
# File lib/mr/factory/config.rb, line 181
def object_builder_class; WithAssociationsConfig::ObjectBuilder; end