Permalink
Browse files

Keep track of dirty attrs after after rollback.

[related #13166]
  • Loading branch information...
1 parent 8d8d4f1 commit 37c238927fbed059de3f26a90d8923fb377568a5 @arthurnn arthurnn committed with rafaelfranca May 7, 2014
@@ -1,3 +1,9 @@
+* Keep track of dirty attributes after transaction is rollback.
+
+ Related #13166.
+
+ *Bogdan Gusiev* *arthurnn*
+
* Add support for module-level `table_name_suffix` in models.
This makes `table_name_suffix` work the same way as `table_name_prefix` when
@@ -505,6 +505,7 @@ def init_internals
@destroyed_by_association = nil
@new_record = true
@txn = nil
+ @_start_transaction_state = {}
@transaction_state = nil
@reflects_state = [false]
end
@@ -341,7 +341,6 @@ def with_transaction_returning_status
# Save the new record state and id of a record so it can be restored later if a transaction fails.
def remember_transaction_record_state #:nodoc:
- @_start_transaction_state ||= {}
@_start_transaction_state[:id] = id if has_attribute?(self.class.primary_key)
unless @_start_transaction_state.include?(:new_record)
@_start_transaction_state[:new_record] = @new_record
@@ -352,7 +351,6 @@ def remember_transaction_record_state #:nodoc:
@_start_transaction_state[:level] = (@_start_transaction_state[:level] || 0) + 1
@_start_transaction_state[:frozen?] = @attributes.frozen?
@_start_transaction_state[:changed_attributes] ||= changed_attributes
- @_start_transaction_state
end
# Clear the new record state and id of a record.
@@ -274,7 +274,7 @@ def test_invalid_keys_for_transaction
end
end
- def test_dirty_state_rollback
+ def test_rollback_when_changing_inside_transaction
assert !@first.approved?
Topic.transaction do
@first.approved = true
@@ -287,7 +287,7 @@ def test_dirty_state_rollback
assert @first.reload.approved
end
- def test_dirty_state_rollback2
+ def test_rollback_when_changing_outside_transaction
assert !@first.approved?
@first.approved = true
Topic.transaction do
@@ -300,22 +300,7 @@ def test_dirty_state_rollback2
assert @first.reload.approved
end
- def test_dirty_state_rollback3
- assert !@first.approved?
- @first.approved = true
- @first.save!
- Topic.transaction do
- @first.approved = false
- @first.save!
- raise ActiveRecord::Rollback
- end
- assert !@first.approved
- assert @first.changes["approved"]
- @first.save!
- assert !@first.reload.approved
- end
-
- def test_dirty_state_rollback4
+ def test_rollback_when_changing_back_to_prev_stage
assert !@first.approved?
Topic.transaction do
@first.approved = true
@@ -330,6 +315,7 @@ def test_dirty_state_rollback4
assert !@first.reload.approved
end
+
def test_force_savepoint_in_nested_transaction
Topic.transaction do
@first.approved = true

0 comments on commit 37c2389

Please sign in to comment.