module Mixlib::Config

Public Class Methods

extended(base) click to toggle source
# File lib/mixlib/config.rb, line 24
def self.extended(base)
  class << base; attr_accessor :configuration; end
  base.configuration = Hash.new
end

Public Instance Methods

[](config_option) click to toggle source

Get the value of a configuration option

Parameters

config_option<Symbol>

The configuration option to return

Returns

value

The value of the configuration option

Raises

<ArgumentError>

If the configuration option does not exist

# File lib/mixlib/config.rb, line 58
def [](config_option)
  self.configuration[config_option.to_sym]
end
[]=(config_option, value) click to toggle source

Set the value of a configuration option

Parameters

config_option<Symbol>

The configuration option to set (within the [])

value

The value for the configuration option

Returns

value

The new value of the configuration option

# File lib/mixlib/config.rb, line 70
def []=(config_option, value)
  internal_set(config_option,value)
end
config_attr_writer(method_symbol, &blk) click to toggle source

metaprogramming to ensure that the slot for method_symbol gets set to value after any other logic is run

Parameters

method_symbol<Symbol>

Name of the method (variable setter)

blk<Block>

logic block to run in setting slot method_symbol to value

value<Object>

Value to be set in config hash

# File lib/mixlib/config.rb, line 138
def config_attr_writer(method_symbol, &blk)
  meta = class << self; self; end
  method_name = "#{method_symbol.to_s}=".to_sym
  meta.send :define_method, method_name do |value|
    self.configuration[method_symbol] = blk.call(value)
  end
end
configure(&block) click to toggle source

Pass #configure a block, and it will yield self.configuration.

Parameters

<block>

A block that is sent self.configuration as its argument

# File lib/mixlib/config.rb, line 44
def configure(&block)
  block.call(self.configuration)
end
from_file(filename) click to toggle source

Loads a given ruby file, and runs instance_eval against it in the context of the current object.

Raises an IOError if the file cannot be found, or is not readable.

Parameters

<string>

A filename to read from

# File lib/mixlib/config.rb, line 36
def from_file(filename)
  self.instance_eval(IO.read(filename), filename, 1)
end
has_key?(key) click to toggle source

Check if Mixlib::Config has a configuration option.

Parameters

key<Symbol>

The configuration option to check for

Returns

<True>

If the configuration option exists

<False>

If the configuration option does not exist

# File lib/mixlib/config.rb, line 82
def has_key?(key)
  self.configuration.has_key?(key.to_sym)
end
hash_dup() click to toggle source

Creates a shallow copy of the internal hash

Returns

result of Hash#dup

# File lib/mixlib/config.rb, line 109
def hash_dup
  self.configuration.dup
end
keys() click to toggle source

Return the set of config hash keys

Returns

result of Hash#keys

# File lib/mixlib/config.rb, line 101
def keys
  self.configuration.keys
end
merge!(hash) click to toggle source

Merge an incoming hash with our config options

Parameters

hash<Hash>

The incoming hash

Returns

result of Hash#merge!

# File lib/mixlib/config.rb, line 93
def merge!(hash)
  self.configuration.merge!(hash)
end
method_missing(method_symbol, *args) click to toggle source

Allows for simple lookups and setting of configuration options via method calls on Mixlib::Config. If there any arguments to the method, they are used to set the value of the configuration option. Otherwise, it's a simple get operation.

Parameters

method_symbol<Symbol>

The method called. Must match a configuration option.

*args

Any arguments passed to the method

Returns

value

The value of the configuration option.

Raises

<ArgumentError>

If the method_symbol does not match a configuration option.

# File lib/mixlib/config.rb, line 159
def method_missing(method_symbol, *args)
  num_args = args.length
  # Setting
  if num_args > 0
    method_symbol = $1.to_sym unless (method_symbol.to_s =~ /(.+)=$/).nil?
    internal_set method_symbol, (num_args == 1 ? args[0] : args)
  end
  
  # Returning
  self.configuration[method_symbol]        

end

Protected Instance Methods

internal_set(method_symbol,value) click to toggle source

Internal dispatch setter, calling either the real defined method or setting the hash value directly

Parameters

method_symbol<Symbol>

Name of the method (variable setter)

value<Object>

Value to be set in config hash

# File lib/mixlib/config.rb, line 120
def internal_set(method_symbol,value)
  method_name = method_symbol.id2name
  if self.respond_to?("#{method_name}=".to_sym)
    self.send("#{method_name}=", value)
  else
    self.configuration[method_symbol] = value
  end
end