class ParallelSpecs::SpecFailuresLogger

def dump_commands_to_rerun_failed_examples_rspec_1

def dump_commands_to_rerun_failed_examples_rspec_1
  (@failed_examples||[]).each do |example|
    file, line = example.location.to_s.split(':')
    next unless file and line
    file.gsub!(%r(^.*?/spec/), './spec/')
    @output.puts "#{ParallelSpecs.executable} #{file}:#{line} # #{example.description}"
  end
end

def dump_failure(*args)

RSpec 1: dumps 1 failed spec
def dump_failure(*args)
end

def dump_failures(*args)

RSpec 2: dumps all failed specs
def dump_failures(*args)
end

def dump_summary(*args)

def dump_summary(*args)
  lock_output do
    if RSPEC_1
      dump_commands_to_rerun_failed_examples_rspec_1
    else
      dump_commands_to_rerun_failed_examples
    end
  end
  @output.flush
end

def example_failed(example, *args)

RSpec 1: does not keep track of failures, so we do
def example_failed(example, *args)
  if RSPEC_1
    @failed_examples ||= []
    @failed_examples << example
  else
    super
  end
end