Extended maintenance of Ruby versions 1.8.7 and 1.9.2 ended on July 31, 2014. Read more
Object
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 275 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 293 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 284 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 @ins.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 224 def ask_for_password(question) return nil if not @ins.tty? @outs.print(question + " ") @outs.flush Gem.win_platform? ? ask_for_password_on_windows : ask_for_password_on_unix end
Asks for a password that works on unix
# File rubygems/user_interaction.rb, line 257 def ask_for_password_on_unix 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 236 def ask_for_password_on_windows 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 169 def ask_yes_no(question, default=nil) unless @ins.tty? then if default.nil? then raise Gem::OperationNotSupportedError, "Not connected to a tty and no default specified" else return default end end qstr = case default when nil 'yn' when true 'Yn' else 'yN' end result = nil while result.nil? result = ask("#{question} [#{qstr}]") result = case result when /^[Yy].*/ true when /^[Nn].*/ false when /^$/ 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 146 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 301 def debug(statement) @errs.puts statement end
Return a progress reporter object chosen from the current verbosity.
# File rubygems/user_interaction.rb, line 316 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