Class Gem::StreamUI
In: lib/rubygems/user_interaction.rb
Parent: Object

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

Methods

Classes and Modules

Class Gem::StreamUI::SilentProgressReporter
Class Gem::StreamUI::SimpleProgressReporter
Class Gem::StreamUI::VerboseProgressReporter

Attributes

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

Public Class methods

[Source]

     # 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

Public Instance methods

Display an informational alert. Will ask question if it is not nil.

[Source]

     # File lib/rubygems/user_interaction.rb, line 230
230:   def alert(statement, question=nil)
231:     @outs.puts "INFO:  #{statement}"
232:     ask(question) if question
233:   end

Display an error message in a location expected to get error messages. Will ask question if it is not nil.

[Source]

     # File lib/rubygems/user_interaction.rb, line 248
248:   def alert_error(statement, question=nil)
249:     @errs.puts "ERROR:  #{statement}"
250:     ask(question) if question
251:   end

Display a warning in a location expected to get error messages. Will ask question if it is not nil.

[Source]

     # File lib/rubygems/user_interaction.rb, line 239
239:   def alert_warning(statement, question=nil)
240:     @errs.puts "WARNING:  #{statement}"
241:     ask(question) if question
242:   end

Ask a question. Returns an answer if connected to a tty, nil otherwise.

[Source]

     # 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.

[Source]

     # 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].

[Source]

     # 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

Display a debug message on the same location as error messages.

[Source]

     # File lib/rubygems/user_interaction.rb, line 256
256:   def debug(statement)
257:     @errs.puts statement
258:   end

Return a progress reporter object chosen from the current verbosity.

[Source]

     # 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.

[Source]

     # File lib/rubygems/user_interaction.rb, line 223
223:   def say(statement="")
224:     @outs.puts statement
225:   end

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

[Source]

     # File lib/rubygems/user_interaction.rb, line 264
264:   def terminate_interaction(status = 0)
265:     raise Gem::SystemExitException, status
266:   end

[Validate]