diff options
author | Carlos Antonio da Silva <carlosantoniodasilva@gmail.com> | 2012-06-18 21:54:43 -0300 |
---|---|---|
committer | Carlos Antonio da Silva <carlosantoniodasilva@gmail.com> | 2012-06-18 21:54:43 -0300 |
commit | 27411a7c8d1c184876b1cb40ecdd07772551e6dd (patch) | |
tree | 92fd560b75709595a3fa6591c5fe4689067d8227 /activerecord/lib/active_record/attribute_assignment.rb | |
parent | 32c65d8da3fd28f8577bc23695846d47cdaac6fb (diff) | |
parent | 808592bae2b83ced018f16d576d41a0059ed302a (diff) | |
download | rails-27411a7c8d1c184876b1cb40ecdd07772551e6dd.tar.gz rails-27411a7c8d1c184876b1cb40ecdd07772551e6dd.tar.bz2 rails-27411a7c8d1c184876b1cb40ecdd07772551e6dd.zip |
Merge branch 'hash_with_indifferent_access_fix'
The problem:
Accessing a HashWithIndifferentAccess does not return the the same object
that is stored in the hash (i.e. equal?) causing unexpected results:
hash = HashWithIndifferentAccess.new {|h, k| h[k] = []}
hash[:a] << 1 # => [1]
hash[:a] # => [], expected [1]
The cause:
When a block is provided to generate default values the generated values
are duped if they are arrays. The duped value is stored in the hash but
the original value is returned when the hash is accessed.
The fix:
The duping is there for allowing frozen arrays containing hashes to be
modified. The fix restricts the duping to this case. Note that if default
function generates a frozen array an error will be raised on assignment
before and after the patch.
Closes #3811
Diffstat (limited to 'activerecord/lib/active_record/attribute_assignment.rb')
0 files changed, 0 insertions, 0 deletions