Class: Observed::ConfigDSL

Inherits:
Object
  • Object
show all
Extended by:
Forwardable
Includes:
Configurable
Defined in:
lib/observed/config_dsl.rb

Overview

The DSL to describe Observed's configuration. context = ConfigDSL.new(builder: the_builder) context.eval_file observed_conf_file(a.k.a user code describes Observed configuration) context.config #=> can be used to instantiate Observed::System

Instance Method Summary collapse

Methods included from Configurable

#configure, #get_attribute_value, #has_attribute_value?, included

Constructor Details

#initialize(args) ⇒ ConfigDSL

Returns a new instance of ConfigDSL.



23
24
25
26
27
28
# File 'lib/observed/config_dsl.rb', line 23

def initialize(args)
  args[:builder] || fail("The key :builder must exist in #{args}")
  @builder = args[:builder]

  configure(args)
end

Instance Method Details

#configObserved::Config

Build and returns the Observed configuration

Returns:



59
60
61
# File 'lib/observed/config_dsl.rb', line 59

def config
  @builder.build
end

#eval_file(file) ⇒ Object



30
31
32
33
34
35
36
37
# File 'lib/observed/config_dsl.rb', line 30

def eval_file(file)
  @file = File.expand_path(file)
  working_directory File.dirname(@file)
  logger.debug "Reading the file: #{@file}"
  code = File.read(@file)
  logger.debug "Evaluating: #{code}"
  instance_eval(code, @file)
end

#load!(file) ⇒ Object

Load the file and evaluate the containing code in context of this object(a.k.a DSL). typically observed.conf.

Parameters:

  • file (String|Pathname)

    The path to Ruby script containing the code in Observed's configuration DSL,



66
67
68
# File 'lib/observed/config_dsl.rb', line 66

def load!(file)
  eval_file file
end

#require_relative(lib) ⇒ Object

The replacement for Ruby's built-in require_relative. Although the built-in one can not be used in eval or instance_eval or etc because there is no current file semantics in eval, this replacement takes the file which is going to be evaluated as the current file. Thanks to this method, we can use require_relative in observed.conf files both when it is evaluated with eval and when it is evaluated in result of require.



51
52
53
54
55
# File 'lib/observed/config_dsl.rb', line 51

def require_relative(lib)
  path = File.expand_path("#{working_directory}/#{lib}")
  logger.debug "Require '#{path}'"
  require path
end

#working_directory(wd = nil) ⇒ Object

The current directory in which require_relative finds source files



40
41
42
43
# File 'lib/observed/config_dsl.rb', line 40

def working_directory(wd=nil)
  @working_directory = wd if wd
  @working_directory
end