diff options
author | Aaron Patterson <aaron.patterson@gmail.com> | 2013-07-23 13:12:25 -0700 |
---|---|---|
committer | Aaron Patterson <aaron.patterson@gmail.com> | 2013-07-23 13:12:25 -0700 |
commit | eb8d48eb3ea27b7a7470eb9668748abd4914386b (patch) | |
tree | 65fc8f3e5ee4045e808bf135dad7e1e1a298f4f1 /activerecord | |
parent | 5f169b2aed2476aabd9edc95577af774b469ef87 (diff) | |
download | rails-eb8d48eb3ea27b7a7470eb9668748abd4914386b.tar.gz rails-eb8d48eb3ea27b7a7470eb9668748abd4914386b.tar.bz2 rails-eb8d48eb3ea27b7a7470eb9668748abd4914386b.zip |
factory methods should not have side effects.
Move model mutation to the methods that are called on the model.
Diffstat (limited to 'activerecord')
-rw-r--r-- | activerecord/lib/active_record/aggregations.rb | 3 | ||||
-rw-r--r-- | activerecord/lib/active_record/associations.rb | 12 | ||||
-rw-r--r-- | activerecord/lib/active_record/reflection.rb | 4 |
3 files changed, 11 insertions, 8 deletions
diff --git a/activerecord/lib/active_record/aggregations.rb b/activerecord/lib/active_record/aggregations.rb index d597fa26cf..d075edc159 100644 --- a/activerecord/lib/active_record/aggregations.rb +++ b/activerecord/lib/active_record/aggregations.rb @@ -223,7 +223,8 @@ module ActiveRecord reader_method(name, class_name, mapping, allow_nil, constructor) writer_method(name, class_name, mapping, allow_nil, converter) - ActiveRecord::Reflection.create(:composed_of, part_id, nil, options, self) + reflection = ActiveRecord::Reflection.create(:composed_of, part_id, nil, options, self) + Reflection.add_reflection self, part_id, reflection end private diff --git a/activerecord/lib/active_record/associations.rb b/activerecord/lib/active_record/associations.rb index 6fd4f3042c..5ceda933f2 100644 --- a/activerecord/lib/active_record/associations.rb +++ b/activerecord/lib/active_record/associations.rb @@ -1205,7 +1205,8 @@ module ActiveRecord # has_many :reports, -> { readonly } # has_many :subscribers, through: :subscriptions, source: :user def has_many(name, scope = nil, options = {}, &extension) - Builder::HasMany.build(self, name, scope, options, &extension) + reflection = Builder::HasMany.build(self, name, scope, options, &extension) + Reflection.add_reflection self, name, reflection end # Specifies a one-to-one association with another class. This method should only be used @@ -1308,7 +1309,8 @@ module ActiveRecord # has_one :club, through: :membership # has_one :primary_address, -> { where primary: true }, through: :addressables, source: :addressable def has_one(name, scope = nil, options = {}) - Builder::HasOne.build(self, name, scope, options) + reflection = Builder::HasOne.build(self, name, scope, options) + Reflection.add_reflection self, name, reflection end # Specifies a one-to-one association with another class. This method should only be used @@ -1420,7 +1422,8 @@ module ActiveRecord # belongs_to :company, touch: true # belongs_to :company, touch: :employees_last_updated_at def belongs_to(name, scope = nil, options = {}) - Builder::BelongsTo.build(self, name, scope, options) + reflection = Builder::BelongsTo.build(self, name, scope, options) + Reflection.add_reflection self, name, reflection end # Specifies a many-to-many relationship with another class. This associates two classes via an @@ -1557,7 +1560,8 @@ module ActiveRecord # has_and_belongs_to_many :categories, join_table: "prods_cats" # has_and_belongs_to_many :categories, -> { readonly } def has_and_belongs_to_many(name, scope = nil, options = {}, &extension) - Builder::HasAndBelongsToMany.build(self, name, scope, options, &extension) + reflection = Builder::HasAndBelongsToMany.build(self, name, scope, options, &extension) + Reflection.add_reflection self, name, reflection end end end diff --git a/activerecord/lib/active_record/reflection.rb b/activerecord/lib/active_record/reflection.rb index de2204da29..55c58319b2 100644 --- a/activerecord/lib/active_record/reflection.rb +++ b/activerecord/lib/active_record/reflection.rb @@ -20,9 +20,7 @@ module ActiveRecord klass = AggregateReflection end - reflection = klass.new(macro, name, scope, options, ar) - add_reflection ar, name, reflection - reflection + klass.new(macro, name, scope, options, ar) end def self.add_reflection(ar, name, reflection) |