diff options
author | Sean Griffin <sean@thoughtbot.com> | 2014-06-07 11:03:36 -0600 |
---|---|---|
committer | Sean Griffin <sean@thoughtbot.com> | 2014-06-07 11:03:36 -0600 |
commit | 105e0304b9d7eab2f5e570fc23fbc4e1d3f80823 (patch) | |
tree | 35037a8197080c2649aabfc572d70ae41460b117 /activerecord | |
parent | 287e926d564bbe8db6baad85d35276042e0dc47a (diff) | |
download | rails-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.rb | 6 | ||||
-rw-r--r-- | activerecord/lib/active_record/transactions.rb | 6 |
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 |