[ruby/psych] Fix anchor lookup with symbolized names

https://github.com/ruby/psych/commit/ef74fc01e2
This commit is contained in:
Jean Boussier 2020-06-08 17:52:41 +02:00 коммит произвёл Hiroshi SHIBATA
Родитель e9adc2f420
Коммит 666c077691
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: F9CF13417264FAC2
2 изменённых файлов: 17 добавлений и 7 удалений

Просмотреть файл

@ -337,18 +337,12 @@ module Psych
list
end
SHOVEL = '<<'
def revive_hash hash, o
o.children.each_slice(2) { |k,v|
key = accept(k)
if @symbolize_names
key = key.to_sym
elsif !@freeze
key = deduplicate(key)
end
val = accept(v)
if key == SHOVEL && k.tag != "tag:yaml.org,2002:str"
if key == '<<' && k.tag != "tag:yaml.org,2002:str"
case v
when Nodes::Alias, Nodes::Mapping
begin
@ -370,6 +364,12 @@ module Psych
hash[key] = val
end
else
if @symbolize_names
key = key.to_sym
elsif !@freeze
key = deduplicate(key)
end
hash[key] = val
end

Просмотреть файл

@ -17,6 +17,16 @@ map:
assert_equal hash, doc
end
def test_merge_key_with_bare_hash_symbolized_names
doc = Psych.load <<-eodoc, symbolize_names: true
map:
<<:
hello: world
eodoc
hash = { map: { hello: "world" } }
assert_equal hash, doc
end
def test_roundtrip_with_chevron_key
h = {}
v = { 'a' => h, '<<' => h }