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.



556
557
558
559
560
# File 'lib/vagrant/bundler.rb', line 556

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.



553
554
555
# File 'lib/vagrant/bundler.rb', line 553

def prefer_sources
  @prefer_sources
end

#system_pluginsObject

Returns the value of attribute system_plugins.



554
555
556
# File 'lib/vagrant/bundler.rb', line 554

def system_plugins
  @system_plugins
end

Instance Method Details

#find_all(req) ⇒ Object

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



564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
# File 'lib/vagrant/bundler.rb', line 564

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