Class: Vagrant::Bundler::PluginSet

Inherits:
Gem::Resolver::VendorSet
  • Object
show all
Defined in:
lib/vagrant/bundler.rb

Overview

This is a custom Gem::Resolver::Set for use with Vagrant plugins. It is a modified Gem::Resolver::VendorSet that supports multiple versions of a specific gem

Instance Method Summary collapse

Instance Method Details

#add_vendor_gem(name, directory) ⇒ Object

Adds a specification to the set with the given +name+ which has been unpacked into the given +directory+.


868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
# File 'lib/vagrant/bundler.rb', line 868

def add_vendor_gem(name, directory)
  gemspec = File.join(directory, "#{name}.gemspec")
  spec = Gem::Specification.load(gemspec)
  if !spec
    raise Gem::GemNotFoundException,
      "unable to find #{gemspec} for gem #{name}"
  end

  spec.full_gem_path = File.expand_path(directory)
  spec.base_dir = File.dirname(spec.base_dir)

  @specs[spec.name] ||= []
  @specs[spec.name] << spec
  @directories[spec] = directory

  spec
end

#find_all(req) ⇒ Object

Returns an Array of VendorSpecification objects matching the DependencyRequest +req+.


889
890
891
892
893
894
895
896
# File 'lib/vagrant/bundler.rb', line 889

def find_all(req)
  @specs.values.flatten.select do |spec|
    req.match?(spec, prerelease)
  end.map do |spec|
    source = Gem::Source::Vendor.new(@directories[spec])
    Gem::Resolver::VendorSpecification.new(self, spec, source)
  end
end

#load_spec(name, version, platform, source) ⇒ Object

Loads a spec with the given +name+. +version+, +platform+ and +source+ are ignored.


901
902
903
904
# File 'lib/vagrant/bundler.rb', line 901

def load_spec(name, version, platform, source)
  version = Gem::Version.new(version) if !version.is_a?(Gem::Version)
  @specs.fetch(name, []).detect{|s| s.name == name && s.version == version}
end