class Rabbit::Console

Public Class Methods

get_last_name(klass) click to toggle source
# File lib/rabbit/console.rb, line 45
def get_last_name(klass)
  klass.name.split("::").last
end
new(logger=nil) click to toggle source
# File lib/rabbit/console.rb, line 50
def initialize(logger=nil)
  @logger = logger || Logger.default
end
parse!(args, logger=nil, &block) click to toggle source
# File lib/rabbit/console.rb, line 41
def parse!(args, logger=nil, &block)
  new(logger).parse!(args, &block)
end

Public Instance Methods

parse!(args) { |_parser, options| ... } click to toggle source
# File lib/rabbit/console.rb, line 54
def parse!(args)
  options = OpenStruct.new
  options.logger = @logger
  options.default_logger = @logger
  options.druby_uri = "druby://127.0.0.1:10101"
  options.version = VERSION
  options.options_file = nil
  options.rest = []
  options.before_hooks = []
  options.after_hooks = []

  process_locale_options(args)

  parser = OptionParser.new(banner) do |_parser|
    yield(_parser, options)
    setup_common_options(_parser, options)
  end

  begin
    options_file = options.options_file
    if options_file and File.file?(options_file)
      read_options_file(parser, options, options_file)
    end
    options.before_hooks.each do |hook|
      hook.call(self, parser, options)
    end
    options.rest.concat(parser.parse!(args))
    options.after_hooks.each do |hook|
      hook.call(self, parser, options)
    end
  rescue => error
    @logger.error("#{error.class}: #{error.message}")
    error.backtrace.each do |line|
      @logger.error(line)
    end
    raise
  end

  [options, options.logger]
end
read_options_file(parser, options, options_file) click to toggle source
# File lib/rabbit/console.rb, line 95
def read_options_file(parser, options, options_file)
  options_in_file = []
  File.open(options_file) do |file|
    file.each_line do |line|
      options_in_file.concat(Shellwords.split(line))
    end
  end
  source_info = parser.parse(options_in_file)

  source_info = source_info.collect do |path|
    if URI(path).scheme
      path
    else
      if Pathname(path).absolute?
        path
      else
        File.join(File.dirname(options_file), path)
      end
    end
  end
  options.rest.concat(source_info)
end

Private Instance Methods

banner() click to toggle source
get_last_name(klass) click to toggle source
# File lib/rabbit/console.rb, line 216
def get_last_name(klass)
  self.class.get_last_name(klass)
end
output_info_and_exit(options, message) click to toggle source
# File lib/rabbit/console.rb, line 206
def output_info_and_exit(options, message)
  if options.logger.is_a?(Logger::STDERR) and
      options.default_logger == options.logger
    print(message)
  else
    options.logger.info(message)
  end
  exit
end
process_locale_options(args) click to toggle source
# File lib/rabbit/console.rb, line 123
def process_locale_options(args)
  args.each_with_index do |arg, i|
    if arg == @@locale_dir_option_name
      self.class.bindtextdomain(GetText::DOMAIN, :path => args[i + 1])
    elsif /#{@@locale_dir_option_name}=/ =~ arg
      self.class.bindtextdomain(GetText::DOMAIN, :path => $POSTMATCH)
    end
  end
end
setup_common_options(parser, options) click to toggle source
# File lib/rabbit/console.rb, line 133
def setup_common_options(parser, options)
  parser.separator ""
  parser.separator _("Common options")

  setup_options_options(parser, options)
  setup_locale_options(parser, options)
  setup_logger_options(parser, options)
  setup_common_options_on_tail(parser, options)
end
setup_common_options_on_tail(parser, options) click to toggle source
# File lib/rabbit/console.rb, line 196
def setup_common_options_on_tail(parser, options)
  parser.on_tail("--help", _("Show this message.")) do
    output_info_and_exit(options, parser.to_s)
  end

  parser.on_tail("--version", _("Show version.")) do
    output_info_and_exit(options, "#{options.version}\n")
  end
end
setup_locale_options(parser, options) click to toggle source
# File lib/rabbit/console.rb, line 153
def setup_locale_options(parser, options)
  parser.on("--locale-dir=DIR",
            _("Specify locale dir as [DIR]."),
            _("(auto)")) do |directory|
    self.class.bindtextdomain(GetText::DOMAIN, :path => directory)
  end

  parser.separator ""
end
setup_logger_options(parser, options) click to toggle source
# File lib/rabbit/console.rb, line 163
def setup_logger_options(parser, options)
  logger_type_names = Rabbit::Logger.types.collect do |x|
    get_last_name(x).downcase
  end

  parser.on("--logger-type=TYPE",
            logger_type_names,
            _("Specify logger type as [TYPE]."),
            _("Select from [%s].") % logger_type_names.join(', '),
            "(#{get_last_name(options.logger.class)})") do |logger_type|
    logger_class = Rabbit::Logger.types.find do |t|
      get_last_name(t).downcase == logger_type.downcase
    end
    if logger_class.nil?
      options.logger = options.default_logger
      # logger.error("Unknown logger type: #{t}")
    else
      options.logger = logger_class.new
    end
  end

  level_names = Logger::Severity.names
  parser.on("--log-level=LEVEL",
            level_names,
            _("Specify log level as [LEVEL]."),
            _("Select from [%s].") % level_names.join(', '),
            "(#{Logger::Severity.name(options.logger.level)})") do |name|
    options.logger.level = Logger::Severity.level(name)
  end

  parser.separator ""
end
setup_options_options(parser, options) click to toggle source
# File lib/rabbit/console.rb, line 143
def setup_options_options(parser, options)
  parser.on("--options-file=FILE",
            _("Load options from FILE."),
            _("(none)")) do |file|
    read_options_file(parser, options, file)
  end

  parser.separator ""
end