class Gem::StreamUI

def _gets_noecho

def _gets_noecho
  require_io_console
  @ins.noecho { @ins.gets }
end

def alert(statement, question=nil)

def alert(statement, question=nil)
  @outs.puts "INFO:  #{statement}"
  ask(question) if question
end

def alert_error(statement, question=nil)

def alert_error(statement, question=nil)
  @errs.puts "ERROR:  #{statement}"
  ask(question) if question
end

def alert_warning(statement, question=nil)

def alert_warning(statement, question=nil)
  @errs.puts "WARNING:  #{statement}"
  ask(question) if question
end

def ask(question)

def ask(question)
  return nil if not tty?
  @outs.print(question + "  ")
  @outs.flush
  result = @ins.gets
  result.chomp! if result
  result
end

def ask_for_password(question)

def ask_for_password(question)
  return nil if not tty?
  @outs.print(question, "  ")
  @outs.flush
  password = _gets_noecho
  @outs.puts
  password.chomp! if password
  password
end

def ask_yes_no(question, default=nil)

def ask_yes_no(question, default=nil)
  unless tty?
    if default.nil?
      raise Gem::OperationNotSupportedError,
            "Not connected to a tty and no default specified"
    else
      return default
    end
  end
  default_answer = case default
                   when nil
                     'yn'
                   when true
                     'Yn'
                   else
                     'yN'
                   end
  result = nil
  while result.nil? do
    result = case ask "#{question} [#{default_answer}]"
             when /^y/i then true
             when /^n/i then false
             when /^$/  then default
             else            nil
             end
  end
  return result
end

def backtrace(exception)

def backtrace(exception)
  return unless Gem.configuration.backtrace
  @errs.puts "\t#{exception.backtrace.join "\n\t"}"
end

def choose_from_list(question, list)

def choose_from_list(question, list)
  @outs.puts question
  list.each_with_index do |item, index|
    @outs.puts " #{index + 1}. #{item}"
  end
  @outs.print "> "
  @outs.flush
  result = @ins.gets
  return nil, nil unless result
  result = result.strip.to_i - 1
  return list[result], result
end

def close

def close
end

def download_reporter(*args)

def download_reporter(*args)
  if [nil, false].include?(Gem.configuration.verbose) || !@outs.tty?
    SilentDownloadReporter.new(@outs, *args)
  else
    ThreadedDownloadReporter.new(@outs, *args)
  end
end

def initialize(in_stream, out_stream, err_stream=STDERR, usetty=true)

def initialize(in_stream, out_stream, err_stream=STDERR, usetty=true)
  @ins = in_stream
  @outs = out_stream
  @errs = err_stream
  @usetty = usetty
end

def progress_reporter(*args)

def progress_reporter(*args)
  case Gem.configuration.verbose
  when nil, false
    SilentProgressReporter.new(@outs, *args)
  when true
    SimpleProgressReporter.new(@outs, *args)
  else
    VerboseProgressReporter.new(@outs, *args)
  end
end

def require_io_console

def require_io_console
  @require_io_console ||= begin
    begin
      require 'io/console'
    rescue LoadError
    end
    true
  end
end

def say(statement="")

def say(statement="")
  @outs.puts statement
end

def terminate_interaction(status = 0)

def terminate_interaction(status = 0)
  close
  raise Gem::SystemExitException, status
end

def tty?

def tty?
  @usetty && @ins.tty?
end