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.



763
764
765
766
767
# File 'lib/vagrant/bundler.rb', line 763

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.



760
761
762
# File 'lib/vagrant/bundler.rb', line 760

def prefer_sources
  @prefer_sources
end

#system_pluginsObject

Returns the value of attribute system_plugins.



761
762
763
# File 'lib/vagrant/bundler.rb', line 761

def system_plugins
  @system_plugins
end

Instance Method Details

#find_all(req) ⇒ Object

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



771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
# File 'lib/vagrant/bundler.rb', line 771

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