| 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