class RspecOverview::Formatter

Attributes

output[R]

Public Class Methods

new(output) click to toggle source
# File lib/rspec_overview/formatter.rb, line 9
def initialize(output)
  @output = output
end

Public Instance Methods

dump_summary(summary) click to toggle source
# File lib/rspec_overview/formatter.rb, line 13
def dump_summary(summary)
  summarize_by_type(summary.examples)
  summarize_by_file(summary.examples)
end

Private Instance Methods

extract_subfolder(file_path) click to toggle source
# File lib/rspec_overview/formatter.rb, line 54
def extract_subfolder(file_path)
  file_path.slice(/.\/[^\/]+\/[^\/]+/)
end
output_format() click to toggle source
# File lib/rspec_overview/formatter.rb, line 65
def output_format
  RspecOverview::Output::MarkdownTable
end
results_as_rows(results) click to toggle source
# File lib/rspec_overview/formatter.rb, line 58
def results_as_rows(results)
  results.values
    .sort_by(&:duration_raw)
    .reverse_each
    .map(&:to_a)
end
summarize_by(column_name, examples) { |example| ... } click to toggle source
# File lib/rspec_overview/formatter.rb, line 32
def summarize_by(column_name, examples)
  results = {}

  examples.each do |example|
    identifier = yield(example) || "none"
    results[identifier] ||= Result.new(identifier)
    results[identifier].example_count += 1
    results[identifier].duration_raw += example.execution_result.run_time
  end

  headings = [
    column_name, "Example count", "Duration (s)", "Average per example (s)"
  ]

  output.puts "\n# Summary by #{column_name}\n\n"
  output.puts output_format.new(
    headings: headings,
    rows: results_as_rows(results),
  )
  output.puts "\n"
end
summarize_by_file(examples) click to toggle source
# File lib/rspec_overview/formatter.rb, line 28
def summarize_by_file(examples)
  summarize_by("File", examples) { |example| example.file_path }
end
summarize_by_type(examples) click to toggle source
# File lib/rspec_overview/formatter.rb, line 22
def summarize_by_type(examples)
  summarize_by("Type or Subfolder", examples) do |example|
    example.metadata[:type] || extract_subfolder(example.file_path)
  end
end