diff options
author | wangjohn <wangjohn@mit.edu> | 2013-01-20 13:19:05 -0500 |
---|---|---|
committer | wangjohn <wangjohn@mit.edu> | 2013-01-21 12:16:55 -0500 |
commit | 26853e8948167b7388244ef67f0480211ad2d9f5 (patch) | |
tree | b7e42d4727305d51c4a5dc5e2bfaf83fb42b5137 /activerecord/lib/active_record | |
parent | 4e327225947b933d5434509e02e98226c581adc1 (diff) | |
download | rails-26853e8948167b7388244ef67f0480211ad2d9f5.tar.gz rails-26853e8948167b7388244ef67f0480211ad2d9f5.tar.bz2 rails-26853e8948167b7388244ef67f0480211ad2d9f5.zip |
Refactored transaction state into its own object. Each transaction creates a new transaction state object upon initialization.
Diffstat (limited to 'activerecord/lib/active_record')
-rw-r--r-- | activerecord/lib/active_record/connection_adapters/abstract/transaction.rb | 29 |
1 files changed, 24 insertions, 5 deletions
diff --git a/activerecord/lib/active_record/connection_adapters/abstract/transaction.rb b/activerecord/lib/active_record/connection_adapters/abstract/transaction.rb index 2b8026dbf9..3ecef96b10 100644 --- a/activerecord/lib/active_record/connection_adapters/abstract/transaction.rb +++ b/activerecord/lib/active_record/connection_adapters/abstract/transaction.rb @@ -5,17 +5,36 @@ module ActiveRecord def initialize(connection) @connection = connection - @state = nil + @state = TransactionState.new + end + + def state + @state + end + end + + class TransactionState + + VALID_STATES = Set.new([:committed, :rolledback, nil]) + + def initialize(state = nil) + @state = state end def committed? - @state == :commit + @state == :committed end def rolledback? - @state == :rollback + @state == :rolledback end + def set_state(state) + if !VALID_STATES.include?(state) + raise ArgumentError, "Invalid transaction state: #{state}" + end + @state = state + end end class ClosedTransaction < Transaction #:nodoc: @@ -101,7 +120,7 @@ module ActiveRecord end def rollback_records - @state = :rollback + @state.set_state(:rolledback) records.uniq.each do |record| begin record.rolledback!(parent.closed?) @@ -112,7 +131,7 @@ module ActiveRecord end def commit_records - @state = :commit + @state.set_state(:committed) records.uniq.each do |record| begin record.committed! |