class DRbQS::Setting::Base

A base class having options of commands. We must define a method ‘exec’ this method in a child class.

Attributes

source[R]

Public Class Methods

new(opts = {}, &block) click to toggle source

The keys of options are @option opts [Boolean] :all_keys_defined Check existences of keys on setting values. @option opts [Boolean] :log_level Use the option of log level. @option opts [Boolean] :daemon Use the option of daemon.

# File lib/drbqs/setting/base.rb, line 22
def initialize(opts = {}, &block)
  @source = DRbQS::Setting::Source.new(opts[:all_keys_defined])
  @source.register_key(:debug, :bool => true)
  if opts[:log_level]
    @source.register_key(:log_level, :check => 1, :default => [Logger::ERROR])
  end
  if opts[:daemon]
    @__daemon__ = nil
    @source.register_key(:daemon, :check => 1)
  end
  @source.instance_eval(&block) if block_given?
  @options = {}
end

Public Instance Methods

clone() click to toggle source
# File lib/drbqs/setting/base.rb, line 54
def clone
  new_obj = self.class.new
  instance_variables.each do |var_name|
    var = instance_variable_get(var_name)
    case var
    when NilClass, FalseClass, TrueClass, Symbol
      new_var = var
    else
      new_var = var.clone
    end
    new_obj.instance_variable_set(var_name, new_var)
  end
  new_obj
end
parse!() click to toggle source

We execute DRbQS::Setting::Base#parse! before execute ‘exec’.

# File lib/drbqs/setting/base.rb, line 74
def parse!
  preprocess!
  @source.check!
  $DEBUG = true if get_first(:debug)
  @__daemon__ = get_first(:daemon)
  parse_log_level
end
string_for_shell() click to toggle source
# File lib/drbqs/setting/base.rb, line 46
def string_for_shell
  command_line_argument(true).join(" ")
end
value() click to toggle source
# File lib/drbqs/setting/base.rb, line 50
def value
  @source.value
end

Private Instance Methods

daemon_start(output) { || ... } click to toggle source
# File lib/drbqs/setting/base.rb, line 102
def daemon_start(output, &block)
  Process.daemon(true)
  begin
    $stdout = Kernel.open(output, 'w')
    $stderr = $stdout
    begin
      yield
    rescue SystemExit
      return true
    end
  rescue Exception => err
    output_error(err)
  ensure
    $stdout.close
  end
end
exec_as_daemon() { || ... } click to toggle source
# File lib/drbqs/setting/base.rb, line 120
def exec_as_daemon(&block)
  if @__daemon__
    @__daemon__ = FileName.create(@__daemon__, :position => :middle, :type => :time, :directory => :parent)
    daemon_start(@__daemon__) do
      @__daemon__ = nil
      if block_given?
        yield
      else
        exec($stdout)
      end
    end
    true
  else
    nil
  end
end
parse_log_level() click to toggle source
# File lib/drbqs/setting/base.rb, line 82
def parse_log_level
  if arg = get_first(:log_level)
    case arg
    when /^(fatal)|(error)|(warn)|(info)|(debug)|(unknown)$/i
      n = eval("Logger::#{arg.upcase}")
      unless 0 <= n && n <= 5
        raise DRbQS::Setting::InvalidLogLevel, "error: Invalid log level '#{arg}'"
      end
    when /^[0-5]$/
      n = arg.to_i
    when 0..5
      n = arg
    else
      raise DRbQS::Setting::InvalidLogLevel, "error: Invalid log level '#{arg}'"
    end
    @options[:log_level] = n
  end
end
preprocess!() click to toggle source
# File lib/drbqs/setting/base.rb, line 69
def preprocess!
end