class Vagrant::Bundler::VagrantSet

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.

Attributes

prefer_sources[RW]
system_plugins[RW]

Public Class Methods

new(domain, defined_sources={}) click to toggle source
Calls superclass method
# File lib/vagrant/bundler.rb, line 800
def initialize(domain, defined_sources={})
  @prefer_sources = defined_sources
  @system_plugins = []
  super(domain)
end

Public Instance Methods

find_all(req) click to toggle source

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

Calls superclass method
# File lib/vagrant/bundler.rb, line 808
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