Extended maintenance of Ruby 1.9.3 ended on February 23, 2015. Read more

In Files

  • rubygems/user_interaction.rb

Class/Module Index [+]

Quicksearch

Gem::StreamUI

Gem::StreamUI implements a simple stream based user interface.

Attributes

errs[R]
ins[R]
outs[R]

Public Class Methods

new(in_stream, out_stream, err_stream=STDERR, usetty=true) click to toggle source
 
               # File rubygems/user_interaction.rb, line 131
def initialize(in_stream, out_stream, err_stream=STDERR, usetty=true)
  @ins = in_stream
  @outs = out_stream
  @errs = err_stream
  @usetty = usetty
end
            

Public Instance Methods

alert(statement, question=nil) click to toggle source

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
            
alert_error(statement, question=nil) click to toggle source

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
            
alert_warning(statement, question=nil) click to toggle source

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(question) click to toggle source

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_password(question) click to toggle source

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
            
ask_for_password_on_unix() click to toggle source

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
            
ask_for_password_on_windows() click to toggle source

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_yes_no(question, default=nil) click to toggle source

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_list(question, list) click to toggle source

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
            
debug(statement) click to toggle source

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
            
download_reporter(*args) click to toggle source

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
            
progress_reporter(*args) click to toggle source

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
            
say(statement="") click to toggle source

Display a statement.

 
               # File rubygems/user_interaction.rb, line 290
def say(statement="")
  @outs.puts statement
end
            
terminate_interaction(status = 0) click to toggle source

Terminate the application with exit code status, running any exit handlers that might have been defined.

 
               # File rubygems/user_interaction.rb, line 331
def terminate_interaction(status = 0)
  raise Gem::SystemExitException, status
end
            
tty?() click to toggle source
 
               # File rubygems/user_interaction.rb, line 138
def tty?
  if RUBY_VERSION < '1.9.3' and RUBY_PLATFORM =~ /mingw|mswin/ then
    @usetty
  else
    @usetty && @ins.tty?
  end
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.