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.