summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAaron Patterson <tenderlove@ruby-lang.org>2021-08-04 17:10:02 -0700
committerGitHub <noreply@github.com>2021-08-04 17:10:02 -0700
commit02f759dd74cbd3787263c5a32b7505fc8ddf76cc (patch)
treefb18fccb5b96335dc30a7229d08d59fbf55b3c12
parent0179e0cf481018c83f711211bb0f15a1871fa335 (diff)
parent6a1c30634e61967f3d8133b3181b9f301ff7f550 (diff)
downloadpsych-02f759dd74cbd3787263c5a32b7505fc8ddf76cc.tar.gz
Merge pull request #515 from ruby/quote-y-n
Add quotes to the strings "y" and "n"
-rw-r--r--lib/psych/visitors/yaml_tree.rb2
-rw-r--r--test/psych/test_string.rb13
2 files changed, 15 insertions, 0 deletions
diff --git a/lib/psych/visitors/yaml_tree.rb b/lib/psych/visitors/yaml_tree.rb
index 05748dd..2eee4d3 100644
--- a/lib/psych/visitors/yaml_tree.rb
+++ b/lib/psych/visitors/yaml_tree.rb
@@ -272,6 +272,8 @@ module Psych
tag = 'tag:yaml.org,2002:str'
plain = false
quote = false
+ elsif o == 'y' || o == 'n'
+ style = Nodes::Scalar::DOUBLE_QUOTED
elsif @line_width && o.length > @line_width
style = Nodes::Scalar::FOLDED
elsif o =~ /^[^[:word:]][^"]*$/
diff --git a/test/psych/test_string.rb b/test/psych/test_string.rb
index 20ab79c..0dc34b3 100644
--- a/test/psych/test_string.rb
+++ b/test/psych/test_string.rb
@@ -17,6 +17,19 @@ module Psych
end
end
+ # 'y' and 'n' are kind of ambiguous. Syck treated y and n literals in
+ # YAML documents as strings. But this is not what the YAML 1.1 spec says.
+ # YAML 1.1 says they should be treated as booleans. When we're dumping
+ # documents, we know it's a string, so adding quotes will eliminate the
+ # "ambiguity" in the emitted document
+ def test_y_is_quoted
+ assert_match(/"y"/, Psych.dump("y"))
+ end
+
+ def test_n_is_quoted
+ assert_match(/"n"/, Psych.dump("n"))
+ end
+
def test_string_with_newline
assert_equal "1\n2", Psych.load("--- ! '1\n\n 2'\n")
end