Bug #4300
closedMerge keys not working as expected in psych yaml parser
Description
=begin
Psych doesn't seem to support merge keys ( http://yaml.org/type/merge.html ) with alias/anchor the same way that syck does. I'm not sure if this is intentional or not, but its a pretty useful behavior so I'm filing a bug. Basically, while psych does allow one to use a merge key to pull a aliased mapping into another mapping, it does not allow one to add other items to that mapping. Very frequently I have a map that is mostly in common amongst a number of keys, with a subkey that differs, and this bug makes it impossible to achieve this behavior with psych.
For the yaml snippet below:
foo: &foo
hello: world
bar:
<< : *foo
baz: boo
syck produces: {"foo"=>{"hello"=>"world"}, "bar"=>{"hello"=>"world", "baz"=>"boo"}}
psych produces: {"foo"=>{"hello"=>"world"}, "bar"=>{"hello"=>"world"}}
Note that in the yaml 1.1 spec ( http://yaml.org/spec/1.1/#id902561 ) it says "Note that an alias node must not specify any properties or content, as these were already specified at the first occurrence of the node.", however I think this should only apply when doing something like "bar: *foo". When using a merge key, you are creating a new node (which you don't add to), but merging it into a different mapping node - which you should be able to add to.
For reference, also submitted at https://github.com/tenderlove/psych/issues#issue/8/comment/693341
=end
Updated by naruse (Yui NARUSE) almost 14 years ago
- Category changed from core to ext
- Status changed from Open to Assigned
- Assignee set to tenderlovemaking (Aaron Patterson)
=begin
=end
Updated by Anonymous almost 14 years ago
- Status changed from Assigned to Closed
- % Done changed from 0 to 100
=begin
This issue was solved with changeset r30629.
Matthew, thank you for reporting this issue.
Your contribution to Ruby is greatly appreciated.
May Ruby be with you.
- ext/psych/lib/psych/visitors/to_ruby.rb: merge keys are actually
part of YAML 1.1, so they should be supported. Remove warning and
merge keys to parent. [ruby-core:34679] - test/psych/test_merge_keys.rb: test for merge keys
=end
Updated by wr0ngway (Matthew Conway) over 13 years ago
=begin
Thanks!
Do I have to do anything special to get this backported to 1.9.2?
=end
Updated by tenderlovemaking (Aaron Patterson) over 13 years ago
=begin
On Wed, Feb 02, 2011 at 10:05:55AM +0900, Matthew Conway wrote:
Issue #4300 has been updated by Matthew Conway.
Thanks!
Do I have to do anything special to get this backported to 1.9.2?
I don't think so. I've filed a ticket to backport the merge key fixes
here:
http://redmine.ruby-lang.org/issues/show/4357
--
Aaron Patterson
http://tenderlovemaking.com/
Attachment: (unnamed)
=end
Updated by firedev (Nick O) almost 12 years ago
Sorry but this isn't fixed as of Ruby 1.9.3p374 (2013-01-15 revision 38858)
https://github.com/tenderlove/psych/issues/8#issuecomment-12541499
Updated by luislavena (Luis Lavena) almost 12 years ago
- Description updated (diff)
firedev (Nick O) wrote:
Sorry but this isn't fixed as of Ruby 1.9.3p374 (2013-01-15 revision 38858)
https://github.com/tenderlove/psych/issues/8#issuecomment-12541499
This is not backported to 1.9.3, this is fixed in trunk.
Please submit a backport request indicating the original issue, the revisions that needs to be backported and assign to usa.
Thank you.