1
0
Fork 0
mirror of https://github.com/aasm/aasm synced 2023-03-27 23:22:41 -04:00

Use after_commit_everywhere instead of after_commit_action

This commit is contained in:
Sergey Tokarenko 2020-03-22 19:29:22 +03:00 committed by Sergey Tokarenko
parent 19406b27b4
commit 86920c68d9
13 changed files with 30 additions and 30 deletions

View file

@ -57,7 +57,7 @@ end
appraise 'norails' do
gem 'sqlite3', '~> 1.3', '>= 1.3.5', platforms: :ruby
gem 'rails', install_if: false
gem 'after_commit_action', install_if: false
gem 'after_commit_everywhere', install_if: false
gem 'sequel'
gem 'redis-objects'
end

View file

@ -4,4 +4,4 @@ gemspec
gem 'sqlite3', '~> 1.3.5', :platforms => :ruby
gem 'rails', '5.1.4'
gem 'after_commit_action', '~> 1.0'
gem 'after_commit_everywhere', '~> 0.1', '>= 0.1.5'

View file

@ -984,8 +984,8 @@ job.save! #notify_about_running_job is not run
Please note that `:after_commit` AASM callbacks behaves around custom implementation
of transaction pattern rather than a real-life DB transaction. This fact still causes
the race conditions and redundant callback calls within nested transaction. In order
to fix that it's highly recommended to add `gem 'after_commit_action', '~> 1.0'` to your
`Gemfile`.
to fix that it's highly recommended to add `gem 'after_commit_everywhere', '~> 0.1', '>= 0.1.5'`
to your `Gemfile`.
If you want to encapsulate state changes within an own transaction, the behavior
of this nested transaction might be confusing. Take a look at

View file

@ -4,7 +4,7 @@ source "https://rubygems.org"
gem "sqlite3", "~> 1.3", ">= 1.3.5", platforms: :ruby
gem "rails", install_if: false
gem "after_commit_action", install_if: false
gem "after_commit_everywhere", install_if: false
gem "sequel"
gem "redis-objects"

View file

@ -4,7 +4,7 @@ source "https://rubygems.org"
gem "sqlite3", "~> 1.3.5", platforms: :ruby
gem "rails", "4.2.5"
gem "after_commit_action", "~> 1.0"
gem "after_commit_everywhere", "~> 0.1", ">= 0.1.5"
gem "nokogiri", "1.6.8.1", platforms: [:ruby_19]
gem "mime-types", "~> 2", platforms: [:ruby_19, :jruby]
gem "mongoid", "~> 4.0"

View file

@ -4,7 +4,7 @@ source "https://rubygems.org"
gem "sqlite3", "~> 1.3.5", platforms: :ruby
gem "rails", "4.2.5"
gem "after_commit_action", "~> 1.0"
gem "after_commit_everywhere", "~> 0.1", ">= 0.1.5"
gem "mime-types", "~> 2", platforms: [:ruby_19, :jruby]
gem "mongoid", "~> 5.0"
gem "activerecord-jdbcsqlite3-adapter", "1.3.24", platforms: :jruby

View file

@ -4,7 +4,7 @@ source "https://rubygems.org"
gem "sqlite3", "~> 1.3.5", platforms: :ruby
gem "rails", "4.2.5"
gem "after_commit_action", "~> 1.0"
gem "after_commit_everywhere", "~> 0.1", ">= 0.1.5"
gem "nobrainer", "~> 0.33.0"
gemspec path: "../"

View file

@ -4,7 +4,7 @@ source "https://rubygems.org"
gem "sqlite3", "~> 1.3.5", platforms: :ruby
gem "rails", "5.0.0"
gem "after_commit_action", "~> 1.0"
gem "after_commit_everywhere", "~> 0.1", ">= 0.1.5"
gem "mongoid", "~> 6.0"
gem "sequel"
gem "dynamoid", "~> 1.3", platforms: :ruby

View file

@ -4,7 +4,7 @@ source "https://rubygems.org"
gem "sqlite3", "~> 1.3.5", platforms: :ruby
gem "rails", "5.0.0"
gem "after_commit_action", "~> 1.0"
gem "after_commit_everywhere", "~> 0.1", ">= 0.1.5"
gem "nobrainer", "~> 0.33.0"
gemspec path: "../"

View file

@ -4,7 +4,7 @@ source "https://rubygems.org"
gem "sqlite3", "~> 1.3.5", platforms: :ruby
gem "rails", "5.1"
gem "after_commit_action", "~> 1.0"
gem "after_commit_everywhere", "~> 0.1", ">= 0.1.5"
gem "mongoid", "~>6.0"
gem "sequel"
gem "dynamoid", "~> 1.3", platforms: :ruby

View file

@ -4,7 +4,7 @@ source "https://rubygems.org"
gem "sqlite3", "~> 1.3.5", platforms: :ruby
gem "rails", "5.2"
gem "after_commit_action", "~> 1.0"
gem "after_commit_everywhere", "~> 0.1", ">= 0.1.5"
gem "mongoid", "~>6.0"
gem "sequel"
gem "dynamoid", "~>2.2", platforms: :ruby

View file

@ -29,13 +29,13 @@ module AASM
#
def self.included(base)
begin
require 'after_commit_action'
base.send(:include, ::AfterCommitAction) unless base.include?(::AfterCommitAction)
base.send(:alias_method, :aasm_execute_after_commit, :execute_after_commit)
require 'after_commit_everywhere'
base.send(:include, ::AfterCommitEverywhere) unless base.include?(::AfterCommitEverywhere)
base.send(:alias_method, :aasm_execute_after_commit, :after_commit)
rescue LoadError
warn <<-MSG
[DEPRECATION] :after_commit AASM callback is not safe in terms of race conditions and redundant calls.
Please add `gem 'after_commit_action', '~> 1.0'` to your Gemfile in order to fix that.
Please add `gem 'after_commit_everywhere', '~> 0.1', '>= 0.1.5'` to your Gemfile in order to fix that.
MSG
end

View file

@ -628,22 +628,22 @@ if defined?(ActiveRecord)
expect(validator.name).to eq("name changed")
expect(validator.reload).to be_running
end
end
it "should not fire :after_commit if root transaction failed" do
validator = Validator.create(:name => 'name')
expect(validator).to be_sleeping
it "should not fire :after_commit if root transaction failed" do
validator = Validator.create(:name => 'name')
expect(validator).to be_sleeping
validator.transaction do
validator.run!
expect(validator.name).to eq("name")
expect(validator).to be_running
raise ActiveRecord::Rollback, "failed on purpose"
end
validator.transaction do
validator.run!
expect(validator.name).to eq("name")
expect(validator).to be_running
raise ActiveRecord::Rollback, "failed on purpose"
expect(validator.reload).to be_sleeping
end
expect(validator.name).to eq("name")
expect(validator.reload).to be_sleeping
end
end