Beginnings of Environment class. Currently loads config partially.
This commit is contained in:
parent
e84b17e215
commit
c7f32c8be8
|
@ -0,0 +1,37 @@
|
||||||
|
module Vagrant
|
||||||
|
# Represents a single Vagrant environment. This class is responsible
|
||||||
|
# for loading all of the Vagrantfile's for the given environment and
|
||||||
|
# storing references to the various instances.
|
||||||
|
class Environment
|
||||||
|
ROOTFILE_NAME = "Vagrantfile"
|
||||||
|
|
||||||
|
include Util
|
||||||
|
|
||||||
|
attr_reader :root_path
|
||||||
|
attr_reader :config
|
||||||
|
|
||||||
|
# Loads this environment's configuration and stores it in the {config}
|
||||||
|
# variable. The configuration loaded by this method is specified to
|
||||||
|
# this environment, meaning that it will use the given root directory
|
||||||
|
# to load the Vagrantfile into that context.
|
||||||
|
def load_config!
|
||||||
|
# Prepare load paths for config files
|
||||||
|
load_paths = [File.join(PROJECT_ROOT, "config", "default.rb")]
|
||||||
|
load_paths << File.join(root_path, ROOTFILE_NAME) if root_path
|
||||||
|
|
||||||
|
# Clear out the old data
|
||||||
|
Config.reset!
|
||||||
|
|
||||||
|
# Load each of the config files in order
|
||||||
|
load_paths.each do |path|
|
||||||
|
if File.exist?(path)
|
||||||
|
logger.info "Loading config from #{path}..."
|
||||||
|
load path
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
# Execute the configuration stack and store the result
|
||||||
|
@config = Config.execute!
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
|
@ -0,0 +1,60 @@
|
||||||
|
require File.join(File.dirname(__FILE__), '..', 'test_helper')
|
||||||
|
|
||||||
|
class EnvTest < Test::Unit::TestCase
|
||||||
|
setup do
|
||||||
|
mock_config
|
||||||
|
end
|
||||||
|
|
||||||
|
context "loading config" do
|
||||||
|
setup do
|
||||||
|
@root_path = "/foo"
|
||||||
|
@env = Vagrant::Environment.new
|
||||||
|
@env.stubs(:root_path).returns(@root_path)
|
||||||
|
|
||||||
|
File.stubs(:exist?).returns(false)
|
||||||
|
Vagrant::Config.stubs(:execute!)
|
||||||
|
Vagrant::Config.stubs(:reset!)
|
||||||
|
end
|
||||||
|
|
||||||
|
should "reset the configuration object" do
|
||||||
|
Vagrant::Config.expects(:reset!).once
|
||||||
|
@env.load_config!
|
||||||
|
end
|
||||||
|
|
||||||
|
should "load from the project root" do
|
||||||
|
File.expects(:exist?).with(File.join(PROJECT_ROOT, "config", "default.rb")).once
|
||||||
|
@env.load_config!
|
||||||
|
end
|
||||||
|
|
||||||
|
should "load from the root path" do
|
||||||
|
File.expects(:exist?).with(File.join(@root_path, Vagrant::Environment::ROOTFILE_NAME)).once
|
||||||
|
@env.load_config!
|
||||||
|
end
|
||||||
|
|
||||||
|
should "not load from the root path if nil" do
|
||||||
|
@env.stubs(:root_path).returns(nil)
|
||||||
|
File.expects(:exist?).with(File.join(@root_path, Vagrant::Environment::ROOTFILE_NAME)).never
|
||||||
|
@env.load_config!
|
||||||
|
end
|
||||||
|
|
||||||
|
should "load the files only if exist? returns true" do
|
||||||
|
File.expects(:exist?).once.returns(true)
|
||||||
|
@env.expects(:load).once
|
||||||
|
@env.load_config!
|
||||||
|
end
|
||||||
|
|
||||||
|
should "not load the files if exist? returns false" do
|
||||||
|
@env.expects(:load).never
|
||||||
|
@env.load_config!
|
||||||
|
end
|
||||||
|
|
||||||
|
should "execute after loading and set result to environment config" do
|
||||||
|
result = mock("result")
|
||||||
|
File.expects(:exist?).once.returns(true)
|
||||||
|
@env.expects(:load).once
|
||||||
|
Vagrant::Config.expects(:execute!).once.returns(result)
|
||||||
|
@env.load_config!
|
||||||
|
assert_equal result, @env.config
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
Loading…
Reference in New Issue