Class: Gem::StreamUI
Relationships & Source Files | |
Namespace Children | |
Classes:
| |
Extension / Inclusion / Inheritance Descendants | |
Subclasses:
|
|
Super Chains via Extension / Inclusion / Inheritance | |
Class Chain:
self,
Deprecate
|
|
Inherits: | Object |
Defined in: | lib/rubygems/user_interaction.rb |
Overview
StreamUI
implements a simple stream based user interface.
Class Method Summary
-
.new(in_stream, out_stream, err_stream = $stderr, usetty = true) ⇒ StreamUI
constructor
Creates a new
StreamUI
wrappingin_stream
for user input,out_stream
for standard output,err_stream
for error output.
Deprecate
- Extended
deprecate | Simple deprecation method that deprecates |
rubygems_deprecate | Simple deprecation method that deprecates |
rubygems_deprecate_command | Deprecation method to deprecate Rubygems commands. |
skip_during | Temporarily turn off warnings. |
Instance Attribute Summary
-
#errs
readonly
The error stream.
-
#ins
readonly
The input stream.
-
#outs
readonly
The output stream.
-
#tty? ⇒ Boolean
readonly
Returns true if TTY methods should be used on this
StreamUI
.
Instance Method Summary
- #_gets_noecho
-
#alert(statement, question = nil)
Display an informational alert.
-
#alert_error(statement, question = nil)
Display an error message in a location expected to get error messages.
-
#alert_warning(statement, question = nil)
Display a warning on stderr.
-
#ask(question)
Ask a question.
-
#ask_for_password(question)
Ask for a password.
-
#ask_yes_no(question, default = nil)
Ask a question.
-
#backtrace(exception)
Prints a formatted backtrace to the errors stream if backtraces are enabled.
-
#choose_from_list(question, list)
Choose from a list of options.
- #close
-
#download_reporter(*args)
Return a download reporter object chosen from the current verbosity.
-
#progress_reporter(*args)
Return a progress reporter object chosen from the current verbosity.
- #require_io_console
-
#say(statement = "")
Display a statement.
-
#terminate_interaction(status = 0)
Terminate the application with exit code
status
, running any exit handlers that might have been defined.
Constructor Details
.new(in_stream, out_stream, err_stream = $stderr, usetty = true) ⇒ StreamUI
Creates a new StreamUI
wrapping in_stream
for user input, out_stream
for standard output, err_stream
for error output. If usetty
is true then special operations (like asking for passwords) will use the TTY commands to disable character echo.
# File 'lib/rubygems/user_interaction.rb', line 196
def initialize(in_stream, out_stream, err_stream=$stderr, usetty=true) @ins = in_stream @outs = out_stream @errs = err_stream @usetty = usetty end
Instance Attribute Details
#errs (readonly)
The error stream
# File 'lib/rubygems/user_interaction.rb', line 188
attr_reader :errs
#ins (readonly)
The input stream
# File 'lib/rubygems/user_interaction.rb', line 178
attr_reader :ins
#outs (readonly)
The output stream
# File 'lib/rubygems/user_interaction.rb', line 183
attr_reader :outs
#tty? ⇒ Boolean
(readonly)
Returns true if TTY methods should be used on this StreamUI
.
# File 'lib/rubygems/user_interaction.rb', line 206
def tty? @usetty && @ins.tty? end
Instance Method Details
#_gets_noecho
[ GitHub ]# File 'lib/rubygems/user_interaction.rb', line 320
def _gets_noecho require_io_console @ins.noecho { @ins.gets } end
#alert(statement, question = nil)
Display an informational alert. Will ask question
if it is not nil.
# File 'lib/rubygems/user_interaction.rb', line 335
def alert(statement, question=nil) @outs.puts "INFO: #{statement}" ask(question) if question end
#alert_error(statement, question = nil)
Display an error message in a location expected to get error messages. Will ask question
if it is not nil.
# File 'lib/rubygems/user_interaction.rb', line 352
def alert_error(statement, question=nil) @errs.puts "ERROR: #{statement}" ask(question) if question end
#alert_warning(statement, question = nil)
Display a warning on stderr. Will ask question
if it is not nil.
# File 'lib/rubygems/user_interaction.rb', line 343
def alert_warning(statement, question=nil) @errs.puts "WARNING: #{statement}" ask(question) if question end
#ask(question)
Ask a question. Returns an answer if connected to a tty, nil otherwise.
# File 'lib/rubygems/user_interaction.rb', line 284
def ask(question) return nil unless tty? @outs.print(question + " ") @outs.flush result = @ins.gets result&.chomp! result end
#ask_for_password(question)
Ask for a password. Does not echo response to terminal.
# File 'lib/rubygems/user_interaction.rb', line 298
def ask_for_password(question) return nil unless tty? @outs.print(question, " ") @outs.flush password = _gets_noecho @outs.puts password&.chomp! password end
#ask_yes_no(question, default = nil)
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 'lib/rubygems/user_interaction.rb', line 249
def ask_yes_no(question, default=nil) unless tty? if default.nil? 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 end end result end
#backtrace(exception)
Prints a formatted backtrace to the errors stream if backtraces are enabled.
# File 'lib/rubygems/user_interaction.rb', line 214
def backtrace(exception) return unless Gem.configuration.backtrace @errs.puts "\t#{exception.backtrace.join "\n\t"}" end
#choose_from_list(question, list)
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 'lib/rubygems/user_interaction.rb', line 225
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 nil, nil unless (0...list.size) === result [list[result], result] end
#close
[ GitHub ]# File 'lib/rubygems/user_interaction.rb', line 366
def close end
#download_reporter(*args)
Return a download reporter object chosen from the current verbosity
# File 'lib/rubygems/user_interaction.rb', line 499
def download_reporter(*args) if [nil, false].include?(Gem.configuration.verbose) || !@outs.tty? SilentDownloadReporter.new(@outs, *args) else ThreadedDownloadReporter.new(@outs, *args) end end
#progress_reporter(*args)
Return a progress reporter object chosen from the current verbosity.
# File 'lib/rubygems/user_interaction.rb', line 372
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
#require_io_console
[ GitHub ]# File 'lib/rubygems/user_interaction.rb', line 310
def require_io_console @require_io_console ||= begin begin require "io/console" rescue LoadError end true end end
#say(statement = "")
Display a statement.
# File 'lib/rubygems/user_interaction.rb', line 328
def say(statement="") @outs.puts statement end
#terminate_interaction(status = 0)
Terminate the application with exit code status
, running any exit handlers that might have been defined.
# File 'lib/rubygems/user_interaction.rb', line 361
def terminate_interaction(status = 0) close raise Gem::SystemExitException, status end