aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord
diff options
context:
space:
mode:
authorGeorge Claghorn <george.claghorn@gmail.com>2015-06-04 00:00:20 -0400
committerGeorge Claghorn <george.claghorn@gmail.com>2015-06-04 00:11:38 -0400
commitac002395d87aa7a4bcc3126e67ca3b2808d832a6 (patch)
tree8c42d15fe11ef5d1c8e260810162fa0aff111a08 /activerecord
parentae5f2b4e79f3e41aad8280109d8bfc788a1a2733 (diff)
downloadrails-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.rb3
-rw-r--r--activerecord/test/cases/suppressor_test.rb33
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! }