aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib/active_record/associations/builder/collection_association.rb
diff options
context:
space:
mode:
authorAaron Patterson <aaron.patterson@gmail.com>2013-07-31 18:19:36 -0700
committerAaron Patterson <aaron.patterson@gmail.com>2013-07-31 18:19:36 -0700
commitf25251b5734a2a0934d60dd99c93dfd3d42f2c6c (patch)
treefd95adaf579b94fdf104097f10f7e07e390e929a /activerecord/lib/active_record/associations/builder/collection_association.rb
parentafa510ed690119cc61e0681d494053de740c79c8 (diff)
downloadrails-f25251b5734a2a0934d60dd99c93dfd3d42f2c6c.tar.gz
rails-f25251b5734a2a0934d60dd99c93dfd3d42f2c6c.tar.bz2
rails-f25251b5734a2a0934d60dd99c93dfd3d42f2c6c.zip
do is_a? tests on assignment so runtime is faster
Diffstat (limited to 'activerecord/lib/active_record/associations/builder/collection_association.rb')
-rw-r--r--activerecord/lib/active_record/associations/builder/collection_association.rb12
1 files changed, 11 insertions, 1 deletions
diff --git a/activerecord/lib/active_record/associations/builder/collection_association.rb b/activerecord/lib/active_record/associations/builder/collection_association.rb
index 2311754012..708eceaa32 100644
--- a/activerecord/lib/active_record/associations/builder/collection_association.rb
+++ b/activerecord/lib/active_record/associations/builder/collection_association.rb
@@ -56,7 +56,17 @@ module ActiveRecord::Associations::Builder
# TODO : why do i need method_defined? I think its because of the inheritance chain
model.class_attribute full_callback_name unless model.method_defined?(full_callback_name)
- model.send("#{full_callback_name}=", Array(options[callback_name.to_sym]))
+ callbacks = Array(options[callback_name.to_sym]).map do |callback|
+ case callback
+ when Symbol
+ ->(method, owner, record) { owner.send(callback, record) }
+ when Proc
+ ->(method, owner, record) { callback.call(owner, record) }
+ else
+ ->(method,owner,record) { callback.send(method, owner, record) }
+ end
+ end
+ model.send "#{full_callback_name}=", callbacks
end
# Defines the setter and getter methods for the collection_singular_ids.