diff options
author | eileencodes <eileencodes@gmail.com> | 2017-07-01 14:22:28 -0400 |
---|---|---|
committer | eileencodes <eileencodes@gmail.com> | 2017-07-01 14:53:21 -0400 |
commit | 608ebccf8f6314c945444b400a37c2d07f21b253 (patch) | |
tree | cd5bf26acf9e801bcdb6dec38a30d891885f1c7d /activerecord/lib/active_record/connection_adapters | |
parent | c197418bdbb0c5546964bfc234d056edaa69eae2 (diff) | |
download | rails-608ebccf8f6314c945444b400a37c2d07f21b253.tar.gz rails-608ebccf8f6314c945444b400a37c2d07f21b253.tar.bz2 rails-608ebccf8f6314c945444b400a37c2d07f21b253.zip |
Deprecate and replace `set_state` method
`set_state` was directly setting the transaction state instance
variable. It's better to set the state via specific methods (`rollback!`
and `commit!` respectively.
While undocumented and untested, it's possible someone is using
`set_state` in their app or gem so I've added a deprecation notice to
it.
No where in the app do we use `nullify!` but I wanted to keep existing
behavior while replacing the method with a better pattern.
Diffstat (limited to 'activerecord/lib/active_record/connection_adapters')
-rw-r--r-- | activerecord/lib/active_record/connection_adapters/abstract/transaction.rb | 33 |
1 files changed, 27 insertions, 6 deletions
diff --git a/activerecord/lib/active_record/connection_adapters/abstract/transaction.rb b/activerecord/lib/active_record/connection_adapters/abstract/transaction.rb index 19b7821494..265775c15c 100644 --- a/activerecord/lib/active_record/connection_adapters/abstract/transaction.rb +++ b/activerecord/lib/active_record/connection_adapters/abstract/transaction.rb @@ -1,8 +1,6 @@ module ActiveRecord module ConnectionAdapters class TransactionState - VALID_STATES = Set.new([:committed, :rolledback, nil]) - def initialize(state = nil) @state = state end @@ -24,10 +22,33 @@ module ActiveRecord end def set_state(state) - unless VALID_STATES.include?(state) + ActiveSupport::Deprecation.warn(<<-MSG.squish) + The set_state method is deprecated and will be removed in + Rails 5.2. Please use rollback! or commit! to set transaction + state directly. + MSG + case state + when :rolledback + rollback! + when :committed + commit! + when nil + nullify! + else raise ArgumentError, "Invalid transaction state: #{state}" end - @state = state + end + + def rollback! + @state = :rolledback + end + + def commit! + @state = :committed + end + + def nullify! + @state = nil end end @@ -57,7 +78,7 @@ module ActiveRecord end def rollback - @state.set_state(:rolledback) + @state.rollback! end def rollback_records @@ -72,7 +93,7 @@ module ActiveRecord end def commit - @state.set_state(:committed) + @state.commit! end def before_commit_records |