Gem::StreamUI implements a simple stream based user interface.
Display an informational alert. Will ask question if it is
not nil.
# File rubygems/user_interaction.rb, line 307
def alert(statement, question=nil)
@outs.puts "INFO: #{statement}"
ask(question) if question
end
Display an error message in a location expected to get error messages. Will
ask question if it is not nil.
# File rubygems/user_interaction.rb, line 325
def alert_error(statement, question=nil)
@errs.puts "ERROR: #{statement}"
ask(question) if question
end
Display a warning in a location expected to get error messages. Will ask
question if it is not nil.
# File rubygems/user_interaction.rb, line 316
def alert_warning(statement, question=nil)
@errs.puts "WARNING: #{statement}"
ask(question) if question
end
Ask a question. Returns an answer if connected to a tty, nil otherwise.
# File rubygems/user_interaction.rb, line 220
def ask(question)
return nil if not tty?
@outs.print(question + " ")
@outs.flush
result = @ins.gets
result.chomp! if result
result
end
Ask for a password. Does not echo response to terminal.
# File rubygems/user_interaction.rb, line 235
def ask_for_password(question)
return nil if not tty?
require 'io/console'
@outs.print(question + " ")
@outs.flush
password = @ins.noecho {@ins.gets}
password.chomp! if password
password
end
Asks for a password that works on unix
# File rubygems/user_interaction.rb, line 286
def ask_for_password_on_unix
return nil if not tty?
system "stty -echo"
password = @ins.gets
password.chomp! if password
system "stty echo"
password
end
Asks for a password that works on windows. Ripped from the Heroku gem.
# File rubygems/user_interaction.rb, line 263
def ask_for_password_on_windows
return nil if not tty?
require "Win32API"
char = nil
password = ''
while char = Win32API.new("crtdll", "_getch", [ ], "L").Call do
break if char == 10 || char == 13 # received carriage return or newline
if char == 127 || char == 8 # backspace and delete
password.slice!(-1, 1)
else
password << char.chr
end
end
puts
password
end
Ask a question. Returns a true for yes, false for no. If not connected to a tty, raises an exception if default is nil, otherwise returns default.
# File rubygems/user_interaction.rb, line 184
def ask_yes_no(question, default=nil)
unless tty? then
if default.nil? then
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/ then true
when /^n/ then false
when /^$/ then default
else nil
end
end
return result
end
Prints a formatted backtrace to the errors stream if backtraces are enabled.
# File rubygems/user_interaction.rb, line 150
def backtrace exception
return unless Gem.configuration.backtrace
@errs.puts "\t#{exception.backtrace.join "\n\t"}"
end
Choose from a list of options. question is a prompt displayed
above the list. list is a list of option strings. Returns
the pair [option_name, option_index].
# File rubygems/user_interaction.rb, line 161
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
Display a debug message on the same location as error messages.
# File rubygems/user_interaction.rb, line 333
def debug(statement)
@errs.puts statement
end
Return a download reporter object chosen from the current verbosity
# File rubygems/user_interaction.rb, line 454
def download_reporter(*args)
if self.kind_of?(Gem::SilentUI)
return SilentDownloadReporter.new(@outs, *args)
end
case Gem.configuration.verbose
when nil, false
SilentDownloadReporter.new(@outs, *args)
else
VerboseDownloadReporter.new(@outs, *args)
end
end
Return a progress reporter object chosen from the current verbosity.
# File rubygems/user_interaction.rb, line 348
def progress_reporter(*args)
if self.kind_of?(Gem::SilentUI)
return SilentProgressReporter.new(@outs, *args)
end
case Gem.configuration.verbose
when nil, false
SilentProgressReporter.new(@outs, *args)
when true
SimpleProgressReporter.new(@outs, *args)
else
VerboseProgressReporter.new(@outs, *args)
end
end
Display a statement.
# File rubygems/user_interaction.rb, line 300
def say(statement="")
@outs.puts statement
end