friendly nested hashes in ruby

get the code. so basically, i built:

Hash#deep_clone
Hash#multilevel_keys
Hash#get_value_at_multilevel_key
Hash#set_value_at_multilevel_key
Hash#multilevel_merge!
Hash#multilevel_merge
Hash#multilevel_reverse_merge!
Hash#multilevel_reverse_merge

so what’s multilevel? maybe i should call it “nested” instead. oh well, too late now. how’s it work??

the primitives:

>> h = {'a' => {'b' => {'c' => 1}}, 'd' => 2, 'e' => 3}
=> {"a"=>{"b"=>{"c"=>1}}, "d"=>2, "e"=>3}
>> h.multilevel_keys
=> ["a.b.c", "d", "e"]
>> h['a']['b']['c']
=> 1
>> h.get_value_at_multilevel_key 'a.b.c'
=> 1
>> h['a']['b']['c'] = 2
=> 2
>> h.get_value_at_multilevel_key 'a.b.c'
=> 2
>> h.set_value_at_multilevel_key 'a.b.c', 3
=> 3
>> h['a']['b']['c']
=> 3

more advanced, built atop the primitives:

# merge
>> j = h.multilevel_merge 'a.b.c' => 99
=> {"a"=>{"b"=>{"c"=>99}}, "d"=>2, "e"=>3}

# reverse merge
>> j = h.multilevel_reverse_merge 'a.b.c' => 99
=> {"a"=>{"b"=>{"c"=>3}}, "d"=>2, "e"=>3}

so, if you had a multilevel hash, now it’s easy to index into it, and merge new parameters into it without doing lots of nested stuff.


About this entry