OpenStruct subclass that returns nested hash attributes as RecursiveOpenStructs
Description
RecursiveOpenStruct is a subclass of OpenStruct. It differs from
OpenStruct in that it allows nested hashes to be treated in a recursive
fashion. For example:
ros = RecursiveOpenStruct.new({ :a => { :b => 'c' } })
ros.a.b # 'c'
Also, nested hashes can still be accessed as hashes:
ros.a_as_a_hash # { :b => 'c' }.