class RSpec::Core::ExampleStatusDumper

@private
set of keys.
keys and string values, and each hash should have the same
for later parsing. The hashes are expected to have symbol
Dumps a list of hashes in a pretty, human readable format

def self.dump(examples)

def self.dump(examples)
  new(examples).dump
end

def column_widths

def column_widths
  @column_widths ||= begin
    value_sets = rows.transpose
    headers.each_with_index.map do |header, index|
      values = value_sets[index] << header.to_s
      values.map(&:length).max
    end
  end
end

def dump

def dump
  return nil if @examples.empty?
  (formatted_header_rows + formatted_value_rows).join("\n") << "\n"
end

def formatted_header_rows

def formatted_header_rows
  @formatted_header_rows ||= begin
    dividers = column_widths.map { |w| "-" * w }
    [formatted_row_from(headers.map(&:to_s)), formatted_row_from(dividers)]
  end
end

def formatted_row_from(row_values)

def formatted_row_from(row_values)
  padded_values = row_values.each_with_index.map do |value, index|
    value.ljust(column_widths[index])
  end
  padded_values.join(" | ") << " |"
end

def formatted_value_rows

def formatted_value_rows
  @formatted_value_rows ||= rows.map do |row|
    formatted_row_from(row)
  end
end

def headers

def headers
  @headers ||= @examples.first.keys
end

def initialize(examples)

def initialize(examples)
  @examples = examples
end

def rows

def rows
  @rows ||= @examples.map { |ex| ex.values_at(*headers) }
end