Skip to content

Commit

Permalink
Merge pull request #515 from ruby/quote-y-n
Browse files Browse the repository at this point in the history
Add quotes to the strings "y" and "n"
  • Loading branch information
tenderlove authored Aug 5, 2021
2 parents 0179e0c + 6a1c306 commit 02f759d
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 0 deletions.
2 changes: 2 additions & 0 deletions lib/psych/visitors/yaml_tree.rb
Original file line number Diff line number Diff line change
Expand Up @@ -272,6 +272,8 @@ def visit_String o
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:]][^"]*$/
Expand Down
13 changes: 13 additions & 0 deletions test/psych/test_string.rb
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,19 @@ def initialize
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
Expand Down

0 comments on commit 02f759d

Please sign in to comment.