diff options
author | Myron Marston <myron.marston@gmail.com> | 2011-04-28 07:35:55 +0800 |
---|---|---|
committer | David Heinemeier Hansson <david@loudthinking.com> | 2011-04-28 10:25:07 +0800 |
commit | ad62f1928768bd2676958a4a08512bad342fe469 (patch) | |
tree | 473e3c3f4a84f9f8ac5a629421198fa83b97a606 /activemodel/test/cases | |
parent | 1f8cc446d9a7ab751a2def65309ac4bc71e85cd3 (diff) | |
download | rails-ad62f1928768bd2676958a4a08512bad342fe469.tar.gz rails-ad62f1928768bd2676958a4a08512bad342fe469.tar.bz2 rails-ad62f1928768bd2676958a4a08512bad342fe469.zip |
Handle enabling/disabling observers at different levels of the class hierarchy.
Last call wins.
Diffstat (limited to 'activemodel/test/cases')
-rw-r--r-- | activemodel/test/cases/observer_array_test.rb | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/activemodel/test/cases/observer_array_test.rb b/activemodel/test/cases/observer_array_test.rb index 215ca80bb4..38e4fd59fc 100644 --- a/activemodel/test/cases/observer_array_test.rb +++ b/activemodel/test/cases/observer_array_test.rb @@ -118,5 +118,44 @@ class ObserverArrayTest < ActiveModel::TestCase ORM.observers.disable Widget end end + + test "allows #enable at the superclass level to override #disable at the subclass level when called last" do + Widget.observers.disable :all + ORM.observers.enable :all + + assert_observer_notified Widget, WidgetObserver + assert_observer_notified Budget, BudgetObserver + assert_observer_notified Widget, AuditTrail + assert_observer_notified Budget, AuditTrail + end + + test "allows #disable at the superclass level to override #enable at the subclass level when called last" do + Budget.observers.enable :audit_trail + ORM.observers.disable :audit_trail + + assert_observer_notified Widget, WidgetObserver + assert_observer_notified Budget, BudgetObserver + assert_observer_not_notified Widget, AuditTrail + assert_observer_not_notified Budget, AuditTrail + end + + test "can use the block form at different levels of the hierarchy" do + yielded = false + Widget.observers.disable :all + + ORM.observers.enable :all do + yielded = true + assert_observer_notified Widget, WidgetObserver + assert_observer_notified Budget, BudgetObserver + assert_observer_notified Widget, AuditTrail + assert_observer_notified Budget, AuditTrail + end + + assert yielded + assert_observer_not_notified Widget, WidgetObserver + assert_observer_notified Budget, BudgetObserver + assert_observer_not_notified Widget, AuditTrail + assert_observer_notified Budget, AuditTrail + end end |