Module: MR::Factory::WithAssociationsConfig::InstanceMethods
- Defined in:
- lib/mr/factory/config.rb
Instance Method Summary collapse
- #add_association_factory(association_name, factory, options = nil) ⇒ Object
- #ar_association_for(object, name) ⇒ Object
- #association_factories ⇒ Object
- #build_associated_record(association_name, record_class) ⇒ Object
- #default_factories ⇒ Object
- #factories_for(association_name, record_class) ⇒ Object
- #factory_config_for(association_name, record_class) ⇒ Object
- #factory_for(association_name, record_class) ⇒ Object
- #force_in_stack_association?(association_name) ⇒ Boolean
- #force_in_stack_association_names ⇒ Object
- #record_class ⇒ Object
- #record_classes_for(association_name) ⇒ Object
Instance Method Details
#add_association_factory(association_name, factory, options = nil) ⇒ Object
149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 |
# File 'lib/mr/factory/config.rb', line 149 def add_association_factory(association_name, factory, = 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 ||= {} if [: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.[: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) ⇒ Object
175 176 177 |
# File 'lib/mr/factory/config.rb', line 175 def ar_association_for(object, name) raise NotImplementedError end |
#association_factories ⇒ Object
122 123 124 |
# File 'lib/mr/factory/config.rb', line 122 def association_factories @association_factories ||= {} end |
#build_associated_record(association_name, record_class) ⇒ Object
145 146 147 |
# File 'lib/mr/factory/config.rb', line 145 def build_associated_record(association_name, record_class) raise NotImplementedError end |
#default_factories ⇒ Object
112 113 114 115 116 117 118 119 120 |
# 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) ⇒ Object
126 127 128 129 |
# 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) ⇒ Object
135 136 137 |
# 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) ⇒ Object
131 132 133 |
# 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) ⇒ Boolean
108 109 110 |
# 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 ⇒ Object
104 105 106 |
# File 'lib/mr/factory/config.rb', line 104 def force_in_stack_association_names @force_in_stack_association_names ||= [] end |
#record_class ⇒ Object
100 101 102 |
# File 'lib/mr/factory/config.rb', line 100 def record_class self.object_class end |
#record_classes_for(association_name) ⇒ Object
139 140 141 142 143 |
# 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 |