summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortenderlove <tenderlove@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2013-02-07 23:54:29 +0000
committertenderlove <tenderlove@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2013-02-07 23:54:29 +0000
commit1c836f811c7f7e2cd29e2bab68f0780e10bb0767 (patch)
tree8b4a31700a650d423774f64a465d7f615ea5c9d8
parent7a68f53dc6f710b8aeb4ebe91961c29d1ad85e5f (diff)
* ext/psych/lib/psych/visitors/yaml_tree.rb: fixing string quotation
when dumping Ruby strings. Thanks Ingy * test/psych/test_psych.rb: appropriate tests. * test/psych/test_yaml.rb: ditto git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@39144 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--ChangeLog9
-rw-r--r--ext/psych/lib/psych/visitors/yaml_tree.rb17
-rw-r--r--test/psych/test_psych.rb2
-rw-r--r--test/psych/test_yaml.rb11
4 files changed, 28 insertions, 11 deletions
diff --git a/ChangeLog b/ChangeLog
index 54c2b473f7..7300e10709 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+Fri Feb 8 08:53:27 2013 Aaron Patterson <aaron@tenderlovemaking.com>
+
+ * ext/psych/lib/psych/visitors/yaml_tree.rb: fixing string quotation
+ when dumping Ruby strings. Thanks Ingy
+
+ * test/psych/test_psych.rb: appropriate tests.
+
+ * test/psych/test_yaml.rb: ditto
+
Fri Feb 8 08:50:42 2013 Aaron Patterson <aaron@tenderlovemaking.com>
* ext/psych/lib/psych/visitors/yaml_tree.rb: change output reference
diff --git a/ext/psych/lib/psych/visitors/yaml_tree.rb b/ext/psych/lib/psych/visitors/yaml_tree.rb
index 53cbad3e10..6b6a5ffa19 100644
--- a/ext/psych/lib/psych/visitors/yaml_tree.rb
+++ b/ext/psych/lib/psych/visitors/yaml_tree.rb
@@ -253,9 +253,9 @@ module Psych
private :binary?
def visit_String o
- plain = false
- quote = false
- style = Nodes::Scalar::ANY
+ plain = true
+ quote = true
+ style = Nodes::Scalar::PLAIN
tag = nil
str = o
@@ -264,15 +264,14 @@ module Psych
tag = '!binary' # FIXME: change to below when syck is removed
#tag = 'tag:yaml.org,2002:binary'
style = Nodes::Scalar::LITERAL
+ plain = false
+ quote = false
elsif o =~ /\n/
- quote = true
style = Nodes::Scalar::LITERAL
- elsif o =~ /^\W/
- quote = true
- style = Nodes::Scalar::DOUBLE_QUOTED
else
- quote = !(String === @ss.tokenize(o))
- plain = !quote
+ unless String === @ss.tokenize(o)
+ style = Nodes::Scalar::SINGLE_QUOTED
+ end
end
ivars = find_ivars o
diff --git a/test/psych/test_psych.rb b/test/psych/test_psych.rb
index 99866998e0..66b020a09c 100644
--- a/test/psych/test_psych.rb
+++ b/test/psych/test_psych.rb
@@ -20,7 +20,7 @@ class TestPsych < Psych::TestCase
def test_canonical
yml = Psych.dump({:a => {'b' => 'c'}}, {:canonical => true})
- assert_match(/\? ! "b/, yml)
+ assert_match(/\? "b/, yml)
end
def test_header
diff --git a/test/psych/test_yaml.rb b/test/psych/test_yaml.rb
index 5e1ebb4b4b..9891349118 100644
--- a/test/psych/test_yaml.rb
+++ b/test/psych/test_yaml.rb
@@ -1274,7 +1274,16 @@ EOY
def test_string_starting_with_non_word_character_uses_double_quotes_without_exclamation_mark
yaml = Psych.dump("@123'abc")
- assert_match("\"", yaml)
refute_match("!", yaml)
end
+
+ def test_string_dump_with_colon
+ yaml = Psych.dump 'x: foo'
+ refute_match '!', yaml
+ end
+
+ def test_string_dump_starting_with_star
+ yaml = Psych.dump '*foo'
+ refute_match '!', yaml
+ end
end