Extended maintenance of Ruby 1.9.3 ended on February 23, 2015. Read more
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 297
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 315
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 306
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 210
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 225
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 276
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 253
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 174
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/i then true
when /^n/i then false
when /^$/ then default
else nil
end
end
return result
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 151
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 323
def debug(statement)
@errs.puts statement
end
Return a download reporter object chosen from the current verbosity
# File rubygems/user_interaction.rb, line 444
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 338
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 290
def say(statement="")
@outs.puts statement
end
Commenting is here to help enhance the documentation. For example, code samples, or clarification of the documentation.
If you have questions about Ruby or the documentation, please post to one of the Ruby mailing lists. You will get better, faster, help that way.
If you wish to post a correction of the docs, please do so, but also file bug report so that it can be corrected for the next release. Thank you.
If you want to help improve the Ruby documentation, please visit Documenting-ruby.org.