diff options
author | Aaron Patterson <aaron.patterson@gmail.com> | 2013-05-08 17:11:12 -0700 |
---|---|---|
committer | Aaron Patterson <aaron.patterson@gmail.com> | 2013-05-10 10:13:21 -0700 |
commit | 2b1500d69597ecd0ff914dea1fbc265669abdbee (patch) | |
tree | 9e8bdb3c643477bed9b28ac98dfd8f4b94a8c54f /activesupport | |
parent | 6189e2714b730d4ae0da11884b8082cbee0fb44c (diff) | |
download | rails-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.rb | 20 |
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 |