class RSpec::Core::Bisect::Coordinator

to the user.
- Formatters::BisectProgressFormatter: provides progress updates
- Bisect::ExampleMinimizer: Contains the core bisect logic.
to the server.
- Bisect::Runner: Runs a set of examples and directs the results
- Bisect::Server: Receives suite results.
The main entry point into the bisect logic. Coordinates among:
@private

def self.bisect_with(original_cli_args, configuration, formatter)

def self.bisect_with(original_cli_args, configuration, formatter)
  new(original_cli_args, configuration, formatter).bisect
end

def bisect

def bisect
  @configuration.add_formatter @formatter
  reporter.close_after do
    repro = Server.run do |server|
      runner    = Runner.new(server, @original_cli_args)
      minimizer = ExampleMinimizer.new(runner, reporter)
      gracefully_abort_on_sigint(minimizer)
      minimizer.find_minimal_repro
      minimizer.repro_command_for_currently_needed_ids
    end
    reporter.publish(:bisect_repro_command, :repro => repro)
  end
  true
rescue BisectFailedError => e
  reporter.publish(:bisect_failed, :failure_explanation => e.message)
  false
end

def gracefully_abort_on_sigint(minimizer)

def gracefully_abort_on_sigint(minimizer)
  trap('INT') do
    repro = minimizer.repro_command_for_currently_needed_ids
    reporter.publish(:bisect_aborted, :repro => repro)
    exit(1)
  end
end

def initialize(original_cli_args, configuration, formatter)

def initialize(original_cli_args, configuration, formatter)
  @original_cli_args = original_cli_args
  @configuration     = configuration
  @formatter         = formatter
end

def reporter

def reporter
  @configuration.reporter
end