Skip to content

Commit

Permalink
Fix observers that use after_find. [#375 state:resolved]
Browse files Browse the repository at this point in the history
Signed-off-by: Pratik Naik <pratiknaik@gmail.com>
  • Loading branch information
oggy authored and lifo committed Jun 17, 2008
1 parent 1b4b8fb commit bc4a2f1
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 1 deletion.
2 changes: 1 addition & 1 deletion activerecord/lib/active_record/observer.rb
Expand Up @@ -189,7 +189,7 @@ def observed_subclasses

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
17 changes: 17 additions & 0 deletions activerecord/test/cases/lifecycle_test.rb
Expand Up @@ -2,6 +2,7 @@
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
Expand Down Expand Up @@ -44,6 +45,14 @@ def after_find(topic)
end
end

class MinimalisticObserver < ActiveRecord::Observer
attr_reader :minimalistic

def after_find(minimalistic)
@minimalistic = minimalistic
end
end

class MultiObserver < ActiveRecord::Observer
attr_reader :record

Expand Down Expand Up @@ -134,6 +143,14 @@ def test_observing_subclasses
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
Expand Down

0 comments on commit bc4a2f1

Please sign in to comment.