diff options
-rw-r--r-- | activerecord/CHANGELOG | 2 | ||||
-rw-r--r-- | activerecord/lib/active_record/transactions.rb | 19 | ||||
-rw-r--r-- | activerecord/test/transactions_test.rb | 14 |
3 files changed, 24 insertions, 11 deletions
diff --git a/activerecord/CHANGELOG b/activerecord/CHANGELOG index 0f7af0d471..1971faa309 100644 --- a/activerecord/CHANGELOG +++ b/activerecord/CHANGELOG @@ -1,5 +1,7 @@ *SVN* +* Deprecation: object transactions warning. [Jeremy Kemper] + * has_one :dependent => :nullify ignores nil associates. #6528 [janovetz, Jeremy Kemper] * Oracle: resolve test failures, use prefetched primary key for inserts, check for null defaults. Factor out some common methods from all adapters. #6515 [Michael Schoen] diff --git a/activerecord/lib/active_record/transactions.rb b/activerecord/lib/active_record/transactions.rb index 84da1e91d6..6a776966bb 100644 --- a/activerecord/lib/active_record/transactions.rb +++ b/activerecord/lib/active_record/transactions.rb @@ -55,7 +55,7 @@ module ActiveRecord # will happen under the protected cover of a transaction. So you can use validations to check for values that the transaction # depend on or you can raise exceptions in the callbacks to rollback. # - # == Object-level transactions + # == Object-level transactions (deprecated) # # You can enable object-level transactions for Active Record objects, though. You do this by naming each of the Active Records # that you want to enable object-level transactions for, like this: @@ -65,8 +65,14 @@ module ActiveRecord # mary.deposit(100) # end # - # If the transaction fails, David and Mary will be returned to their pre-transactional state. No money will have changed hands in - # neither object nor database. + # If the transaction fails, David and Mary will be returned to their + # pre-transactional state. No money will have changed hands in neither + # object nor database. + # + # However, useful state such as validation errors are also rolled back, + # limiting the usefulness of this feature. As such it is deprecated in + # Rails 1.2 and will be removed in the next release. Install the + # object_transactions plugin if you wish to continue using it. # # == Exception handling # @@ -80,8 +86,11 @@ module ActiveRecord increment_open_transactions begin - objects.each { |o| o.extend(Transaction::Simple) } - objects.each { |o| o.start_transaction } + unless objects.empty? + ActiveSupport::Deprecation.warn "Object transactions are deprecated and will be removed from Rails 2.0. See http://www.rubyonrails.org/deprecation for details.", caller + objects.each { |o| o.extend(Transaction::Simple) } + objects.each { |o| o.start_transaction } + end result = connection.transaction(Thread.current['start_db_transaction'], &block) diff --git a/activerecord/test/transactions_test.rb b/activerecord/test/transactions_test.rb index a8584cfd56..b0d1eb4eb8 100644 --- a/activerecord/test/transactions_test.rb +++ b/activerecord/test/transactions_test.rb @@ -90,12 +90,14 @@ class TransactionTest < Test::Unit::TestCase assert !@first.approved?, "First should be unapproved initially" begin - Topic.transaction(@first, @second) do - @first.approved = true - @second.approved = false - @first.save - @second.save - raise "Bad things!" + assert_deprecated /Object transactions/ do + Topic.transaction(@first, @second) do + @first.approved = true + @second.approved = false + @first.save + @second.save + raise "Bad things!" + end end rescue # caught it |