Starting to revamp BoxCollection to not depend on env
This commit is contained in:
parent
cf7a5db7e7
commit
8801bc7b1b
|
@ -16,12 +16,13 @@ module Vagrant
|
|||
extend Forwardable
|
||||
def_delegators :@boxes, :length, :each
|
||||
|
||||
# The environment this box collection belongs to
|
||||
attr_reader :env
|
||||
# The directory that the boxes are being searched for.
|
||||
attr_reader :directory
|
||||
|
||||
def initialize(env)
|
||||
@env = env
|
||||
@boxes = []
|
||||
# Initializes the class to search for boxes in the given directory.
|
||||
def initialize(directory)
|
||||
@directory = directory
|
||||
@boxes = []
|
||||
|
||||
reload!
|
||||
end
|
||||
|
@ -41,9 +42,10 @@ module Vagrant
|
|||
def reload!
|
||||
@boxes.clear
|
||||
|
||||
Dir.open(env.boxes_path) do |dir|
|
||||
Dir.open(@directory) do |dir|
|
||||
dir.each do |d|
|
||||
next if d == "." || d == ".." || !File.directory?(env.boxes_path.join(d))
|
||||
next if d == "." || d == ".." || !@directory.join(d).directory?
|
||||
# TODO: env????
|
||||
@boxes << Box.new(env, d)
|
||||
end
|
||||
end
|
||||
|
|
|
@ -80,7 +80,6 @@ module Vagrant
|
|||
@logger = Log4r::Logger.new("vagrant::environment")
|
||||
@logger.info("Environment initialized (#{self})")
|
||||
@logger.info(" - cwd: #{cwd}")
|
||||
@logger.info(" - vm: #{vm}")
|
||||
end
|
||||
|
||||
#---------------------------------------------------------------
|
||||
|
@ -147,7 +146,7 @@ module Vagrant
|
|||
#
|
||||
# @return [BoxCollection]
|
||||
def boxes
|
||||
@_boxes ||= BoxCollection.new(self)
|
||||
@_boxes ||= BoxCollection.new(boxes_path)
|
||||
end
|
||||
|
||||
# Returns the VMs associated with this environment.
|
||||
|
@ -299,7 +298,7 @@ module Vagrant
|
|||
# will trigger the environment to load if it hasn't loaded yet (see
|
||||
# {#load!}).
|
||||
#
|
||||
# @return [Config::Top]
|
||||
# @return [Config::Container]
|
||||
def config
|
||||
load! if !loaded?
|
||||
@config
|
||||
|
|
|
@ -50,15 +50,15 @@ module Unit
|
|||
end
|
||||
end
|
||||
|
||||
def box(name, vagrantfile_contents)
|
||||
def box(name, vagrantfile_contents="")
|
||||
box_dir = boxes_dir.join(name)
|
||||
box_dir.mkdir
|
||||
box_dir.mkpath
|
||||
vagrantfile(vagrantfile_contents, box_dir)
|
||||
end
|
||||
|
||||
def boxes_dir
|
||||
dir = @homedir.join("boxes")
|
||||
dir.mkdir
|
||||
dir.mkpath
|
||||
dir
|
||||
end
|
||||
end
|
||||
|
|
|
@ -0,0 +1,32 @@
|
|||
require File.expand_path("../../base", __FILE__)
|
||||
|
||||
describe Vagrant::BoxCollection do
|
||||
include_context "unit"
|
||||
|
||||
let(:environment) { isolated_environment }
|
||||
let(:instance) { described_class.new(environment.boxes_dir) }
|
||||
|
||||
it "should list all available boxes" do
|
||||
# No boxes yet.
|
||||
instance.length.should == 0
|
||||
|
||||
# Add some boxes to the environment and try again
|
||||
environment.box("foo")
|
||||
environment.box("bar")
|
||||
instance.reload!
|
||||
instance.length.should == 2
|
||||
end
|
||||
|
||||
describe "finding" do
|
||||
it "should return nil if it can't find the box" do
|
||||
instance.find("foo").should be_nil
|
||||
end
|
||||
|
||||
it "should return a box instance for any boxes it does find" do
|
||||
environment.box("foo")
|
||||
result = instance.find("foo")
|
||||
result.should be_kind_of(Vagrant::Box)
|
||||
result.name.should == "foo"
|
||||
end
|
||||
end
|
||||
end
|
|
@ -7,6 +7,9 @@ require "support/tempdir"
|
|||
describe Vagrant::Environment do
|
||||
include_context "unit"
|
||||
|
||||
let(:home_path) { Pathname.new(Tempdir.new.path) }
|
||||
let(:instance) { described_class.new(:home_path => home_path) }
|
||||
|
||||
describe "current working directory" do
|
||||
it "is the cwd by default" do
|
||||
described_class.new.cwd.should == Pathname.new(Dir.pwd)
|
||||
|
@ -35,10 +38,13 @@ describe Vagrant::Environment do
|
|||
end
|
||||
end
|
||||
|
||||
describe "loading configuration" do
|
||||
let(:home_path) { Pathname.new(Tempdir.new.path) }
|
||||
let(:instance) { described_class.new(:home_path => home_path) }
|
||||
it "has a box collection pointed to the proper directory" do
|
||||
collection = instance.boxes
|
||||
collection.should be_kind_of(Vagrant::BoxCollection)
|
||||
collection.directory.should == instance.boxes_path
|
||||
end
|
||||
|
||||
describe "loading configuration" do
|
||||
it "should load global configuration" do
|
||||
environment = isolated_environment do |env|
|
||||
env.vagrantfile(<<-VF)
|
||||
|
|
Loading…
Reference in New Issue