diff options
author | Rafael Mendonça França <rafaelmfranca@gmail.com> | 2013-10-09 00:48:56 -0300 |
---|---|---|
committer | Rafael Mendonça França <rafaelmfranca@gmail.com> | 2013-10-09 00:48:56 -0300 |
commit | 0ee7331c35994e543df396548c5b455c00c96cb7 (patch) | |
tree | 69106bb7c92fe315ee09a95cc884049c749edb57 | |
parent | 941516dabcc5fd02eb736f457197bd115c85f2fb (diff) | |
download | rails-0ee7331c35994e543df396548c5b455c00c96cb7.tar.gz rails-0ee7331c35994e543df396548c5b455c00c96cb7.tar.bz2 rails-0ee7331c35994e543df396548c5b455c00c96cb7.zip |
Define the association extensions without need to have a builder
instance
3 files changed, 15 insertions, 16 deletions
diff --git a/activerecord/lib/active_record/associations/builder/association.rb b/activerecord/lib/active_record/associations/builder/association.rb index fe8274e1d8..3f63326b16 100644 --- a/activerecord/lib/active_record/associations/builder/association.rb +++ b/activerecord/lib/active_record/associations/builder/association.rb @@ -21,15 +21,15 @@ module ActiveRecord::Associations::Builder attr_reader :name, :scope, :options def self.build(model, name, scope, options, &block) - builder = create_builder model, name, scope, options, &block + extension = define_extensions model, name, &block + builder = create_builder model, name, scope, options, extension reflection = builder.build(model) define_accessors model, reflection define_callbacks model, reflection - builder.define_extensions model reflection end - def self.create_builder(model, name, scope, options, &block) + def self.create_builder(model, name, scope, options, extension = nil) raise ArgumentError, "association names must be a Symbol" unless name.kind_of?(Symbol) if scope.is_a?(Hash) @@ -37,10 +37,10 @@ module ActiveRecord::Associations::Builder scope = nil end - new(name, scope, options, &block) + new(name, scope, options, extension) end - def initialize(name, scope, options) + def initialize(name, scope, options, extension) @name = name @scope = scope @options = options @@ -68,7 +68,7 @@ module ActiveRecord::Associations::Builder options.assert_valid_keys(valid_options) end - def define_extensions(model) + def self.define_extensions(model, name) end def self.define_callbacks(model, reflection) diff --git a/activerecord/lib/active_record/associations/builder/collection_association.rb b/activerecord/lib/active_record/associations/builder/collection_association.rb index d68f5d6792..70548bd277 100644 --- a/activerecord/lib/active_record/associations/builder/collection_association.rb +++ b/activerecord/lib/active_record/associations/builder/collection_association.rb @@ -14,12 +14,11 @@ module ActiveRecord::Associations::Builder attr_reader :block_extension - def initialize(name, scope, options) + def initialize(name, scope, options, extension) super - @mod = nil - if block_given? - @mod = Module.new(&Proc.new) - @scope = wrap_scope @scope, @mod + + if extension + @scope = wrap_scope @scope, extension end end @@ -32,10 +31,11 @@ module ActiveRecord::Associations::Builder } end - def define_extensions(model) - if @mod + def self.define_extensions(model, name) + if block_given? extension_module_name = "#{model.name.demodulize}#{name.to_s.camelize}AssociationExtension" - model.parent.const_set(extension_module_name, @mod) + extension = Module.new(&Proc.new) + model.parent.const_set(extension_module_name, extension) end end diff --git a/activerecord/test/cases/associations/extension_test.rb b/activerecord/test/cases/associations/extension_test.rb index 47dff7d0ea..f8f2832ab1 100644 --- a/activerecord/test/cases/associations/extension_test.rb +++ b/activerecord/test/cases/associations/extension_test.rb @@ -75,7 +75,6 @@ class AssociationsExtensionsTest < ActiveRecord::TestCase private def extend!(model) - builder = ActiveRecord::Associations::Builder::HasMany.new(:association_name, nil, {}) { } - builder.define_extensions(model) + ActiveRecord::Associations::Builder::HasMany.define_extensions(model, :association_name) { } end end |