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

Returns a new instance of InstalledVendorSet.



493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
# File 'lib/inspec/plugin/v2/installer.rb', line 493

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

  spec_dir = if Gem.respond_to? :default_specifications_dir
               Gem.default_specifications_dir
             else
               Gem::Specification.default_specifications_dir
             end
  directories = [spec_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



527
528
529
530
531
# File 'lib/inspec/plugin/v2/installer.rb', line 527

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