require 'indented_io' module MetaDb class DbObject def dump puts self.class.to_s dump_attrs end def dump_attrs(*attrs) attrs = Array(attrs) attrs = self.class.attrs if attrs.empty? indent { for attr in Array(attrs) value = self.send(attr) case value when Array puts "#{attr}:" indent { value.each { |v| v.dump } } when DbObject puts "#{attr}: #{value.name} (#{value.class})" else puts "#{attr}: #{self.send(attr).inspect}" end end } end end end