public
Description: Ruby on Rails
Homepage: http://rubyonrails.org
Clone URL: git://github.com/rails/rails.git
Fix observers that use after_find. [#375 state:resolved]

Signed-off-by: Pratik Naik <pratiknaik@gmail.com>
George Ogata (author)
Sun Jun 08 20:45:57 -0700 2008
lifo (committer)
Tue Jun 17 11:45:18 -0700 2008
commit  bc4a2f156b368334ca7267d15f4dd10864ac492d
tree    e5e94216fdbd306a9b753e5b14167d3cf17f33e4
parent  1b4b8fbbd95d7d674df7f013fd88b9b7f859a6f1
...
189
190
191
192
 
193
194
195
...
189
190
191
 
192
193
194
195
0
@@ -189,7 +189,7 @@ module ActiveRecord
0
 
0
       def add_observer!(klass)
0
         klass.add_observer(self)
0
-        klass.class_eval 'def after_find() end' unless klass.respond_to?(:after_find)
0
+        klass.class_eval 'def after_find() end' unless klass.method_defined?(:after_find)
0
       end
0
   end
0
 end
...
2
3
4
 
5
6
7
...
44
45
46
 
 
 
 
 
 
 
 
47
48
49
...
134
135
136
 
 
 
 
 
 
 
 
137
138
139
...
2
3
4
5
6
7
8
...
45
46
47
48
49
50
51
52
53
54
55
56
57
58
...
143
144
145
146
147
148
149
150
151
152
153
154
155
156
0
@@ -2,6 +2,7 @@ require "cases/helper"
0
 require 'models/topic'
0
 require 'models/developer'
0
 require 'models/reply'
0
+require 'models/minimalistic'
0
 
0
 class Topic; def after_find() end end
0
 class Developer; def after_find() end end
0
@@ -44,6 +45,14 @@ class TopicObserver < ActiveRecord::Observer
0
   end
0
 end
0
 
0
+class MinimalisticObserver < ActiveRecord::Observer
0
+  attr_reader :minimalistic
0
+
0
+  def after_find(minimalistic)
0
+    @minimalistic = minimalistic
0
+  end
0
+end
0
+
0
 class MultiObserver < ActiveRecord::Observer
0
   attr_reader :record
0
 
0
@@ -134,6 +143,14 @@ class LifecycleTest < ActiveRecord::TestCase
0
     assert_equal developer.name, multi_observer.record.name
0
   end
0
 
0
+  def test_observing_after_find_when_not_defined_on_the_model
0
+    observer = MinimalisticObserver.instance
0
+    assert_equal Minimalistic, MinimalisticObserver.observed_class
0
+
0
+    minimalistic = Minimalistic.find(1)
0
+    assert_equal minimalistic, observer.minimalistic
0
+  end
0
+
0
   def test_invalid_observer
0
     assert_raise(ArgumentError) { Topic.observers = Object.new; Topic.instantiate_observers }
0
   end

Comments