diff --git a/lib/vagrant/environment.rb b/lib/vagrant/environment.rb index 053d4023e..b846f8b7b 100644 --- a/lib/vagrant/environment.rb +++ b/lib/vagrant/environment.rb @@ -13,13 +13,12 @@ module Vagrant attr_reader :parent # Parent environment (in the case of multi-VMs) attr_reader :vm_name # The name of the VM (internal name) which this environment represents - attr_writer :cwd + attr_reader :cwd attr_reader :root_path attr_reader :config attr_reader :host attr_reader :box attr_accessor :vm - attr_reader :actions attr_writer :ui #--------------------------------------------------------------- @@ -45,16 +44,14 @@ module Vagrant end def initialize(opts=nil) - defaults = { + opts = { :parent => nil, :vm_name => nil, :vm => nil, - :cwd => nil - } + :cwd => Dir.pwd + }.merge(opts || {}) - opts = defaults.merge(opts || {}) - - defaults.each do |key, value| + opts.each do |key, value| instance_variable_set("@#{key}".to_sym, opts[key]) end end @@ -63,14 +60,6 @@ module Vagrant # Helpers #--------------------------------------------------------------- - # Specifies the "current working directory" for this environment. - # This is vital in determining the root path and therefore the - # dotfile, rootpath vagrantfile, etc. This defaults to the - # actual cwd (`Dir.pwd`). - def cwd - @cwd || Dir.pwd - end - # The path to the `dotfile`, which contains the persisted UUID of # the VM if it exists. def dotfile_path @@ -145,6 +134,12 @@ module Vagrant end end + # Returns the {Action} class for this environment which allows actions + # to be executed (middleware chains) in the context of this environment. + def actions + @actions ||= Action.new(self) + end + # Loads on initial access and reads data from the global data store. # The global data store is global to Vagrant everywhere (in every environment), # so it can be used to store system-wide information. Note that "system-wide" @@ -188,7 +183,6 @@ module Vagrant load_config! self.class.check_virtualbox! load_vm! - load_actions! self end @@ -312,12 +306,5 @@ module Vagrant vms[name] = Vagrant::VM.new(:vm_name => name, :env => self) end end - - # Loads the instance of {Action} for this environment. This allows - # users of the instance to run action sequences in the context of - # this environment. - def load_actions! - @actions = Action.new(self) - end end end diff --git a/test/vagrant/environment_test.rb b/test/vagrant/environment_test.rb index 06d564e04..ff2f1612d 100644 --- a/test/vagrant/environment_test.rb +++ b/test/vagrant/environment_test.rb @@ -75,17 +75,6 @@ class EnvironmentTest < Test::Unit::TestCase @env = mock_environment end - context "cwd" do - should "default to Dir.pwd" do - assert_equal Dir.pwd, @env.cwd - end - - should "return cwd if set" do - @env.cwd = "foo" - assert_equal "foo", @env.cwd - end - end - context "dotfile path" do setup do @env.stubs(:root_path).returns("foo") @@ -245,6 +234,20 @@ class EnvironmentTest < Test::Unit::TestCase end end + context "accessing actions" do + setup do + @env = mock_environment + end + + should "initialize the Action object with the given environment" do + result = mock("result") + Vagrant::Action.expects(:new).with(@env).returns(result).once + assert_equal result, @env.actions + assert_equal result, @env.actions + assert_equal result, @env.actions + end + end + context "global data" do setup do @env = mock_environment @@ -303,14 +306,13 @@ class EnvironmentTest < Test::Unit::TestCase @env.expects(:load_config!).once.in_sequence(call_seq) @klass.expects(:check_virtualbox!).once.in_sequence(call_seq) @env.expects(:load_vm!).once.in_sequence(call_seq) - @env.expects(:load_actions!).once.in_sequence(call_seq) assert_equal @env, @env.load! end end context "loading the root path" do setup do - @env.cwd = "/foo" + @env.stubs(:cwd).returns("/foo") end should "default the path to the cwd instance var if nil" do @@ -626,17 +628,5 @@ class EnvironmentTest < Test::Unit::TestCase end end - context "loading actions" do - setup do - @env = mock_environment - end - - should "initialize the Action object with the given environment" do - result = mock("result") - Vagrant::Action.expects(:new).with(@env).returns(result) - @env.load_actions! - assert_equal result, @env.actions - end - end end end