mirror of
https://github.com/github/rails.git
synced 2026-01-31 01:08:19 -05:00
Fix observers that use after_find. [#375 state:resolved]
Signed-off-by: Pratik Naik <pratiknaik@gmail.com>
This commit is contained in:
committed by
Pratik Naik
parent
1b4b8fbbd9
commit
bc4a2f156b
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user