Class | Gem::StreamUI |
In: |
lib/rubygems/user_interaction.rb
|
Parent: | Object |
Gem::StreamUI implements a simple stream based user interface.
errs | [R] | |
ins | [R] | |
outs | [R] |
# File lib/rubygems/user_interaction.rb, line 134 134: def initialize(in_stream, out_stream, err_stream=STDERR) 135: @ins = in_stream 136: @outs = out_stream 137: @errs = err_stream 138: end
Ask a question. Returns an answer if connected to a tty, nil otherwise.
# File lib/rubygems/user_interaction.rb, line 209 209: def ask(question) 210: return nil if not @ins.tty? 211: 212: @outs.print(question + " ") 213: @outs.flush 214: 215: result = @ins.gets 216: result.chomp! if result 217: result 218: 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 168 168: def ask_yes_no(question, default=nil) 169: unless @ins.tty? then 170: if default.nil? then 171: raise Gem::OperationNotSupportedError, 172: "Not connected to a tty and no default specified" 173: else 174: return default 175: end 176: end 177: 178: qstr = case default 179: when nil 180: 'yn' 181: when true 182: 'Yn' 183: else 184: 'yN' 185: end 186: 187: result = nil 188: 189: while result.nil? 190: result = ask("#{question} [#{qstr}]") 191: result = case result 192: when /^[Yy].*/ 193: true 194: when /^[Nn].*/ 195: false 196: when /^$/ 197: default 198: else 199: nil 200: end 201: end 202: 203: return result 204: 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 145 145: def choose_from_list(question, list) 146: @outs.puts question 147: 148: list.each_with_index do |item, index| 149: @outs.puts " #{index+1}. #{item}" 150: end 151: 152: @outs.print "> " 153: @outs.flush 154: 155: result = @ins.gets 156: 157: return nil, nil unless result 158: 159: result = result.strip.to_i - 1 160: return list[result], result 161: end
Return a progress reporter object chosen from the current verbosity.
# File lib/rubygems/user_interaction.rb, line 271 271: def progress_reporter(*args) 272: case Gem.configuration.verbose 273: when nil, false 274: SilentProgressReporter.new(@outs, *args) 275: when true 276: SimpleProgressReporter.new(@outs, *args) 277: else 278: VerboseProgressReporter.new(@outs, *args) 279: end 280: end
Display a statement.
# File lib/rubygems/user_interaction.rb, line 223 223: def say(statement="") 224: @outs.puts statement 225: end