提交 b97ff316 编写于 作者: A Aaron Patterson

do not keep a reference to the chain in the callback objects

上级 f0a9f814
......@@ -95,13 +95,15 @@ module Filters
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 @@ def merge(chain, new_options)
_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 @@ def normalize_options!(options)
options[:unless] = Array(options[:unless])
end
def name
chain.name
end
def matches?(_kind, _filter)
@kind == _kind && filter == _filter
end
......@@ -163,7 +161,7 @@ def apply(next_callback)
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 @@ def apply(next_callback)
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 @@ def make_lambda(filter)
}
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|
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册