| 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