module Inspec::DSL::RequireOverride

Public Instance Methods

__ruby_require(path)

Save the toplevel require method to load all ruby dependencies. It is used whenever the `require 'lib'` is not in libraries.

Alias for: require
require(path) click to toggle source

This is our own require override, to be used in LibraryEvalContext and ControlEvalContext.

Any top level libraries file (autoloaded) that requires a second-level libraries file.

in load_libraries

in top level libraries file to be autoloaded
  that has a require to a known file that is NOT loaded yet

ProfileContext#initialize

-> library_eval_context

ProfileContext#load_libraries autoload

-> load_library_file(@library_eval_context)

probably most of this comment is useless, but it was hard to discover so I'm adding it for others.

# File lib/inspec/dsl_shared.rb, line 31
def require(path)
  rbpath = path + ".rb"
  return __ruby_require(path) unless @require_loader.exists?(rbpath)
  return false if @require_loader.loaded?(rbpath)

  # This is equivalent to calling `require 'lib'` with lib on disk.
  # We cannot rely on libraries residing on disk however.
  # TODO: Sandboxing.
  content, path, line = @require_loader.load(rbpath)

  # If we are in the realm of libraries and the LibraryEvalContext
  # we should have access to the __inspec_binding, which is a Binding
  # context that provides the correct plane to evaluate all required files to.
  # It will ensure that embedded calls to `require` still call this
  # method and get loaded from their correct paths.
  if defined?(__inspec_binding)
    __inspec_binding.eval(content, path, line)
  else
    eval(content, TOPLEVEL_BINDING, path, line) # rubocop:disable Security/Eval
  end
end
Also aliased as: __ruby_require