mirror of
https://github.com/github/rails.git
synced 2026-04-26 03:00:59 -04:00
Merge pull request #424 from gnufied/master
Fixes around_filter from observer, github issue#329
This commit is contained in:
@@ -110,8 +110,8 @@ module ActiveRecord
|
||||
next unless respond_to?(callback)
|
||||
callback_meth = :"_notify_#{observer_name}_for_#{callback}"
|
||||
unless klass.respond_to?(callback_meth)
|
||||
klass.send(:define_method, callback_meth) do
|
||||
observer.send(callback, self)
|
||||
klass.send(:define_method, callback_meth) do |&block|
|
||||
observer.send(callback, self, &block)
|
||||
end
|
||||
klass.send(callback, callback_meth)
|
||||
end
|
||||
|
||||
@@ -107,6 +107,23 @@ class ValidatedCommentObserver < ActiveRecord::Observer
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
class AroundTopic < Topic
|
||||
end
|
||||
|
||||
class AroundTopicObserver < ActiveRecord::Observer
|
||||
observe :around_topic
|
||||
def topic_ids
|
||||
@topic_ids ||= []
|
||||
end
|
||||
|
||||
def around_save(topic)
|
||||
topic_ids << topic.id
|
||||
yield(topic)
|
||||
topic_ids << topic.id
|
||||
end
|
||||
end
|
||||
|
||||
class LifecycleTest < ActiveRecord::TestCase
|
||||
fixtures :topics, :developers, :minimalistics
|
||||
|
||||
@@ -206,6 +223,14 @@ class LifecycleTest < ActiveRecord::TestCase
|
||||
assert_equal developer, SalaryChecker.instance.last_saved
|
||||
end
|
||||
|
||||
test "around filter from observer should accept block" do
|
||||
observer = AroundTopicObserver.instance
|
||||
topic = AroundTopic.new
|
||||
topic.save
|
||||
assert_nil observer.topic_ids.first
|
||||
assert_not_nil observer.topic_ids.last
|
||||
end
|
||||
|
||||
def test_observer_is_called_once
|
||||
observer = DeveloperObserver.instance # activate
|
||||
observer.calls.clear
|
||||
|
||||
Reference in New Issue
Block a user