Merge pull request #3091 from visualsayed/fix_hash_replace_method

protect NoMethodError from calling to_hash in replace
This commit is contained in:
Yukihiro "Matz" Matsumoto
2016-01-28 12:17:51 +09:00
2 changed files with 5 additions and 0 deletions
+1
View File
@@ -154,6 +154,7 @@ class Hash
#
# ISO 15.2.13.4.23
def replace(hash)
raise TypeError, "can't convert argument into Hash" unless hash.respond_to?(:to_hash)
self.clear
hash = hash.to_hash
hash.each_key{|k|
+4
View File
@@ -239,6 +239,10 @@ assert('Hash#replace', '15.2.13.4.23') do
a = Hash.new{|h,x| x}
b.replace(a)
assert_equal(127, b[127])
assert_raise(TypeError) do
{ 'abc_key' => 'abc_value' }.replace "a"
end
end
assert('Hash#shift', '15.2.13.4.24') do