class Inspec::PluginCtl

PLEASE NOTE: The Plugin system is an internal mechanism for connecting inspec components. Its API is currently considered in an alpha state and may change between minor version revisions. A stable plugin API will be released in the future.

Attributes

registry[R]

Public Class Methods

new(home = nil) click to toggle source
# File lib/inspec/plugin/v1/plugins.rb, line 24
def initialize(home = nil)
  @paths = []

  # load plugins in the same gem installation
  lib_home = File.expand_path(File.join(__FILE__, "..", "..", "..", ".."))
  @paths += Dir[lib_home + "/inspec-*-*/lib/inspec-*rb"]

  # traverse out of inspec-vX.Y.Z/lib/inspec/plugins.rb
  @home = home || File.join(Inspec.config_dir, "plugins")
  @paths += Dir[File.join(@home, "**{,/*/**}", "*.gemspec")]
    .map { |x| File.dirname(x) }
    .map { |x| Dir[File.join(x, "lib", "inspec-*.rb")] }
    .flatten

  # load bundled plugins
  bundled_dir = __dir__
  @paths += Dir[File.join(bundled_dir, "..", "bundles", "inspec-*.rb")].flatten

  # map paths to names
  @registry = Hash[@paths.map do |x|
    [File.basename(x, ".rb"), x]
  end]
end

Public Instance Methods

load(name) click to toggle source
# File lib/inspec/plugin/v1/plugins.rb, line 48
def load(name)
  path = @registry[name]
  if path.nil?
    raise "Couldn't find plugin #{name}. Searching in #{@home}"
  end

  # puts "Loading plugin #{name} from #{path}"
  require path
end