1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

* ext/psych/lib/psych/visitors/to_ruby.rb: quoted "<<" strings

should not be treated as merge keys.
* ext/psych/lib/psych/visitors/yaml_tree.rb: hashes with keys
  containing "<<" should roundtrip.
* test/psych/test_merge_keys.rb: test for change. Fixes GH #203

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@47315 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
tenderlove 2014-08-29 21:02:19 +00:00
parent 7df9a77da1
commit 7a5dedf25c
4 changed files with 36 additions and 1 deletions

View file

@ -1,3 +1,11 @@
Sat Aug 30 06:00:26 2014 Aaron Patterson <aaron@tenderlovemaking.com>
* ext/psych/lib/psych/visitors/to_ruby.rb: quoted "<<" strings
should not be treated as merge keys.
* ext/psych/lib/psych/visitors/yaml_tree.rb: hashes with keys
containing "<<" should roundtrip.
* test/psych/test_merge_keys.rb: test for change. Fixes GH #203
Fri Aug 29 17:56:44 2014 SHIBATA Hiroshi <shibata.hiroshi@gmail.com>
* test/net/imap/test_imap_response_parser.rb: removed needless code.

View file

@ -305,7 +305,7 @@ module Psych
key = accept(k)
val = accept(v)
if key == '<<'
if key == '<<' && k.tag != "tag:yaml.org,2002:str"
case v
when Nodes::Alias
begin

View file

@ -16,10 +16,12 @@ module Psych
def initialize
@obj_to_id = {}
@obj_to_node = {}
@targets = []
@counter = 0
end
def register target, node
@targets << target
@obj_to_node[target.object_id] = node
end
@ -289,6 +291,11 @@ module Psych
quote = false
elsif o =~ /\n/
style = Nodes::Scalar::LITERAL
elsif o == '<<'
style = Nodes::Scalar::SINGLE_QUOTED
tag = 'tag:yaml.org,2002:str'
plain = false
quote = false
elsif o =~ /^\W[^"]*$/
style = Nodes::Scalar::DOUBLE_QUOTED
else

View file

@ -6,6 +6,26 @@ module Psych
attr_reader :bar
end
def test_roundtrip_with_chevron_key
h = {}
v = { 'a' => h, '<<' => h }
assert_cycle v
end
def test_explicit_string
doc = Psych.load <<-eoyml
a: &me { hello: world }
b: { !!str '<<': *me }
eoyml
expected = {
"a" => { "hello" => "world" },
"b" => {
"<<" => { "hello" => "world" }
}
}
assert_equal expected, doc
end
def test_mergekey_with_object
s = <<-eoyml
foo: &foo