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