mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
do not keep a reference to the chain in the callback objects
This commit is contained in:
parent
f0a9f814a3
commit
b97ff316ec
1 changed files with 10 additions and 12 deletions
|
@ -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|
|
||||
|
|
Loading…
Reference in a new issue