Sha256: 8b275f358d9bb875dc56fdcc64ee3e8c5e08ddf050ea5c33eed17c1e330048f1

Contents?: true

Size: 1.28 KB

Versions: 1

Compression:

Stored size: 1.28 KB

Contents

require 'indented_io'

require 'meta_db/db_object'

module MetaDb
  class DbObject 
    def dump(short = false)
      puts self.class.to_s
      dump_attrs(short)
    end
    
    def dump_attrs(short, *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
              if value.first.is_a?(Symbol)
                puts "#{attr}: #{value.inspect}"
              else
                if short
                  puts "#{attr}: [#{value.map(&:name).join(", ")}]"
                else
                  puts "#{attr}: "
                  indent { value.each { |v| v.dump } }
                end
              end
            when Hash
              if short
                puts "#{attr}: [#{value.values.map(&:name).join(", ")}]"
              else
                puts "#{attr}: "
                indent { value.values.each { |v| v.dump } }
              end
            when DbObject
              puts "#{attr}: #{value.name} (#{value.class})"
          else
            puts "#{attr}: #{self.send(attr).inspect}"
          end
        end
      }
    end
  end

  class Constraint < DbObject
    def dump(short = true) 
      super(short)
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
meta_db-0.2.0 lib/meta_db/dump.rb