aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBrian Abreu <brian@nuts.com>2016-06-28 18:32:49 -0700
committerBrian Abreu <brian@nuts.com>2016-12-09 08:30:41 -0500
commita5faf6fb7279ebd1fab92d51bcc705469b7b98d9 (patch)
treefd14dab86f7213ccb67e7ef0ab5b9a530b8aeb45
parentcfc126e150659f91ccc0892197e7825af7c7327b (diff)
downloadrails-a5faf6fb7279ebd1fab92d51bcc705469b7b98d9.tar.gz
rails-a5faf6fb7279ebd1fab92d51bcc705469b7b98d9.tar.bz2
rails-a5faf6fb7279ebd1fab92d51bcc705469b7b98d9.zip
Correctly handle frozen options for ActiveRecord::Serialization#serializable_hash.
-rw-r--r--activerecord/lib/active_record/serialization.rb2
-rw-r--r--activerecord/test/cases/json_serialization_test.rb6
2 files changed, 3 insertions, 5 deletions
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 a2150483f3..f8120d582b 100644
--- a/activerecord/test/cases/json_serialization_test.rb
+++ b/activerecord/test/cases/json_serialization_test.rb
@@ -149,10 +149,8 @@ class JsonSerializationTest < ActiveRecord::TestCase
end
def test_serializable_hash_should_not_modify_options_in_argument
- options = { only: :name }
- @contact.serializable_hash(options)
-
- assert_nil options[:except]
+ options = { only: :name }.freeze
+ assert_nothing_raised { @contact.serializable_hash(options) }
end
end