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