From a5faf6fb7279ebd1fab92d51bcc705469b7b98d9 Mon Sep 17 00:00:00 2001 From: Brian Abreu Date: Tue, 28 Jun 2016 18:32:49 -0700 Subject: Correctly handle frozen options for ActiveRecord::Serialization#serializable_hash. --- activerecord/lib/active_record/serialization.rb | 2 +- activerecord/test/cases/json_serialization_test.rb | 6 ++---- 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 -- cgit v1.2.3