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.


795
796
797
798
799
# File 'lib/vagrant/bundler.rb', line 795

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.


792
793
794
# File 'lib/vagrant/bundler.rb', line 792

def prefer_sources
  @prefer_sources
end

#system_pluginsObject

Returns the value of attribute system_plugins.


793
794
795
# File 'lib/vagrant/bundler.rb', line 793

def system_plugins
  @system_plugins
end

Instance Method Details

#find_all(req) ⇒ Object

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


803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
# File 'lib/vagrant/bundler.rb', line 803

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