lib/active_support/callbacks.rb in activesupport-4.2.3 vs lib/active_support/callbacks.rb in activesupport-4.2.4.rc1

- old
+ new

@@ -76,23 +76,25 @@ # # run_callbacks :save do # save # end def run_callbacks(kind, &block) - callbacks = send("_#{kind}_callbacks") + send "_run_#{kind}_callbacks", &block + end + private + + def __run_callbacks__(callbacks, &block) if callbacks.empty? yield if block_given? else runner = callbacks.compile e = Filters::Environment.new(self, false, nil, block) runner.call(e).value end end - private - # A hook invoked every time a before callback is halted. # This can be overridden in AS::Callback implementors in order # to provide better debugging/logging. def halted_callback_hook(filter) end @@ -768,9 +770,15 @@ options = names.extract_options! names.each do |name| class_attribute "_#{name}_callbacks" set_callbacks name, CallbackChain.new(name, options) + + module_eval <<-RUBY, __FILE__, __LINE__ + 1 + def _run_#{name}_callbacks(&block) + __run_callbacks__(_#{name}_callbacks, &block) + end + RUBY end end protected