Hi,
I’m looking for a workaround for the problem that you can’t
roundtrip a Hash with an OrderedHash as a key. This is probably due to
bug Backport #1331: YAML misformats hash with ruby object as key - Backport187 - Ruby Issue Tracking System. The simplest
demonstration,
using Ruby Enterprise 2011.03 (1.8.7 p334), ActiveSupport 3.0.4:
foo = {ActiveSupport::OrderedHash[‘x’, ‘y’] => ‘z’}
=> {#<OrderedHash {“x”=>“y”}>=>“z”}
YAML.dump(foo)
=> “— \n!omap ? \n - x: y\n: z\n\n”
The YAML that was dumped here is wrong. It should have been:
“— \n? !omap \n - x: y\n: z\n\n”
To demonstrate:
YAML.load(“— \n!omap ? \n - x: y\n: z\n\n”)
ArgumentError: syntax error on line 2, col -1: ` - x: y
: z
’
YAML.load(“— \n? !omap \n - x: y\n: z\n\n”)
=> {#<OrderedHash {“x”=>“y”}>=>“z”}
Does anyone know a workaround
for this. I’ve been looking into the sources, but I fear it will take me
a while to figure it all out and perhaps someone here has a solution at
hand? YAML Bug - can't round-trip a hash value with leading newlines - Ruby - Ruby-Forum may be related
Edit: This problem does not occur in JRuby 1.5.6, but JRuby has it’s own
YAML library, so that makes sense.