>
>Hi
>
>Another idea would be to use the latest CVS version of RbYAML to do it 
>like this, where data is a string or IO to the YAML data:
>
>require 'ostruct'
>require 'rbyaml'
>
>RbYAML.add_builtin_ctor("map") {|ctor,node|
>   OpenStruct.new(ctor.construct_mapping(node))
>}
>
>RbYAML.load(data)
>
>This dosn't really work for mentalguys problem, since RbYAML doesn't 
>support recursive nodes right now.
>
>Regards
>  Ola Bini

Correction, CVS RbYAML now handles recursive structures enough to handle 
mentalguys problem too.

Another thing that will not work correctly, though, is this map:
---
x: 1
y: 2
z: 3

because the 'y' will be translated to a boolean true, per the YAML spec, 
but OpenStruct tries to call to_sym on the keys, which boolean doesn't handle.
The easiest fix is to class TrueClass; def to_sym; :true end; end and class 
FalseClass; def to_sym; :false end; end
but then this will actually become a struct that looks like this:
#<OpenStruct z=3, x=1, true=2>

which isn't totally obvious.

/O