Project

General

Profile

Bug #4300

Updated by luislavena (Luis Lavena) over 11 years ago

=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 
 

Back