V1 config loader loads upgradable config if not V1
This is to prepare for the upcoming V2 configuration. When we're in V2, we only want to load _upgradable_ configuration keys.
This commit is contained in:
parent
399437e758
commit
0ca783e8d1
|
@ -25,6 +25,7 @@ module Vagrant
|
||||||
# current version is always considered to be the last version in this
|
# current version is always considered to be the last version in this
|
||||||
# list.
|
# list.
|
||||||
VERSIONS_ORDER = ["1"]
|
VERSIONS_ORDER = ["1"]
|
||||||
|
CURRENT_VERSION = VERSIONS_ORDER.last
|
||||||
|
|
||||||
# This is the method which is called by all Vagrantfiles to configure Vagrant.
|
# This is the method which is called by all Vagrantfiles to configure Vagrant.
|
||||||
# This method expects a block which accepts a single argument representing
|
# This method expects a block which accepts a single argument representing
|
||||||
|
|
|
@ -84,10 +84,16 @@ module Vagrant
|
||||||
protected
|
protected
|
||||||
|
|
||||||
def self.new_root_object
|
def self.new_root_object
|
||||||
# Get all the registered configuration objects and use them.
|
# Get all the registered configuration objects and use them. If
|
||||||
config_map = {}
|
# we're currently on version 1, then we load all the config objects,
|
||||||
Vagrant.plugin("1").manager.config.each do |key, klass|
|
# otherwise we load only the upgrade safe ones, since we're
|
||||||
config_map[key] = klass
|
# 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
|
end
|
||||||
|
|
||||||
# Create the configuration root object
|
# Create the configuration root object
|
||||||
|
|
|
@ -1,3 +1,5 @@
|
||||||
|
require "ostruct"
|
||||||
|
|
||||||
require File.expand_path("../../../../base", __FILE__)
|
require File.expand_path("../../../../base", __FILE__)
|
||||||
|
|
||||||
describe Vagrant::Config::V1::Loader do
|
describe Vagrant::Config::V1::Loader do
|
||||||
|
@ -8,12 +10,44 @@ describe Vagrant::Config::V1::Loader do
|
||||||
result = described_class.init
|
result = described_class.init
|
||||||
result.should be_kind_of(Vagrant::Config::V1::Root)
|
result.should be_kind_of(Vagrant::Config::V1::Root)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it "returns an object with all configuration keys loaded if V1" do
|
||||||
|
# Make sure we're version 1
|
||||||
|
stub_const("Vagrant::Config::CURRENT_VERSION", "1")
|
||||||
|
|
||||||
|
# Register some config classes.
|
||||||
|
register_plugin do |p|
|
||||||
|
p.config("foo") { OpenStruct }
|
||||||
|
p.config("bar", true) { OpenStruct }
|
||||||
|
end
|
||||||
|
|
||||||
|
# Test that we have all keys
|
||||||
|
result = described_class.init
|
||||||
|
result.foo.should be_kind_of(OpenStruct)
|
||||||
|
result.bar.should be_kind_of(OpenStruct)
|
||||||
|
end
|
||||||
|
|
||||||
|
it "returns only upgradable config objects if not V1" do
|
||||||
|
# Make sure we're NOT version 1
|
||||||
|
stub_const("Vagrant::Config::CURRENT_VERSION", "2")
|
||||||
|
|
||||||
|
# Register some config classes.
|
||||||
|
register_plugin do |p|
|
||||||
|
p.config("foo") { OpenStruct }
|
||||||
|
p.config("bar", true) { OpenStruct }
|
||||||
|
end
|
||||||
|
|
||||||
|
# Test that we have all keys
|
||||||
|
result = described_class.init
|
||||||
|
result.bar.should be_kind_of(OpenStruct)
|
||||||
|
expect { result.foo }.to raise_error(NoMethodError)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
describe "finalizing" do
|
describe "finalizing" do
|
||||||
it "should call `#finalize` on the configuration object" do
|
it "should call `#finalize` on the configuration object" do
|
||||||
# Register a plugin for our test
|
# Register a plugin for our test
|
||||||
plugin_class = register_plugin do |plugin|
|
register_plugin do |plugin|
|
||||||
plugin.name "test"
|
plugin.name "test"
|
||||||
plugin.config "foo" do
|
plugin.config "foo" do
|
||||||
Class.new do
|
Class.new do
|
||||||
|
@ -44,13 +78,8 @@ describe Vagrant::Config::V1::Loader do
|
||||||
describe "loading" do
|
describe "loading" do
|
||||||
it "should configure with all plugin config keys loaded" do
|
it "should configure with all plugin config keys loaded" do
|
||||||
# Register a plugin for our test
|
# Register a plugin for our test
|
||||||
plugin_class = register_plugin do |plugin|
|
register_plugin do |plugin|
|
||||||
plugin.name "test"
|
plugin.config("foo") { OpenStruct }
|
||||||
plugin.config "foo" do
|
|
||||||
Class.new do
|
|
||||||
attr_accessor :bar
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
# Create the proc we're testing
|
# Create the proc we're testing
|
||||||
|
|
|
@ -28,9 +28,9 @@ Gem::Specification.new do |s|
|
||||||
s.add_development_dependency "minitest", "~> 2.5.1"
|
s.add_development_dependency "minitest", "~> 2.5.1"
|
||||||
s.add_development_dependency "mocha"
|
s.add_development_dependency "mocha"
|
||||||
#s.add_development_dependency "sys-proctable", "~> 0.9.0"
|
#s.add_development_dependency "sys-proctable", "~> 0.9.0"
|
||||||
s.add_development_dependency "rspec-core", "~> 2.8.0"
|
s.add_development_dependency "rspec-core", "~> 2.11.0"
|
||||||
s.add_development_dependency "rspec-expectations", "~> 2.8.0"
|
s.add_development_dependency "rspec-expectations", "~> 2.11.0"
|
||||||
s.add_development_dependency "rspec-mocks", "~> 2.8.0"
|
s.add_development_dependency "rspec-mocks", "~> 2.11.0"
|
||||||
|
|
||||||
s.files = `git ls-files`.split("\n")
|
s.files = `git ls-files`.split("\n")
|
||||||
s.executables = `git ls-files`.split("\n").map{|f| f[/^bin\/(.*)/, 1]}.compact
|
s.executables = `git ls-files`.split("\n").map{|f| f[/^bin\/(.*)/, 1]}.compact
|
||||||
|
|
Loading…
Reference in New Issue