Skip to content

Commit 0393c7c

Browse files
committed
Merge pull request rails#6071 from marcandre/observer_redef
Fix Observer by acting on singleton class. Fixes rails#3505.
2 parents f975a86 + bad44e4 commit 0393c7c

File tree

2 files changed

+14
-3
lines changed

2 files changed

+14
-3
lines changed

activemodel/lib/active_model/observing.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -195,7 +195,7 @@ class << self
195195
def observe(*models)
196196
models.flatten!
197197
models.collect! { |model| model.respond_to?(:to_sym) ? model.to_s.camelize.constantize : model }
198-
redefine_method(:observed_classes) { models }
198+
singleton_class.redefine_method(:observed_classes) { models }
199199
end
200200

201201
# Returns an array of Classes to observe.

activemodel/test/cases/observing_test.rb

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -95,13 +95,13 @@ def setup
9595
class ObserverTest < ActiveModel::TestCase
9696
def setup
9797
ObservedModel.observers = :foo_observer
98-
FooObserver.instance_eval do
98+
FooObserver.singleton_class.instance_eval do
9999
alias_method :original_observed_classes, :observed_classes
100100
end
101101
end
102102

103103
def teardown
104-
FooObserver.instance_eval do
104+
FooObserver.singleton_class.instance_eval do
105105
undef_method :observed_classes
106106
alias_method :observed_classes, :original_observed_classes
107107
end
@@ -160,4 +160,15 @@ def teardown
160160
end
161161
assert_equal :in_around_save, yielded_value
162162
end
163+
164+
test "observe redefines observed_classes class method" do
165+
class BarObserver < ActiveModel::Observer
166+
observe :foo
167+
end
168+
169+
assert_equal [Foo], BarObserver.observed_classes
170+
171+
BarObserver.observe(ObservedModel)
172+
assert_equal [ObservedModel], BarObserver.observed_classes
173+
end
163174
end

0 commit comments

Comments
 (0)