module Inspec::Backend

def self.create(config) # rubocop:disable Metrics/AbcSize

Returns:
  • (TransportBackend) - enriched transport instance

Parameters:
  • config (Hash) -- for the transport backend
def self.create(config) # rubocop:disable Metrics/AbcSize
  conf = Train.target_config(config)
  name = Train.validate_backend(conf)
  transport = Train.create(name, conf)
  if transport.nil?
    raise "Can't find transport backend '#{name}'."
  end
  connection = transport.connection
  if connection.nil?
    raise "Can't connect to transport backend '#{name}'."
  end
  # Set caching settings. We always want to enable caching for
  # the Mock transport for testing.
  if config[:backend_cache] || config[:backend] == :mock
    Inspec::Log.debug 'Option backend_cache is enabled'
    connection.enable_cache(:file)
    connection.enable_cache(:command)
  elsif config[:debug_shell]
    Inspec::Log.debug 'Option backend_cache is disabled'
    connection.disable_cache(:file)
    connection.disable_cache(:command)
  else
    Inspec::Log.debug 'Option backend_cache is disabled'
    connection.disable_cache(:file)
    connection.disable_cache(:command)
  end
  cls = Class.new do
    include Base
    define_method :backend do
      connection
    end
    Inspec::Resource.registry.each do |id, r|
      define_method id.to_sym do |*args|
        r.new(self, id.to_s, *args)
      end
    end
  end
  cls.new
rescue Train::ClientError => e
  raise "Client error, can't connect to '#{name}' backend: #{e.message}"
rescue Train::TransportError => e
  raise "Transport error, can't connect to '#{name}' backend: #{e.message}"
end