class Vernier::Output::Top::Table

def <<(row)

def <<(row)
  @rows << row
end

def format_row(row)

def format_row(row)
  "|" + row.map.with_index { |str, i| " " + str.ljust(widths[i] + 1) }.join("|") + "|"
end

def initialize(header)

def initialize(header)
  @header = header
  @rows = []
  yield self
end

def row_separator

def row_separator
  @row_separator = "+" + widths.map { |i| "-" * (i + 2) }.join("+") + "+"
end

def to_s

def to_s
  (
    [
      row_separator,
      format_row(@header),
      row_separator
    ] + @rows.map do |row|
      format_row(row)
    end + [row_separator]
  ).join("\n")
end

def widths

def widths
  @widths ||=
    (@rows + [@header]).transpose.map do |col|
      col.map(&:size).max
    end
end