class Vagrant::Config::V1::Root

This is the root configuration class. An instance of this is what is passed into version 1 Vagrant configuration blocks.

Public Class Methods

new(config_map, keys=nil) click to toggle source

Initializes a root object that maps the given keys to specific configuration classes.

@param [Hash] config_map Map of key to config class.

# File lib/vagrant/config/v1/root.rb, line 13
def initialize(config_map, keys=nil)
  @keys              = keys || {}
  @config_map        = config_map
  @missing_key_calls = Set.new
end

Public Instance Methods

__internal_state() click to toggle source

Returns the internal state of the root object. This is used by outside classes when merging, and shouldn’t be called directly. Note the strange method name is to attempt to avoid any name clashes with potential configuration keys.

# File lib/vagrant/config/v1/root.rb, line 50
def __internal_state
  {
    "config_map"        => @config_map,
    "keys"              => @keys,
    "missing_key_calls" => @missing_key_calls
  }
end
finalize!() click to toggle source

Called to finalize this object just prior to it being used by the Vagrant system. The “!” signifies that this is expected to mutate itself.

# File lib/vagrant/config/v1/root.rb, line 40
def finalize!
  @keys.each do |_key, instance|
    instance.finalize!
  end
end
method_missing(name, *args) click to toggle source

We use method_missing as a way to get the configuration that is used for Vagrant and load the proper configuration classes for each.

# File lib/vagrant/config/v1/root.rb, line 22
def method_missing(name, *args)
  return @keys[name] if @keys.key?(name)

  config_klass = @config_map[name.to_sym]
  if config_klass
    # Instantiate the class and return the instance
    @keys[name] = config_klass.new
    return @keys[name]
  else
    # Record access to a missing key as an error
    @missing_key_calls.add(name.to_s)
    return DummyConfig.new
  end
end