based on Hash traverse from Ruby Facets (github.com/rubyworks/facets)
4 5 6 7 8 9 10 11 12 13 14 15 16 17
# File 'lib/layeredyamlconfig/array_traverse.rb', line 4 def traverse(&blk) na = [] inject(na) do |a, e| case e when Hash e = e.traverse(&blk) when Array e = e.traverse(&blk) end ne = blk.call(e) a.push ne a end end