diff options
author | Isaac Betesh <iybetesh@gmail.com> | 2017-02-08 11:20:38 -0500 |
---|---|---|
committer | Isaac Betesh <iybetesh@gmail.com> | 2017-02-08 12:03:59 -0500 |
commit | c01f31f43c870bd9a828ae96207de0c2cdd8fd08 (patch) | |
tree | 8aa50d9d67753781ef638b659d99435b8be1c52b | |
parent | 47113df0341cd7bf56056bc666527978c586c7c5 (diff) | |
download | rails-c01f31f43c870bd9a828ae96207de0c2cdd8fd08.tar.gz rails-c01f31f43c870bd9a828ae96207de0c2cdd8fd08.tar.bz2 rails-c01f31f43c870bd9a828ae96207de0c2cdd8fd08.zip |
Allow ActiveRecord::Base.as_json to accept a frozen Hash
-rw-r--r-- | activerecord/CHANGELOG.md | 4 | ||||
-rw-r--r-- | activerecord/lib/active_record/serialization.rb | 2 | ||||
-rw-r--r-- | activerecord/test/cases/json_serialization_test.rb | 11 |
3 files changed, 16 insertions, 1 deletions
diff --git a/activerecord/CHANGELOG.md b/activerecord/CHANGELOG.md index bae2cab457..af4e42ba9a 100644 --- a/activerecord/CHANGELOG.md +++ b/activerecord/CHANGELOG.md @@ -1,3 +1,7 @@ +* Allow ActiveRecord::Base#as_json to be passed a frozen Hash. + + *Isaac Betesh* + * Deprecate locking records with unpersisted changes. *Marc Schütz* diff --git a/activerecord/lib/active_record/serialization.rb b/activerecord/lib/active_record/serialization.rb index 5a408e7b8e..db2bd0b55e 100644 --- a/activerecord/lib/active_record/serialization.rb +++ b/activerecord/lib/active_record/serialization.rb @@ -9,7 +9,7 @@ module ActiveRecord #:nodoc: end def serializable_hash(options = nil) - options = options.try(:clone) || {} + options = options.try(:dup) || {} options[:except] = Array(options[:except]).map(&:to_s) options[:except] |= Array(self.class.inheritance_column) diff --git a/activerecord/test/cases/json_serialization_test.rb b/activerecord/test/cases/json_serialization_test.rb index 155e858822..5a1d066aef 100644 --- a/activerecord/test/cases/json_serialization_test.rb +++ b/activerecord/test/cases/json_serialization_test.rb @@ -101,6 +101,17 @@ class JsonSerializationTest < ActiveRecord::TestCase assert_match %r{"favorite_quote":"Constraints are liberating"}, methods_json end + def test_uses_serializable_hash_with_frozen_hash + def @contact.serializable_hash(options = nil) + super({ only: %w(name) }.freeze) + end + + json = @contact.to_json + assert_match %r{"name":"Konata Izumi"}, json + assert_no_match %r{awesome}, json + assert_no_match %r{age}, json + end + def test_uses_serializable_hash_with_only_option def @contact.serializable_hash(options = nil) super(only: %w(name)) |