summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHiroshi SHIBATA <hsbt@ruby-lang.org>2021-05-10 20:02:33 +0900
committerGitHub <noreply@github.com>2021-05-10 20:02:33 +0900
commit8fcdc380c0493911e95bea6989c2a629ba68e101 (patch)
treed78cd2bf931f3abd4f763dabcec22cf77de1820f
parente417d0eb5d7c8308802519a4dc87f42912c63884 (diff)
parent1c5c29e81fd5572df2ec6cdef655b1521fd4c97e (diff)
downloadpsych-8fcdc380c0493911e95bea6989c2a629ba68e101.zip
Merge pull request #480 from Shopify/symbolize-name-non-string-keys
Fix symbolize_name with non-string keys
-rw-r--r--lib/psych/visitors/to_ruby.rb2
-rw-r--r--test/psych/test_psych.rb7
2 files changed, 5 insertions, 4 deletions
diff --git a/lib/psych/visitors/to_ruby.rb b/lib/psych/visitors/to_ruby.rb
index 4d98850..4de7f80 100644
--- a/lib/psych/visitors/to_ruby.rb
+++ b/lib/psych/visitors/to_ruby.rb
@@ -366,7 +366,7 @@ module Psych
hash[key] = val
end
else
- if !tagged && @symbolize_names
+ if !tagged && @symbolize_names && key.is_a?(String)
key = key.to_sym
elsif !@freeze
key = deduplicate(key)
diff --git a/test/psych/test_psych.rb b/test/psych/test_psych.rb
index 76a3627..9eea4a0 100644
--- a/test/psych/test_psych.rb
+++ b/test/psych/test_psych.rb
@@ -371,17 +371,18 @@ class TestPsych < Psych::TestCase
yaml = <<-eoyml
foo:
bar: baz
+ 1: 2
hoge:
- fuga: piyo
eoyml
result = Psych.load(yaml)
- assert_equal result, { "foo" => { "bar" => "baz"}, "hoge" => [{ "fuga" => "piyo" }] }
+ assert_equal result, { "foo" => { "bar" => "baz", 1 => 2 }, "hoge" => [{ "fuga" => "piyo" }] }
result = Psych.load(yaml, symbolize_names: true)
- assert_equal result, { foo: { bar: "baz" }, hoge: [{ fuga: "piyo" }] }
+ assert_equal result, { foo: { bar: "baz", 1 => 2 }, hoge: [{ fuga: "piyo" }] }
result = Psych.safe_load(yaml, symbolize_names: true)
- assert_equal result, { foo: { bar: "baz" }, hoge: [{ fuga: "piyo" }] }
+ assert_equal result, { foo: { bar: "baz", 1 => 2 }, hoge: [{ fuga: "piyo" }] }
end
end