module Main::Program::InstanceMethods

Public Class Methods

new() click to toggle source
# File lib/main/program/instance_methods.rb, line 48
def initialize() :hook end

Public Instance Methods

abort(message = 'exit') click to toggle source
# File lib/main/program/instance_methods.rb, line 202
def abort(message = 'exit')
  raise SystemExit.new(message)
end
after_initialize() click to toggle source
# File lib/main/program/instance_methods.rb, line 49
def after_initialize() :hook end
after_parse_parameters() click to toggle source
# File lib/main/program/instance_methods.rb, line 177
def after_parse_parameters() :hook end
after_run() click to toggle source
# File lib/main/program/instance_methods.rb, line 185
def after_run() :hook end
before_initialize() click to toggle source
# File lib/main/program/instance_methods.rb, line 42
def before_initialize() :hook end
before_parse_parameters() click to toggle source
# File lib/main/program/instance_methods.rb, line 165
def before_parse_parameters() :hook end
before_run() click to toggle source
# File lib/main/program/instance_methods.rb, line 181
def before_run() :hook end
config(&block) click to toggle source
# File lib/main/program/instance_methods.rb, line 276
def config(&block)
  self.class.config(&block)
end
db(&block) click to toggle source
# File lib/main/program/instance_methods.rb, line 272
def db(&block)
  self.class.db(&block)
end
dotdir(&block) click to toggle source
# File lib/main/program/instance_methods.rb, line 268
def dotdir(&block)
  self.class.dotdir(&block)
end
fcall(object, method, *argv, &block) click to toggle source
# File lib/main/program/instance_methods.rb, line 239
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
# File lib/main/program/instance_methods.rb, line 60
def finalize
  @finalizers ||= []
  while((f = @finalizers.pop)); f.call; end
end
handle_exception(e) click to toggle source
# File lib/main/program/instance_methods.rb, line 206
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 # see main/stdext.rb
              (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
# File lib/main/program/instance_methods.rb, line 235
def handle_exit(status)
  exit(( Integer(status) rescue 1 ))
end
help!(status = 0) click to toggle source
# File lib/main/program/instance_methods.rb, line 193
def help!(status = 0)
  print usage.to_s
  exit(status)
end
help?() click to toggle source
# File lib/main/program/instance_methods.rb, line 198
def help?
  (params['help'] and params['help'].given?) or argv.first == 'help'
end
input() click to toggle source
# File lib/main/program/instance_methods.rb, line 280
def input
  @input ||= params[:input].value if params[:input]
end
instance_eval_block(*argv, &block) click to toggle source
# File lib/main/program/instance_methods.rb, line 259
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
# File lib/main/program/instance_methods.rb, line 76
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
# File lib/main/program/instance_methods.rb, line 43
def main_initialize()
  setup_finalizers
  setup_io_redirection
  setup_logging
end
modes() click to toggle source
# File lib/main/program/instance_methods.rb, line 189
def modes
  self.class.modes
end
output() click to toggle source
# File lib/main/program/instance_methods.rb, line 284
def output
  @output ||= params[:output].value if params[:output]
end
parse_parameters() click to toggle source
# File lib/main/program/instance_methods.rb, line 166
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
# File lib/main/program/instance_methods.rb, line 50
def post_initialize() :hook end
post_parse_parameters() click to toggle source
# File lib/main/program/instance_methods.rb, line 178
def post_parse_parameters() :hook end
post_run() click to toggle source
# File lib/main/program/instance_methods.rb, line 186
def post_run() :hook end
pre_initialize() click to toggle source
# File lib/main/program/instance_methods.rb, line 41
def pre_initialize() :hook end
pre_parse_parameters() click to toggle source
# File lib/main/program/instance_methods.rb, line 164
def pre_parse_parameters() :hook end
pre_run() click to toggle source
# File lib/main/program/instance_methods.rb, line 180
def pre_run() :hook end
run() click to toggle source
# File lib/main/program/instance_methods.rb, line 182
def run
  raise NotImplementedError, 'run not defined'
end
setup_finalizers() click to toggle source
# File lib/main/program/instance_methods.rb, line 52
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
# File lib/main/program/instance_methods.rb, line 65
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
# File lib/main/program/instance_methods.rb, line 89
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
# File lib/main/program/instance_methods.rb, line 71
def setup_logging
  log = self.class.logger || stderr
  self.logger = log
end
stderr=(io) click to toggle source
# File lib/main/program/instance_methods.rb, line 144
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
# File lib/main/program/instance_methods.rb, line 102
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
# File lib/main/program/instance_methods.rb, line 123
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