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