class Cucumber::Cli::Main

def configuration

def configuration
  return @configuration if @configuration
  @configuration = Configuration.new(@out_stream, @error_stream)
  @configuration.parse!(@args)
  Cucumber.logger = @configuration.log
  @configuration
end

def execute(args)

def execute(args)
  new(args).execute!
end

def execute!(legacy_step_mother = nil)

def execute!(legacy_step_mother = nil)
  if legacy_step_mother
    warn("Passing a step_mother to #execute! is deprecated, and has been ignored: #{caller[0]}")
  end
  trap_interrupt
  return @drb_output if run_drb_client
  
  runtime = Runtime.new(configuration)
  runtime.run!
  runtime.results.failure?
rescue ProfilesNotDefinedError, YmlLoadError, ProfileNotFound => e
  @error_stream.puts e.message
  true
end

def initialize(args, out_stream = STDOUT, error_stream = STDERR)

def initialize(args, out_stream = STDOUT, error_stream = STDERR)
  @args         = args
  if Cucumber::WINDOWS_MRI
    @out_stream   = out_stream == STDOUT ? Formatter::ColorIO.new(Kernel, STDOUT) : out_stream
  else
    @out_stream   = out_stream
  end
  @error_stream = error_stream
  @configuration = nil
end

def run_drb_client

def run_drb_client
  return false unless configuration.drb?
  @drb_output = DRbClient.run(@args, @error_stream, @out_stream, configuration.drb_port)
  true
rescue DRbClientError => e
  @error_stream.puts "WARNING: #{e.message} Running features locally:"
end

def trap_interrupt

def trap_interrupt
  trap('INT') do
    exit!(1) if Cucumber.wants_to_quit
    Cucumber.wants_to_quit = true
    STDERR.puts "\nExiting... Interrupt again to exit immediately."
  end
end