aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord
diff options
context:
space:
mode:
authorSean Griffin <sean@thoughtbot.com>2014-06-07 11:03:36 -0600
committerSean Griffin <sean@thoughtbot.com>2014-06-07 11:03:36 -0600
commit105e0304b9d7eab2f5e570fc23fbc4e1d3f80823 (patch)
tree35037a8197080c2649aabfc572d70ae41460b117 /activerecord
parent287e926d564bbe8db6baad85d35276042e0dc47a (diff)
downloadrails-105e0304b9d7eab2f5e570fc23fbc4e1d3f80823.tar.gz
rails-105e0304b9d7eab2f5e570fc23fbc4e1d3f80823.tar.bz2
rails-105e0304b9d7eab2f5e570fc23fbc4e1d3f80823.zip
Move conditionals about freezing closer to the definition of `freeze`
Reduces the number of places that care about the internals of how we store and type cast attributes. We do not need to go through the dup/freeze dance, as you couldn't have saved a frozen new record anyway, and that is the only time we would end up modifying the frozen hash.
Diffstat (limited to 'activerecord')
-rw-r--r--activerecord/lib/active_record/core.rb6
-rw-r--r--activerecord/lib/active_record/transactions.rb6
2 files changed, 8 insertions, 4 deletions
diff --git a/activerecord/lib/active_record/core.rb b/activerecord/lib/active_record/core.rb
index c996e93076..79388f53b5 100644
--- a/activerecord/lib/active_record/core.rb
+++ b/activerecord/lib/active_record/core.rb
@@ -546,5 +546,11 @@ module ActiveRecord
def init_attributes(attributes, options)
assign_attributes(attributes)
end
+
+ def thaw
+ if frozen?
+ @raw_attributes = @raw_attributes.dup
+ end
+ end
end
end
diff --git a/activerecord/lib/active_record/transactions.rb b/activerecord/lib/active_record/transactions.rb
index d733063f5a..fec5d7f2ad 100644
--- a/activerecord/lib/active_record/transactions.rb
+++ b/activerecord/lib/active_record/transactions.rb
@@ -347,7 +347,7 @@ module ActiveRecord
@_start_transaction_state[:destroyed] = @destroyed
end
@_start_transaction_state[:level] = (@_start_transaction_state[:level] || 0) + 1
- @_start_transaction_state[:frozen?] = @raw_attributes.frozen?
+ @_start_transaction_state[:frozen?] = frozen?
end
# Clear the new record state and id of a record.
@@ -367,8 +367,7 @@ module ActiveRecord
transaction_level = (@_start_transaction_state[:level] || 0) - 1
if transaction_level < 1 || force
restore_state = @_start_transaction_state
- was_frozen = restore_state[:frozen?]
- @raw_attributes = @raw_attributes.dup if @raw_attributes.frozen?
+ thaw unless restore_state[:frozen?]
@new_record = restore_state[:new_record]
@destroyed = restore_state[:destroyed]
if restore_state.has_key?(:id)
@@ -377,7 +376,6 @@ module ActiveRecord
@raw_attributes.delete(self.class.primary_key)
@attributes.delete(self.class.primary_key)
end
- @raw_attributes.freeze if was_frozen
end
end
end