Merge pull request #4218 from bogdan/reset_runner_callbacks
Refactor AS::Callbacks
This commit is contained in:
commit
5e6fc81d63
@ -378,9 +378,6 @@ def compile(key=nil, object=nil)
|
||||
module ClassMethods
|
||||
# Generate the internal runner method called by +run_callbacks+.
|
||||
def __define_runner(symbol) #:nodoc:
|
||||
name = __callback_runner_name(nil, symbol)
|
||||
undef_method(name) if method_defined?(name)
|
||||
|
||||
runner_method = "_run_#{symbol}_callbacks"
|
||||
unless private_method_defined?(runner_method)
|
||||
class_eval <<-RUBY_EVAL, __FILE__, __LINE__ + 1
|
||||
@ -408,6 +405,11 @@ def #{name}() #{str} end
|
||||
object.send(name, &blk)
|
||||
end
|
||||
|
||||
def __reset_runner(symbol)
|
||||
name = __callback_runner_name(nil, symbol)
|
||||
undef_method(name) if method_defined?(name)
|
||||
end
|
||||
|
||||
def __callback_runner_name(key, kind)
|
||||
"_run__#{self.name.hash.abs}__#{kind}__#{key.hash.abs}__callbacks"
|
||||
end
|
||||
@ -423,7 +425,7 @@ def __update_callbacks(name, filters = [], block = nil) #:nodoc:
|
||||
([self] + ActiveSupport::DescendantsTracker.descendants(self)).reverse.each do |target|
|
||||
chain = target.send("_#{name}_callbacks")
|
||||
yield target, chain.dup, type, filters, options
|
||||
target.__define_runner(name)
|
||||
target.__reset_runner(name)
|
||||
end
|
||||
end
|
||||
|
||||
@ -537,12 +539,12 @@ def reset_callbacks(symbol)
|
||||
chain = target.send("_#{symbol}_callbacks").dup
|
||||
callbacks.each { |c| chain.delete(c) }
|
||||
target.send("_#{symbol}_callbacks=", chain)
|
||||
target.__define_runner(symbol)
|
||||
target.__reset_runner(symbol)
|
||||
end
|
||||
|
||||
self.send("_#{symbol}_callbacks=", callbacks.dup.clear)
|
||||
|
||||
__define_runner(symbol)
|
||||
__reset_runner(symbol)
|
||||
end
|
||||
|
||||
# Define sets of events in the object lifecycle that support callbacks.
|
||||
|
Loading…
Reference in New Issue
Block a user