diff options
author | Bogdan Gusiev <agresso@gmail.com> | 2011-12-28 18:03:18 +0200 |
---|---|---|
committer | Bogdan Gusiev <agresso@gmail.com> | 2011-12-28 18:03:18 +0200 |
commit | 99433e4ce57afbbeebe706ee2cec1a0362e03b0f (patch) | |
tree | 153304e84e9f3dbab6c5fc9377307cc2a8d42226 | |
parent | 16381289c6fc40ac467928a7349a78403d49df47 (diff) | |
download | rails-99433e4ce57afbbeebe706ee2cec1a0362e03b0f.tar.gz rails-99433e4ce57afbbeebe706ee2cec1a0362e03b0f.tar.bz2 rails-99433e4ce57afbbeebe706ee2cec1a0362e03b0f.zip |
Refactor AS::Callbacks
Extracted `__reset_runner` from `__define_runner`
And call it in proper places
-rw-r--r-- | activesupport/lib/active_support/callbacks.rb | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/activesupport/lib/active_support/callbacks.rb b/activesupport/lib/active_support/callbacks.rb index 2ebafa28dd..0495741c15 100644 --- a/activesupport/lib/active_support/callbacks.rb +++ b/activesupport/lib/active_support/callbacks.rb @@ -378,9 +378,6 @@ module ActiveSupport 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 @@ module ActiveSupport 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 @@ module ActiveSupport ([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 @@ module ActiveSupport 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. |