class Tumugi::Config

Attributes

max_retry[RW]
retry_interval[RW]
timeout[RW]
workers[RW]

Public Class Methods

camelize(term) click to toggle source
# File lib/tumugi/config.rb, line 17
def self.camelize(term)
  string = term.to_s
  string = string.sub(/^[a-z\d]*/) { $&.capitalize }
  string.gsub!(/(?:_|(\/))([a-z\d]*)/) { $2.capitalize }
  string
end
logger() click to toggle source
# File lib/tumugi/config.rb, line 24
def self.logger
  @logger ||= Tumugi::ScopedLogger.new("tumugi-config")
end
new() click to toggle source
# File lib/tumugi/config.rb, line 28
def initialize
  @workers = 1
  @max_retry = 3
  @retry_interval = 300 #seconds
  @timeout = nil # meaning no timeout

  @section_procs = {}
  @section_instances = {}
end
register_section(name, *args) click to toggle source
# File lib/tumugi/config.rb, line 12
def self.register_section(name, *args)
  @@sections[name] = Struct.new(camelize(name), *args)
  logger.info { "registered config section '#{name}' with '#{args}'" }
end

Public Instance Methods

section(name, &block) click to toggle source
# File lib/tumugi/config.rb, line 38
def section(name, &block)
  if block_given?
    raise Tumugi::ConfigError.new('You cannot change section') if frozen?
    @section_procs[name] ||= block
    return nil
  end

  section_class = @@sections[name]
  if section_class.nil?
    raise ConfigError.new("Config section '#{name}' is not registered.")
  end

  if @section_instances[name].nil?
    @section_instances[name] = section_class.new
    begin
      @section_procs[name].call(@section_instances[name])
    rescue NoMethodError => e
      Config.logger.error "#{e.message}. Available attributes are #{@section_instances[name].members}"
      raise e
    end if @section_procs[name]
  end
  @section_instances[name].clone.freeze
end