diff options
author | Aaron Patterson <aaron.patterson@gmail.com> | 2013-05-10 15:43:34 -0700 |
---|---|---|
committer | Aaron Patterson <aaron.patterson@gmail.com> | 2013-05-10 15:43:34 -0700 |
commit | b97ff316ec6d3fa962dc804d5aeb83aa81b2d847 (patch) | |
tree | fc63507e8a079f62404109bb0b7baf4a385e0a78 /activesupport/lib/active_support | |
parent | f0a9f814a3ea7237275b2c89df8b378b08e248f8 (diff) | |
download | rails-b97ff316ec6d3fa962dc804d5aeb83aa81b2d847.tar.gz rails-b97ff316ec6d3fa962dc804d5aeb83aa81b2d847.tar.bz2 rails-b97ff316ec6d3fa962dc804d5aeb83aa81b2d847.zip |
do not keep a reference to the chain in the callback objects
Diffstat (limited to 'activesupport/lib/active_support')
-rw-r--r-- | activesupport/lib/active_support/callbacks.rb | 22 |
1 files changed, 10 insertions, 12 deletions
diff --git a/activesupport/lib/active_support/callbacks.rb b/activesupport/lib/active_support/callbacks.rb index 76fc7a76a6..e733257b67 100644 --- a/activesupport/lib/active_support/callbacks.rb +++ b/activesupport/lib/active_support/callbacks.rb @@ -95,13 +95,15 @@ module ActiveSupport class Callback #:nodoc:# def self.build(chain, filter, kind, options) - new chain, filter, kind, options + new chain.name, filter, kind, options, chain.config end - attr_accessor :chain, :kind, :options + attr_accessor :kind, :options, :name + attr_reader :chain_config - def initialize(chain, filter, kind, options) - @chain = chain + def initialize(name, filter, kind, options, chain_config) + @chain_config = chain_config + @name = name @kind = kind @filter = filter @options = options @@ -131,7 +133,7 @@ module ActiveSupport _options[:if].concat Array(new_options.fetch(:unless, [])) _options[:unless].concat Array(new_options.fetch(:if, [])) - self.class.new chain, @filter, @kind, _options + self.class.build chain, @filter, @kind, _options end def normalize_options!(options) @@ -139,10 +141,6 @@ module ActiveSupport options[:unless] = Array(options[:unless]) end - def name - chain.name - end - def matches?(_kind, _filter) @kind == _kind && filter == _filter end @@ -163,7 +161,7 @@ module ActiveSupport case kind when :before - halted_lambda = eval "lambda { |result| #{chain.config[:terminator]} }" + halted_lambda = eval "lambda { |result| #{chain_config[:terminator]} }" lambda { |env| target = env.target value = env.value @@ -179,7 +177,7 @@ module ActiveSupport next_callback.call env } when :after - if chain.config[:skip_after_callbacks_if_terminated] + if chain_config[:skip_after_callbacks_if_terminated] lambda { |env| env = next_callback.call env target = env.target @@ -271,7 +269,7 @@ module ActiveSupport } end else - scopes = Array(chain.config[:scope]) + scopes = Array(chain_config[:scope]) method_to_call = scopes.map{ |s| public_send(s) }.join("_") lambda { |target, _, &blk| |