diff options
author | George Claghorn <george.claghorn@gmail.com> | 2015-06-04 00:00:20 -0400 |
---|---|---|
committer | George Claghorn <george.claghorn@gmail.com> | 2015-06-04 00:11:38 -0400 |
commit | ac002395d87aa7a4bcc3126e67ca3b2808d832a6 (patch) | |
tree | 8c42d15fe11ef5d1c8e260810162fa0aff111a08 /activerecord | |
parent | ae5f2b4e79f3e41aad8280109d8bfc788a1a2733 (diff) | |
download | rails-ac002395d87aa7a4bcc3126e67ca3b2808d832a6.tar.gz rails-ac002395d87aa7a4bcc3126e67ca3b2808d832a6.tar.bz2 rails-ac002395d87aa7a4bcc3126e67ca3b2808d832a6.zip |
Apply Active Record suppression to all saves
It was not being applied to creates and updates attempted through the
non-bang save methods. This means that, for example, creation of
records for singular associations through the `create_*` methods was
not appropriately ignored in .suppress blocks.
Diffstat (limited to 'activerecord')
-rw-r--r-- | activerecord/lib/active_record/suppressor.rb | 3 | ||||
-rw-r--r-- | activerecord/test/cases/suppressor_test.rb | 33 |
2 files changed, 33 insertions, 3 deletions
diff --git a/activerecord/lib/active_record/suppressor.rb b/activerecord/lib/active_record/suppressor.rb index b0b86865fd..b3644bf569 100644 --- a/activerecord/lib/active_record/suppressor.rb +++ b/activerecord/lib/active_record/suppressor.rb @@ -37,8 +37,7 @@ module ActiveRecord end end - # Ignore saving events if we're in suppression mode. - def save!(*args) # :nodoc: + def create_or_update(*args) # :nodoc: SuppressorRegistry.suppressed[self.class.name] ? true : super end end diff --git a/activerecord/test/cases/suppressor_test.rb b/activerecord/test/cases/suppressor_test.rb index 1c449d42fe..72c5c16555 100644 --- a/activerecord/test/cases/suppressor_test.rb +++ b/activerecord/test/cases/suppressor_test.rb @@ -3,7 +3,38 @@ require 'models/notification' require 'models/user' class SuppressorTest < ActiveRecord::TestCase - def test_suppresses_creation_of_record_generated_by_callback + def test_suppresses_create + assert_no_difference -> { Notification.count } do + Notification.suppress do + Notification.create + Notification.create! + Notification.new.save + Notification.new.save! + end + end + end + + def test_suppresses_update + user = User.create! token: 'asdf' + + User.suppress do + user.update token: 'ghjkl' + assert_equal 'asdf', user.reload.token + + user.update! token: 'zxcvbnm' + assert_equal 'asdf', user.reload.token + + user.token = 'qwerty' + user.save + assert_equal 'asdf', user.reload.token + + user.token = 'uiop' + user.save! + assert_equal 'asdf', user.reload.token + end + end + + def test_suppresses_create_in_callback assert_difference -> { User.count } do assert_no_difference -> { Notification.count } do Notification.suppress { UserWithNotification.create! } |