From bc4a2f156b368334ca7267d15f4dd10864ac492d Mon Sep 17 00:00:00 2001 From: George Ogata Date: Mon, 9 Jun 2008 13:45:57 +1000 Subject: Fix observers that use after_find. [#375 state:resolved] Signed-off-by: Pratik Naik --- activerecord/lib/active_record/observer.rb | 2 +- activerecord/test/cases/lifecycle_test.rb | 17 +++++++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) (limited to 'activerecord') diff --git a/activerecord/lib/active_record/observer.rb b/activerecord/lib/active_record/observer.rb index 6e55e36b7d..25e0e61c69 100644 --- a/activerecord/lib/active_record/observer.rb +++ b/activerecord/lib/active_record/observer.rb @@ -189,7 +189,7 @@ module ActiveRecord def add_observer!(klass) klass.add_observer(self) - klass.class_eval 'def after_find() end' unless klass.respond_to?(:after_find) + klass.class_eval 'def after_find() end' unless klass.method_defined?(:after_find) end end end diff --git a/activerecord/test/cases/lifecycle_test.rb b/activerecord/test/cases/lifecycle_test.rb index ddcacacc3a..258f7c7a0f 100755 --- a/activerecord/test/cases/lifecycle_test.rb +++ b/activerecord/test/cases/lifecycle_test.rb @@ -2,6 +2,7 @@ require "cases/helper" require 'models/topic' require 'models/developer' require 'models/reply' +require 'models/minimalistic' class Topic; def after_find() end end class Developer; def after_find() end end @@ -44,6 +45,14 @@ class TopicObserver < ActiveRecord::Observer end end +class MinimalisticObserver < ActiveRecord::Observer + attr_reader :minimalistic + + def after_find(minimalistic) + @minimalistic = minimalistic + end +end + class MultiObserver < ActiveRecord::Observer attr_reader :record @@ -134,6 +143,14 @@ class LifecycleTest < ActiveRecord::TestCase assert_equal developer.name, multi_observer.record.name end + def test_observing_after_find_when_not_defined_on_the_model + observer = MinimalisticObserver.instance + assert_equal Minimalistic, MinimalisticObserver.observed_class + + minimalistic = Minimalistic.find(1) + assert_equal minimalistic, observer.minimalistic + end + def test_invalid_observer assert_raise(ArgumentError) { Topic.observers = Object.new; Topic.instantiate_observers } end -- cgit v1.2.3