Skip to content

Commit

Permalink
Use after_commit_everywhere instead of after_commit_action
Browse files Browse the repository at this point in the history
  • Loading branch information
stokarenko committed May 12, 2020
1 parent 19406b2 commit 86920c6
Show file tree
Hide file tree
Showing 13 changed files with 30 additions and 30 deletions.
2 changes: 1 addition & 1 deletion Appraisals
Original file line number Diff line number Diff line change
Expand Up @@ -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
2 changes: 1 addition & 1 deletion Gemfile
Original file line number Diff line number Diff line change
Expand Up @@ -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'
8 changes: 4 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -436,7 +436,7 @@ job.aasm.current_state # stage3
### Multiple state machines per class

Multiple state machines per class are supported. Be aware though that _AASM_ has been
built with one state machine per class in mind. Nonetheless, here's how to do it (see below). Please note that you will need to specify database columns for where your pertinent states will be stored - we have specified two columns `move_state` and `work_state` in the example below. See the [Column name & migration](https://github.com/aasm/aasm#column-name--migration) section for further info.
built with one state machine per class in mind. Nonetheless, here's how to do it (see below). Please note that you will need to specify database columns for where your pertinent states will be stored - we have specified two columns `move_state` and `work_state` in the example below. See the [Column name & migration](https://github.com/aasm/aasm#column-name--migration) section for further info.

```ruby
class SimpleMultipleExample
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -1098,7 +1098,7 @@ end

### Log State Changes

Logging state change can be done using [paper_trail](https://github.com/paper-trail-gem/paper_trail) gem
Logging state change can be done using [paper_trail](https://github.com/paper-trail-gem/paper_trail) gem

Example of implementation can be found here [https://github.com/nitsujri/aasm-papertrail-example](https://github.com/nitsujri/aasm-papertrail-example)

Expand Down
2 changes: 1 addition & 1 deletion gemfiles/norails.gemfile
Original file line number Diff line number Diff line change
Expand Up @@ -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"

Expand Down
2 changes: 1 addition & 1 deletion gemfiles/rails_4.2.gemfile
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down
2 changes: 1 addition & 1 deletion gemfiles/rails_4.2_mongoid_5.gemfile
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
2 changes: 1 addition & 1 deletion gemfiles/rails_4.2_nobrainer.gemfile
Original file line number Diff line number Diff line change
Expand Up @@ -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: "../"
2 changes: 1 addition & 1 deletion gemfiles/rails_5.0.gemfile
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
2 changes: 1 addition & 1 deletion gemfiles/rails_5.0_nobrainer.gemfile
Original file line number Diff line number Diff line change
Expand Up @@ -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: "../"
2 changes: 1 addition & 1 deletion gemfiles/rails_5.1.gemfile
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
2 changes: 1 addition & 1 deletion gemfiles/rails_5.2.gemfile
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
8 changes: 4 additions & 4 deletions lib/aasm/persistence/active_record_persistence.rb
Original file line number Diff line number Diff line change
Expand Up @@ -29,13 +29,13 @@ module ActiveRecordPersistence
#
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

Expand Down
24 changes: 12 additions & 12 deletions spec/unit/persistence/active_record_persistence_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -628,22 +628,22 @@
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
validator.transaction do
validator.run!
expect(validator.name).to eq("name")
expect(validator).to be_running

raise ActiveRecord::Rollback, "failed on purpose"
end
raise ActiveRecord::Rollback, "failed on purpose"
end

expect(validator.name).to eq("name")
expect(validator.reload).to be_sleeping
expect(validator.name).to eq("name")
expect(validator.reload).to be_sleeping
end
end
end

Expand Down

0 comments on commit 86920c6

Please sign in to comment.