From e3d223bcce28c3ac70b84399f9b211ae11542233 Mon Sep 17 00:00:00 2001 From: Arthur Neves Date: Thu, 15 May 2014 13:56:44 -0400 Subject: Small refactoring on clear_transaction_record_state Make sure when we clean the `@_start_transaction_state` var we do it in the same code-path. Also this makes `clear_transaction_record_state`, more consistent with `restore_transaction_record_state` --- activerecord/lib/active_record/transactions.rb | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) (limited to 'activerecord/lib/active_record/transactions.rb') diff --git a/activerecord/lib/active_record/transactions.rb b/activerecord/lib/active_record/transactions.rb index 17f76b63b3..c0d8b8ddd4 100644 --- a/activerecord/lib/active_record/transactions.rb +++ b/activerecord/lib/active_record/transactions.rb @@ -295,7 +295,7 @@ module ActiveRecord def committed! #:nodoc: run_callbacks :commit if destroyed? || persisted? ensure - @_start_transaction_state.clear + clear_transaction_record_state(true) end # Call the +after_rollback+ callbacks. The +force_restore_state+ argument indicates if the record @@ -353,9 +353,11 @@ module ActiveRecord end # Clear the new record state and id of a record. - def clear_transaction_record_state #:nodoc: + def clear_transaction_record_state(force = false) #:nodoc: @_start_transaction_state[:level] = (@_start_transaction_state[:level] || 0) - 1 - @_start_transaction_state.clear if @_start_transaction_state[:level] < 1 + if force || @_start_transaction_state[:level] < 1 + @_start_transaction_state.clear + end end # Restore the new record state and id of a record that was previously saved by a call to save_record_state. -- cgit v1.2.3 From 535f299df9b8228c854d3ed0554feeaf1946812f Mon Sep 17 00:00:00 2001 From: Arthur Neves Date: Thu, 15 May 2014 15:38:05 -0400 Subject: Clear transaction state if callback raise rollback --- activerecord/lib/active_record/transactions.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'activerecord/lib/active_record/transactions.rb') diff --git a/activerecord/lib/active_record/transactions.rb b/activerecord/lib/active_record/transactions.rb index c0d8b8ddd4..51bda88be9 100644 --- a/activerecord/lib/active_record/transactions.rb +++ b/activerecord/lib/active_record/transactions.rb @@ -328,7 +328,7 @@ module ActiveRecord begin status = yield rescue ActiveRecord::Rollback - @_start_transaction_state[:level] = (@_start_transaction_state[:level] || 0) - 1 + clear_transaction_record_state status = nil end -- cgit v1.2.3