def display_recursive_open_struct(io, ostrct_or_hash, indent_level, recursion_limit)
if recursion_limit <= 0 then
io.puts ' '*indent_level + '(recursion limit reached)'
else
if ostrct_or_hash.is_a?(self.class) then
ostrct_or_hash = ostrct_or_hash.marshal_dump
end
data_indent = ostrct_or_hash .reject { |k, v| v.is_a?(self.class) || v.is_a?(Hash) } .max {|a,b| a[0].to_s.length <=> b[0].to_s.length}[0].to_s.length
ostrct_or_hash.each do |key, value|
if (value.is_a?(self.class) || value.is_a?(Hash)) then
io.puts ' '*indent_level + key.to_s + '.'
display_recursive_open_struct(io, value, indent_level + 1, recursion_limit - 1)
else
io.puts ' '*indent_level + key.to_s + ' '*(data_indent - key.to_s.length) + ' = ' + value.inspect
end
end
end
true
end