diff options
author | Aaron Patterson <aaron.patterson@gmail.com> | 2013-08-01 11:25:09 -0700 |
---|---|---|
committer | Aaron Patterson <aaron.patterson@gmail.com> | 2013-08-01 11:43:51 -0700 |
commit | 71aba97d8d0c1b0264646c64aa3dc5661a90424c (patch) | |
tree | 4fb4d20011711e79e833aa9a750bbe21f8c82201 /activerecord/lib/active_record/associations/builder | |
parent | 0a3724d8a1bb30ecf88204156b019d72e948cb7d (diff) | |
download | rails-71aba97d8d0c1b0264646c64aa3dc5661a90424c.tar.gz rails-71aba97d8d0c1b0264646c64aa3dc5661a90424c.tar.bz2 rails-71aba97d8d0c1b0264646c64aa3dc5661a90424c.zip |
push module building to the constructor
Diffstat (limited to 'activerecord/lib/active_record/associations/builder')
-rw-r--r-- | activerecord/lib/active_record/associations/builder/collection_association.rb | 34 |
1 files changed, 20 insertions, 14 deletions
diff --git a/activerecord/lib/active_record/associations/builder/collection_association.rb b/activerecord/lib/active_record/associations/builder/collection_association.rb index 652c167ca1..04e017a92a 100644 --- a/activerecord/lib/active_record/associations/builder/collection_association.rb +++ b/activerecord/lib/active_record/associations/builder/collection_association.rb @@ -14,9 +14,13 @@ module ActiveRecord::Associations::Builder attr_reader :block_extension - def initialize(*args, &extension) + def initialize(*args) super(*args) - @block_extension = extension + @mod = nil + if block_given? + @mod = Module.new(&Proc.new) + @scope = wrap_scope @scope, @mod + end end def build @@ -31,19 +35,9 @@ module ActiveRecord::Associations::Builder end def define_extensions(model) - if block_extension - mod = Module.new(&block_extension) + if @mod extension_module_name = "#{model.name.demodulize}#{name.to_s.camelize}AssociationExtension" - - model.parent.const_set(extension_module_name, mod) - - prev_scope = @scope - - if prev_scope - @scope = proc { |owner| instance_exec(owner, &prev_scope).extending(mod) } - else - @scope = proc { extending(mod) } - end + model.parent.const_set(extension_module_name, @mod) end end @@ -86,5 +80,17 @@ module ActiveRecord::Associations::Builder end CODE end + + private + + def wrap_scope(scope, mod) + prev_scope = scope + + if prev_scope + proc { |owner| instance_exec(owner, &prev_scope).extending(mod) } + else + proc { extending(mod) } + end + end end end |