Class: Vines::Services::Config

Inherits:
Object
  • Object
show all
Defined in:
lib/vines/services/config.rb

Overview

A Config object is passed to the xmpp connections to give them access to server configuration information like component subdomain host names, storage systems, etc. This class provides the DSL methods used in the conf/config.rb file.

Defined Under Namespace

Classes: Host

Constant Summary collapse

LOG_LEVELS =
%w[debug info warn error fatal].freeze
@@instance =
nil

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(&block) ⇒ Config

Returns a new instance of Config.



23
24
25
26
27
# File 'lib/vines/services/config.rb', line 23

def initialize(&block)
  @vhosts = {}
  instance_eval(&block)
  raise "must define at least one virtual host" if @vhosts.empty?
end

Instance Attribute Details

#vhostsObject (readonly)

Returns the value of attribute vhosts.



12
13
14
# File 'lib/vines/services/config.rb', line 12

def vhosts
  @vhosts
end

Class Method Details

.configure(&block) ⇒ Object



15
16
17
# File 'lib/vines/services/config.rb', line 15

def self.configure(&block)
  @@instance = self.new(&block)
end

.instanceObject



19
20
21
# File 'lib/vines/services/config.rb', line 19

def self.instance
  @@instance
end

Instance Method Details

#host(*names, &block) ⇒ Object



29
30
31
32
33
34
35
36
# File 'lib/vines/services/config.rb', line 29

def host(*names, &block)
  names = names.flatten.map {|name| name.downcase }
  dupes = names.uniq.size != names.size || (@vhosts.keys & names).any?
  raise "one host definition per domain allowed" if dupes
  names.each do |name|
    @vhosts[name] = Host.new(name, &block)
  end
end

#hostsObject



49
50
51
# File 'lib/vines/services/config.rb', line 49

def hosts
  @vhosts.values
end

#log(level) ⇒ Object



38
39
40
41
42
43
44
45
46
47
# File 'lib/vines/services/config.rb', line 38

def log(level)
  const = Logger.const_get(level.to_s.upcase) rescue nil
  unless LOG_LEVELS.include?(level.to_s) && const
    raise "log level must be one of: #{LOG_LEVELS.join(', ')}"
  end
  log = Class.new.extend(Vines::Log).log
  log.progname = 'vines-service'
  log.level = const
  Blather.logger.level = const
end