lib/vagrant/box_collection.rb in vagrantup-0.6.7 vs lib/vagrant/box_collection.rb in vagrantup-0.6.8

- old
+ new

@@ -1,5 +1,7 @@ +require 'forwardable' + module Vagrant # Represents a collection of boxes, providing helpful methods for # finding boxes. An instance of this is returned by {Environment#boxes}. # # # Finding a Box @@ -7,39 +9,43 @@ # To find a box, use the {#find} method with the name of the box. The name # is an exact match search. # # env.boxes.find("base") # => #<Vagrant::Box> # - class BoxCollection < Array + class BoxCollection + include Enumerable + extend Forwardable + def_delegators :@boxes, :length, :each + # The environment this box collection belongs to attr_reader :env def initialize(env) - super() - @env = env + @boxes = [] + reload! end # Find a box in the collection by the given name. The name must # be a string, for now. def find(name) - each do |box| + @boxes.each do |box| return box if box.name == name end nil end # Loads the list of all boxes from the source. This modifies the # current array. def reload! - clear + @boxes.clear Dir.open(env.boxes_path) do |dir| dir.each do |d| next if d == "." || d == ".." || !File.directory?(env.boxes_path.join(d)) - self << Box.new(env, d) + @boxes << Box.new(env, d) end end end end end