From dc826f9977650c105e9bfd308d6d4fc71bb6ec6e Mon Sep 17 00:00:00 2001 From: kennyj Date: Sun, 22 Jan 2012 03:23:40 +0900 Subject: Fix GH #4344. A defined callback in extended module is called too. Conflicts: activesupport/test/callbacks_test.rb --- activesupport/test/callbacks_test.rb | 65 +++++++++++++++++++++++++++++++++--- 1 file changed, 61 insertions(+), 4 deletions(-) (limited to 'activesupport/test/callbacks_test.rb') diff --git a/activesupport/test/callbacks_test.rb b/activesupport/test/callbacks_test.rb index e723121bb4..c88e7550be 100644 --- a/activesupport/test/callbacks_test.rb +++ b/activesupport/test/callbacks_test.rb @@ -298,7 +298,7 @@ module CallbacksTest end end end - + class AroundPersonResult < MySuper attr_reader :result @@ -309,7 +309,7 @@ module CallbacksTest def tweedle_dum @result = yield end - + def tweedle_1 :tweedle_1 end @@ -317,7 +317,7 @@ module CallbacksTest def tweedle_2 :tweedle_2 end - + def save run_callbacks :save do :running @@ -345,6 +345,55 @@ module CallbacksTest end end + + module ExtendModule + def self.extended(base) + base.class_eval do + set_callback :save, :before, :record3 + end + end + def record3 + @recorder << 3 + end + end + + module IncludeModule + def self.included(base) + base.class_eval do + set_callback :save, :before, :record2 + end + end + def record2 + @recorder << 2 + end + end + + class ExtendCallbacks + + include ActiveSupport::Callbacks + + define_callbacks :save + set_callback :save, :before, :record1 + + include IncludeModule + + def save + run_callbacks :save + end + + attr_reader :recorder + + def initialize + @recorder = [] + end + + private + + def record1 + @recorder << 1 + end + end + class AroundCallbacksTest < Test::Unit::TestCase def test_save_around around = AroundPerson.new @@ -363,7 +412,7 @@ module CallbacksTest ], around.history end end - + class AroundCallbackResultTest < Test::Unit::TestCase def test_save_around around = AroundPersonResult.new @@ -646,4 +695,12 @@ module CallbacksTest end end + class ExtendCallbacksTest < Test::Unit::TestCase + def test_save + model = ExtendCallbacks.new.extend ExtendModule + model.save + assert_equal [1, 2, 3], model.recorder + end + end + end -- cgit v1.2.3