stdlib/rubygems_interaction_no_parens.rb
tests/_examples/stdlib/rubygems_interaction_no_parens.rb in the metorex repository.
# RubyGems says things through a UI object a caller can swap, and cleans
# control characters out of text a server sent before saying it.
require "rubygems"
require "rubygems/user_interaction"
require "rubygems/gemcutter_utilities"
require "rubygems/command_manager"
class Recording < Gem::StreamUI
attr_reader :said
def initialize
super nil, nil, nil, false
@said = []
end
def say statement = ""
@said << [:say, statement]
end
def alert_error statement, question = nil
@said << [:error, statement]
end
def terminate_interaction status = 0
@said << [:exit, status]
end
def backtrace exception
end
end
cleaner = Object.new.extend Gem::Text
p cleaner.clean_text "\e]2;title\a and \u0085 text"
talker = Class.new { include Gem::UserInteraction }.new
recording = Recording.new
talker.ui = recording
talker.say "plain"
talker.verbose "hidden"
Gem.configuration.verbose = :really_verbose
talker.verbose "\e[31mshown"
Gem.configuration.verbose = true
p recording.said
found = Gem::Net::HTTPOK.new nil, nil, nil
def found.body
"\e]2;ok\a"
end
missing = Gem::Net::HTTPNotFound.new nil, nil, nil
def missing.body
"gone\a"
end
cutter = Class.new {
include Gem::UserInteraction
include Gem::GemcutterUtilities
}.new
recording = Recording.new
cutter.ui = recording
cutter.with_response found
cutter.with_response missing, "push"
p recording.said
manager = Gem::CommandManager.new
recording = Recording.new
manager.ui = recording
manager.process_args ["--\e]2;x\a"], nil
def manager.process_args args, build_args
raise "bad\a"
end
manager.run ["anything"]
p recording.said
p Gem::SilentUI.new.say "nothing"
Gem::DefaultUserInteraction.ui = nil
Output:
".]2;title. and . text"
[[:say, "plain"], [:say, ".[31mshown"]]
[[:say, ".]2;ok."], [:say, "push: gone."], [:exit, 1]]
[[:error, "Invalid option: --.]2;x.. See 'gem --help'."], [:exit, 1], [:error, "While executing gem ... (RuntimeError)\n bad."], [:exit, 1]]
nil