Class | Gem::StreamUI |
In: |
lib/rubygems/user_interaction.rb
|
Parent: | Object |
StreamUI implements a simple stream based user interface.
errs | [R] | |
ins | [R] | |
outs | [R] |
# File lib/rubygems/user_interaction.rb, line 87 87: def initialize(in_stream, out_stream, err_stream=STDERR) 88: @ins = in_stream 89: @outs = out_stream 90: @errs = err_stream 91: end
Display an error message in a location expected to get error messages.
# File lib/rubygems/user_interaction.rb, line 180 180: def alert_error(statement, question=nil) 181: @errs.puts "ERROR: #{statement}" 182: ask(question) if question 183: end
Display a warning in a location expected to get error messages.
# File lib/rubygems/user_interaction.rb, line 173 173: def alert_warning(statement, question=nil) 174: @errs.puts "WARNING: #{statement}" 175: ask(question) if question 176: end
Ask a question. Returns an answer if connected to a tty, nil otherwise.
# File lib/rubygems/user_interaction.rb, line 152 152: def ask(question) 153: return nil if not @ins.tty? 154: @outs.print(question + " ") 155: @outs.flush 156: result = @ins.gets 157: result.chomp! if result 158: result 159: 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 lib/rubygems/user_interaction.rb, line 115 115: def ask_yes_no(question, default=nil) 116: if not @ins.tty? then 117: if default.nil? then 118: raise( 119: Gem::OperationNotSupportedError, 120: "Not connected to a tty and no default specified") 121: else 122: return default 123: end 124: end 125: qstr = case default 126: when nil 127: 'yn' 128: when true 129: 'Yn' 130: else 131: 'yN' 132: end 133: result = nil 134: while result.nil? 135: result = ask("#{question} [#{qstr}]") 136: result = case result 137: when /^[Yy].*/ 138: true 139: when /^[Nn].*/ 140: false 141: when /^$/ 142: default 143: else 144: nil 145: end 146: end 147: return result 148: 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 lib/rubygems/user_interaction.rb, line 96 96: def choose_from_list(question, list) 97: @outs.puts question 98: list.each_with_index do |item, index| 99: @outs.puts " #{index+1}. #{item}" 100: end 101: @outs.print "> " 102: @outs.flush 103: 104: result = @ins.gets 105: 106: return nil, nil unless result 107: 108: result = result.strip.to_i - 1 109: return list[result], result 110: end
Return a progress reporter object
# File lib/rubygems/user_interaction.rb, line 192 192: def progress_reporter(*args) 193: case Gem.configuration.verbose 194: when nil, false 195: SilentProgressReporter.new(@outs, *args) 196: when true 197: SimpleProgressReporter.new(@outs, *args) 198: else 199: VerboseProgressReporter.new(@outs, *args) 200: end 201: end
Display a statement.
# File lib/rubygems/user_interaction.rb, line 162 162: def say(statement="") 163: @outs.puts statement 164: end