aboutsummaryrefslogtreecommitdiffstats
path: root/activesupport/lib/active_support
diff options
context:
space:
mode:
authorAaron Patterson <aaron.patterson@gmail.com>2013-05-10 15:43:34 -0700
committerAaron Patterson <aaron.patterson@gmail.com>2013-05-10 15:43:34 -0700
commitb97ff316ec6d3fa962dc804d5aeb83aa81b2d847 (patch)
treefc63507e8a079f62404109bb0b7baf4a385e0a78 /activesupport/lib/active_support
parentf0a9f814a3ea7237275b2c89df8b378b08e248f8 (diff)
downloadrails-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.rb22
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|