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

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 112
112:     def initialize(in_stream, out_stream, err_stream=STDERR)
113:       @ins = in_stream
114:       @outs = out_stream
115:       @errs = err_stream
116:     end

Public Instance methods

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

[Source]

     # File lib/rubygems/user_interaction.rb, line 208
208:     def alert(statement, question=nil)
209:       @outs.puts "INFO:  #{statement}"
210:       ask(question) if question
211:     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 226
226:     def alert_error(statement, question=nil)
227:       @errs.puts "ERROR:  #{statement}"
228:       ask(question) if question
229:     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 217
217:     def alert_warning(statement, question=nil)
218:       @errs.puts "WARNING:  #{statement}"
219:       ask(question) if question
220:     end

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

[Source]

     # File lib/rubygems/user_interaction.rb, line 187
187:     def ask(question)
188:       return nil if not @ins.tty?
189: 
190:       @outs.print(question + "  ")
191:       @outs.flush
192: 
193:       result = @ins.gets
194:       result.chomp! if result
195:       result
196:     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 146
146:     def ask_yes_no(question, default=nil)
147:       unless @ins.tty? then
148:         if default.nil? then
149:           raise Gem::OperationNotSupportedError,
150:                 "Not connected to a tty and no default specified"
151:         else
152:           return default
153:         end
154:       end
155: 
156:       qstr = case default
157:              when nil
158:                'yn'
159:              when true
160:                'Yn'
161:              else
162:                'yN'
163:              end
164: 
165:       result = nil
166: 
167:       while result.nil?
168:         result = ask("#{question} [#{qstr}]")
169:         result = case result
170:         when /^[Yy].*/
171:           true
172:         when /^[Nn].*/
173:           false
174:         when /^$/
175:           default
176:         else
177:           nil
178:         end
179:       end
180: 
181:       return result
182:     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 123
123:     def choose_from_list(question, list)
124:       @outs.puts question
125: 
126:       list.each_with_index do |item, index|
127:         @outs.puts " #{index+1}. #{item}"
128:       end
129: 
130:       @outs.print "> "
131:       @outs.flush
132: 
133:       result = @ins.gets
134: 
135:       return nil, nil unless result
136: 
137:       result = result.strip.to_i - 1
138:       return list[result], result
139:     end

Return a progress reporter object chosen from the current verbosity.

[Source]

     # File lib/rubygems/user_interaction.rb, line 242
242:     def progress_reporter(*args)
243:       case Gem.configuration.verbose
244:       when nil, false
245:         SilentProgressReporter.new(@outs, *args)
246:       when true
247:         SimpleProgressReporter.new(@outs, *args)
248:       else
249:         VerboseProgressReporter.new(@outs, *args)
250:       end
251:     end

Display a statement.

[Source]

     # File lib/rubygems/user_interaction.rb, line 201
201:     def say(statement="")
202:       @outs.puts statement
203:     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 235
235:     def terminate_interaction(status = 0)
236:       raise Gem::SystemExitException, status
237:     end

[Validate]