class Vagrant::Config::V1::Loader
This is the loader that handles configuration loading for V1
configurations.
Public Class Methods
finalize(config)
click to toggle source
Finalizes the configuration by making sure there is at least one VM defined in it.
# File lib/vagrant/config/v1/loader.rb, line 18 def self.finalize(config) # Call the `#finalize` method on each of the configuration keys. # They're expected to modify themselves in our case. config.finalize! # Return the object config end
init()
click to toggle source
Returns a bare empty configuration object.
@return [V1::Root]
# File lib/vagrant/config/v1/loader.rb, line 12 def self.init new_root_object end
load(config_proc)
click to toggle source
Loads the configuration for the given proc and returns a configuration object.
@param [Proc] config_proc @return [Object]
# File lib/vagrant/config/v1/loader.rb, line 32 def self.load(config_proc) # Create a root configuration object root = new_root_object # Call the proc with the root config_proc.call(root) # Return the root object, which doubles as the configuration object # we actually use for accessing as well. root end
merge(old, new)
click to toggle source
Merges two configuration objects.
@param [V1::Root] old The older root config. @param [V1::Root] new The newer root config. @return [V1::Root]
# File lib/vagrant/config/v1/loader.rb, line 49 def self.merge(old, new) # Grab the internal states, we use these heavily throughout the process old_state = old.__internal_state new_state = new.__internal_state # The config map for the new object is the old one merged with the # new one. config_map = old_state["config_map"].merge(new_state["config_map"]) # Merge the keys. old_keys = old_state["keys"] new_keys = new_state["keys"] keys = {} old_keys.each do |key, old_value| if new_keys.key?(key) # We need to do a merge, which we expect to be available # on the config class itself. keys[key] = old_value.merge(new_keys[key]) else # We just take the old value, but dup it so that we can modify. keys[key] = old_value.dup end end new_keys.each do |key, new_value| # Add in the keys that the new class has that we haven't merged. if !keys.key?(key) keys[key] = new_value.dup end end # Return the final root object V1::Root.new(config_map, keys) end
Protected Class Methods
new_root_object()
click to toggle source
# File lib/vagrant/config/v1/loader.rb, line 86 def self.new_root_object # Get all the registered configuration objects and use them. If # we're currently on version 1, then we load all the config objects, # otherwise we load only the upgrade safe ones, since we're # obviously being loaded for an upgrade. config_map = nil plugin_manager = Vagrant.plugin("1").manager if Config::CURRENT_VERSION == "1" config_map = plugin_manager.config else config_map = plugin_manager.config_upgrade_safe end # Create the configuration root object V1::Root.new(config_map) end