class RSpecQueue::Formatter

Public Class Methods

new(output) click to toggle source
Calls superclass method
# File lib/rspec_queue/formatter.rb, line 9
def initialize(output)
  super
  @output = output
  @failed_examples = []
end

Public Instance Methods

dump_failures(_summary) click to toggle source
# File lib/rspec_queue/formatter.rb, line 46
def dump_failures(_summary)
  # no-op because we already printed failures once
end
dump_pending(_notification) click to toggle source
# File lib/rspec_queue/formatter.rb, line 50
def dump_pending(_notification)
  # no-op because we already printed failures once
end
dump_summary(summary) click to toggle source
# File lib/rspec_queue/formatter.rb, line 25
def dump_summary(summary)
  colorizer = RSpec::Core::Formatters::ConsoleCodes

  results_output = [
    "Finished in #{summary.formatted_duration}",
    "(files took #{summary.formatted_load_time} to load)",
    "#{summary.colorized_totals_line}"
  ].join("\n")

  slowest_examples = summary.examples.sort_by { |e| e[:run_time] }.reverse[0..4]
  slowest_example_output = formatted_slowest_examples(slowest_examples, summary.duration, colorizer)

  summary_output = [
    results_output,
    "Top 5 slowest examples:",
    slowest_example_output
  ].join("\n")

  @output.puts summary_output
end
example_failed(failure) click to toggle source
# File lib/rspec_queue/formatter.rb, line 15
def example_failed(failure)
  @failed_examples << failure.example
  @output.puts failure.fully_formatted(@failed_examples.size)
end
example_pending(pending) click to toggle source
# File lib/rspec_queue/formatter.rb, line 20
def example_pending(pending)
  @output.puts "\nPending: #{RSpec::Core::Formatters::ConsoleCodes.wrap(pending.example.metadata[:execution_result].pending_message, :yellow)}"
  @output.puts "  #{RSpec::Core::Formatters::ConsoleCodes.wrap(pending.example.metadata[:location], :cyan)}\n"
end

Private Instance Methods

cpu_count() click to toggle source
# File lib/rspec_queue/formatter.rb, line 65
def cpu_count
  RSpecQueue::Configuration.instance.worker_count
end
formatted_slowest_examples(slowest_examples, total_duration, colorizer) click to toggle source
# File lib/rspec_queue/formatter.rb, line 56
def formatted_slowest_examples(slowest_examples, total_duration, colorizer)
  slowest_examples.map { |e|
    location = colorizer.wrap(e[:location], colorizer.console_code_for(:yellow))
    impact_on_build = run_time_impact(e[:run_time], total_duration, colorizer)
    example_information = colorizer.wrap("took #{e[:run_time].round(2)}s, impact on build time is", colorizer.console_code_for(:cyan))
    "#{location} #{example_information} #{impact_on_build}"
  }.join("\n")
end
run_time_impact(example_run_time, total_duration, colorizer) click to toggle source
# File lib/rspec_queue/formatter.rb, line 69
def run_time_impact(example_run_time, total_duration, colorizer)
  overall_impact_in_seconds = (example_run_time / cpu_count).round(2)
  percentage_of_run_time = (example_run_time / (total_duration * cpu_count) * 100).round(1)

  if overall_impact_in_seconds == Float::INFINITY
    "negligible"
  else
    colorizer.wrap("#{overall_impact_in_seconds}s (#{percentage_of_run_time}%)", colorizer.console_code_for(:white))
  end
end