Class: Inspec::Plugin::V2::Installer::InstalledVendorSet

Inherits:
Gem::Resolver::Set
  • Object
show all
Defined in:
lib/inspec/plugin/v2/installer.rb

Overview

This class allows us to build a Resolver set with the gems that are already included either with Ruby or with the InSpec install

This code is heavily based on: github.com/hashicorp/vagrant/blob/32237377/lib/vagrant/bundler.rb#L400 github.com/hashicorp/vagrant/blob/32237377/lib/vagrant/bundler.rb#L565

Instance Method Summary collapse

Constructor Details

#initializeInstalledVendorSet



423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
# File 'lib/inspec/plugin/v2/installer.rb', line 423

def initialize
  super
  @remote = false
  @specs = []

  # Grab any pre loaded gems
  Gem::Specification.find_all do |spec|
    @specs << spec
  end

  # find all gem specification directories
  directories = [Gem::Specification.default_specifications_dir]
  unless defined?(::Bundler)
    # add in any others that do not start with the user directory
    directories += Gem::Specification.dirs.find_all do |path|
      !path.start_with?(Gem.user_dir)
    end
  end

  # add them all to the specs array
  Gem::Specification.each_spec(directories) do |spec|
    @specs << spec
  end

  # resolver expects one of each spec so uniq here.
  @specs.uniq!
end

Instance Method Details

#find_all(req) ⇒ Object



451
452
453
454
455
# File 'lib/inspec/plugin/v2/installer.rb', line 451

def find_all(req)
  @specs.select { |spec| req.match?(spec) }.map do |spec|
    Gem::Resolver::InstalledSpecification.new(self, spec)
  end
end