Class: Hash
- Inherits:
-
Object
- Object
- Hash
- Defined in:
- lib/toolshed/hash.rb
Direct Known Subclasses
Instance Method Summary collapse
-
#to_ostruct ⇒ Object
Recursively converts a
Hash
and all nestedHash
es toOpenStruct
s.
Instance Method Details
#to_ostruct ⇒ Object
Recursively converts a Hash
and all nested Hash
es to OpenStruct
s. Especially useful for parsing YAML.
yaml="subject: Programming Languages\nlanguages:\n - name : Ruby\n creator : Matz\n - name : Python\n creator : Guido van Rossum\n - name : Perl\n creator : Larry Wall\n"
struct = YAML.load(yaml).to_ostruct
struct.subject
#=> "Programming Languages"
struct.languages.first
#=> #<OpenStruct name="Ruby", creator="Matz">
struct.languages.first.creator
#=> "Matz"
23 24 25 26 27 28 29 30 31 32 33 34 35 |
# File 'lib/toolshed/hash.rb', line 23 def to_ostruct arr = map do |k, v| case v when Hash [k, v.to_ostruct] when Array [k, v.map { |el| el.respond_to?(:to_ostruct) ? el.to_ostruct : el }] else [k, v] end end OpenStruct.new(Hash[arr]) end |