Class: Vagrant::Bundler::VagrantSet

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

Overview

This is a custom Gem::Resolver::InstallerSet. It will prefer sources which are explicitly provided over default sources when matches are found. This is generally the entire set used for performing full resolutions on install.

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(domain, defined_sources = {}) ⇒ VagrantSet

Returns a new instance of VagrantSet.



815
816
817
818
819
# File 'lib/vagrant/bundler.rb', line 815

def initialize(domain, defined_sources={})
  @prefer_sources = defined_sources
  @system_plugins = []
  super(domain)
end

Instance Attribute Details

#prefer_sourcesObject

Returns the value of attribute prefer_sources.



812
813
814
# File 'lib/vagrant/bundler.rb', line 812

def prefer_sources
  @prefer_sources
end

#system_pluginsObject

Returns the value of attribute system_plugins.



813
814
815
# File 'lib/vagrant/bundler.rb', line 813

def system_plugins
  @system_plugins
end

Instance Method Details

#find_all(req) ⇒ Object

Allow InstallerSet to find matching specs, then filter for preferred sources



823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
# File 'lib/vagrant/bundler.rb', line 823

def find_all(req)
  result = super
  if system_plugins.include?(req.name)
    result.delete_if do |spec|
      spec.is_a?(Gem::Resolver::InstalledSpecification)
    end
  end
  subset = result.find_all do |idx_spec|
    preferred = false
    if prefer_sources[req.name]
      if idx_spec.source.respond_to?(:path)
        preferred = prefer_sources[req.name].include?(idx_spec.source.path.to_s)
      end
      if !preferred
        preferred = prefer_sources[req.name].include?(idx_spec.source.uri.to_s)
      end
    end
    preferred
  end
  subset.empty? ? result : subset
end