<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array"/>
  <modified type="array">
    <modified>
      <diff>@@ -189,6 +189,9 @@ module ActiveRecord
 
       def add_observer!(klass)
         klass.add_observer(self)
+        if respond_to?(:after_find) &amp;&amp; !klass.method_defined?(:after_find)
+          klass.class_eval 'def after_find() end'
+        end
       end
   end
 end</diff>
      <filename>activerecord/lib/active_record/observer.rb</filename>
    </modified>
    <modified>
      <diff>@@ -143,12 +143,12 @@ class LifecycleTest &lt; ActiveRecord::TestCase
     assert_equal developer.name, multi_observer.record.name
   end
 
-  def test_after_find_cannot_be_observed_when_its_not_defined_on_the_model
+  def test_after_find_can_be_observed_when_its_not_defined_on_the_model
     observer = MinimalisticObserver.instance
     assert_equal Minimalistic, MinimalisticObserver.observed_class
 
     minimalistic = Minimalistic.find(1)
-    assert_nil observer.minimalistic
+    assert_equal minimalistic, observer.minimalistic
   end
 
   def test_after_find_can_be_observed_when_its_defined_on_the_model
@@ -159,6 +159,34 @@ class LifecycleTest &lt; ActiveRecord::TestCase
     assert_equal topic, observer.topic
   end
 
+  def test_after_find_is_not_created_if_its_not_used
+    # use a fresh class so an observer can't have defined an
+    # after_find on it
+    model_class = Class.new(ActiveRecord::Base)
+    observer_class = Class.new(ActiveRecord::Observer)
+    observer_class.observe(model_class)
+
+    observer = observer_class.instance
+
+    assert !model_class.method_defined?(:after_find)
+  end
+
+  def test_after_find_is_not_clobbered_if_it_already_exists
+    # use a fresh observer class so we can instantiate it (Observer is
+    # a Singleton)
+    model_class = Class.new(ActiveRecord::Base) do
+      def after_find; end
+    end
+    original_method = model_class.instance_method(:after_find)
+    observer_class = Class.new(ActiveRecord::Observer) do
+      def after_find; end
+    end
+    observer_class.observe(model_class)
+
+    observer = observer_class.instance
+    assert_equal original_method, model_class.instance_method(:after_find)
+  end
+
   def test_invalid_observer
     assert_raise(ArgumentError) { Topic.observers = Object.new; Topic.instantiate_observers }
   end</diff>
      <filename>activerecord/test/cases/lifecycle_test.rb</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>8d61eadcc6e58a28e1c4c41c707f66a5d154d14d</id>
    </parent>
  </parents>
  <author>
    <name>George Ogata</name>
    <email>george.ogata@gmail.com</email>
  </author>
  <url>http://github.com/rails/rails/commit/473d8d04624cb5e699759eb9d41d52f1323122dd</url>
  <id>473d8d04624cb5e699759eb9d41d52f1323122dd</id>
  <committed-date>2008-08-24T09:36:20-07:00</committed-date>
  <authored-date>2008-07-22T13:38:26-07:00</authored-date>
  <message>Make observers define #after_find in the model only if needed.

[#676 state:resolved]
Signed-off-by: Michael Koziarski &lt;michael@koziarski.com&gt;</message>
  <tree>5d87e08b73617062e88d3c79ab7266447a2a31b1</tree>
  <committer>
    <name>Tarmo T&#228;nav</name>
    <email>tarmo@itech.ee</email>
  </committer>
</commit>
