abort(message = 'exit')
click to toggle source
def abort(message = 'exit')
raise SystemExit.new(message)
end
after_initialize()
click to toggle source
def after_initialize() :hook end
after_parse_parameters()
click to toggle source
def after_parse_parameters() :hook end
after_run()
click to toggle source
def after_run() :hook end
before_initialize()
click to toggle source
def before_initialize() :hook end
before_parse_parameters()
click to toggle source
def before_parse_parameters() :hook end
before_run()
click to toggle source
def before_run() :hook end
config(&block)
click to toggle source
def config(&block)
self.class.config(&block)
end
db(&block)
click to toggle source
def db(&block)
self.class.db(&block)
end
dotdir(&block)
click to toggle source
def dotdir(&block)
self.class.dotdir(&block)
end
fcall(object, method, *argv, &block)
click to toggle source
def fcall(object, method, *argv, &block)
method = object.method(method)
arity = method.arity
if arity >= 0
argv = argv[0, arity]
else
arity = arity.abs - 1
argv = argv[0, arity] + argv[arity .. -1]
end
method.call(*argv, &block)
end
finalize()
click to toggle source
def finalize
@finalizers ||= []
while((f = @finalizers.pop)); f.call; end
end
handle_exception(e)
click to toggle source
def handle_exception(e)
if e.respond_to?(:error_handler_before)
fcall(e, :error_handler_before, self)
end
if e.respond_to?(:error_handler_instead)
fcall(e, :error_handler_instead, self)
else
if e.respond_to?(:status)
exit_status(( e.status ))
end
if Softspoken === e or SystemExit === e
quiet = ((SystemExit === e and e.message.respond_to?('abort')) or
(SystemExit === e and e.message == 'exit'))
stderr.puts e.message unless quiet
else
fatal{ e }
end
end
if e.respond_to?(:error_handler_after)
fcall(e, :error_handler_after, self)
end
exit_status(( exit_failure )) if exit_status == exit_success
exit_status(( Integer(exit_status) rescue(exit_status ? 0 : 1) ))
end
handle_exit(status)
click to toggle source
def handle_exit(status)
exit(( Integer(status) rescue 1 ))
end
help!(status = 0)
click to toggle source
def help!(status = 0)
print usage.to_s
exit(status)
end
help?()
click to toggle source
def help?
(params['help'] and params['help'].given?) or argv.first == 'help'
end
instance_eval_block(*argv, &block)
click to toggle source
def instance_eval_block(*argv, &block)
singleton_class =
class << self
self
end
singleton_class.module_eval{ define_method('__instance_eval_block', &block) }
fcall(self, '__instance_eval_block', *argv, &block)
end
logger=(log)
click to toggle source
def logger= log
unless(defined?(@logger) and @logger == log)
case log
when ::Logger, Logger
@logger = log
else
@logger = Logger.new(*log)
@logger.level = logger_level
end
end
@logger
end
main_initialize()
click to toggle source
def main_initialize()
setup_finalizers
setup_io_redirection
setup_logging
end
modes()
click to toggle source
def modes
self.class.modes
end
output()
click to toggle source
def output
@output ||= params[:output].value if params[:output]
end
parse_parameters()
click to toggle source
def parse_parameters
pre_parse_parameters
before_parse_parameters
self.class.parameters.parse(self)
@params = Parameter::Table.new
self.class.parameters.each{|p| @params[p.name.to_s] = p}
after_parse_parameters
post_parse_parameters
end
post_initialize()
click to toggle source
def post_initialize() :hook end
post_parse_parameters()
click to toggle source
def post_parse_parameters() :hook end
post_run()
click to toggle source
pre_initialize()
click to toggle source
def pre_initialize() :hook end
pre_parse_parameters()
click to toggle source
def pre_parse_parameters() :hook end
pre_run()
click to toggle source
run()
click to toggle source
def run
raise NotImplementedError, 'run not defined'
end
setup_finalizers()
click to toggle source
def setup_finalizers
@finalizers ||= []
finalizers = @finalizers
ObjectSpace.define_finalizer(self) do
while((f = finalizers.pop)); f.call; end
end
end
setup_io_redirection()
click to toggle source
def setup_io_redirection
self.stdin = opts['stdin'] || opts[:stdin] || stdin
self.stdout = opts['stdout'] || opts[:stdout] || stdout
self.stderr = opts['stderr'] || opts[:stderr] || stderr
end
setup_io_restoration()
click to toggle source
def setup_io_restoration
@finalizers ||= []
[STDIN, STDOUT, STDERR].each do |io|
dup = io.dup
@finalizers.push(
lambda do
io.reopen(dup)
end
)
end
end
setup_logging()
click to toggle source
def setup_logging
log = self.class.logger || stderr
self.logger = log
end
stderr=(io)
click to toggle source
def stderr= io
unless(defined?(@stderr) and (@stderr == io))
@stderr =
if io.respond_to?('write')
io
else
fd = open(io.to_s, 'w+')
@finalizers.push(lambda{ fd.close })
fd
end
begin
STDERR.reopen(@stderr)
rescue
$stderr = @stderr
::Object.send(:remove_const, 'STDERR')
::Object.send(:const_set, 'STDERR', @stderr)
end
end
end
stdin=(io)
click to toggle source
def stdin= io
unless(defined?(@stdin) and (@stdin == io))
@stdin =
if io.respond_to?('read')
io
else
fd = open(io.to_s, 'r+')
@finalizers.push(lambda{ fd.close })
fd
end
begin
STDIN.reopen(@stdin)
rescue
$stdin = @stdin
::Object.send(:remove_const, 'STDIN')
::Object.send(:const_set, 'STDIN', @stdin)
end
end
end
stdout=(io)
click to toggle source
def stdout= io
unless(defined?(@stdout) and (@stdout == io))
@stdout =
if io.respond_to?('write')
io
else
fd = open(io.to_s, 'w+')
@finalizers.push(lambda{ fd.close })
fd
end
begin
STDOUT.reopen(@stdout)
rescue
$stdout = @stdout
::Object.send(:remove_const, 'STDOUT')
::Object.send(:const_set, 'STDOUT', @stdout)
end
end
end