aboutsummaryrefslogtreecommitdiffstats
path: root/activesupport
diff options
context:
space:
mode:
authorAaron Patterson <aaron.patterson@gmail.com>2013-05-08 17:11:12 -0700
committerAaron Patterson <aaron.patterson@gmail.com>2013-05-10 10:13:21 -0700
commit2b1500d69597ecd0ff914dea1fbc265669abdbee (patch)
tree9e8bdb3c643477bed9b28ac98dfd8f4b94a8c54f /activesupport
parent6189e2714b730d4ae0da11884b8082cbee0fb44c (diff)
downloadrails-2b1500d69597ecd0ff914dea1fbc265669abdbee.tar.gz
rails-2b1500d69597ecd0ff914dea1fbc265669abdbee.tar.bz2
rails-2b1500d69597ecd0ff914dea1fbc265669abdbee.zip
wrap all options in lambas
Diffstat (limited to 'activesupport')
-rw-r--r--activesupport/lib/active_support/callbacks.rb20
1 files changed, 13 insertions, 7 deletions
diff --git a/activesupport/lib/active_support/callbacks.rb b/activesupport/lib/active_support/callbacks.rb
index d998747162..0c550cced5 100644
--- a/activesupport/lib/active_support/callbacks.rb
+++ b/activesupport/lib/active_support/callbacks.rb
@@ -345,25 +345,31 @@ module ActiveSupport
when Array
filter.map {|f| _compile_options(f)}
when Symbol
- lambda { |target, value| target.send filter }
+ lambda { |target, value| target.public_send filter }
when String
l = eval "lambda { |value| #{filter} }"
lambda { |target,value| target.instance_exec(value, &l) }
when ::Proc
- method_name = "_callback_#{@kind}_#{next_id}"
- @klass.send(:define_method, method_name, &filter)
-
if filter.arity <= 0
return lambda { |target, _| target.instance_exec(&filter) }
end
if filter.arity == 1
- lambda { |target, _| target.send method_name, target }
+ lambda { |target, _|
+ target.instance_exec(target, &filter)
+ }
else
- lambda { |target, _,&blk| target.send method_name, target, &blk }
+ lambda { |target, _|
+ target.instance_exec target, ::Proc.new, &filter
+ }
end
else
- raise
+ scopes = Array(chain.config[:scope])
+ method_to_call = scopes.map{ |s| public_send(s) }.join("_")
+
+ lambda { |target, _, &blk|
+ filter.public_send method_to_call, target, &blk
+ }
end
end