class Inspec::Backend

Attributes

backend[RW]
profile[RW]

Public Class Methods

add_resource_methods() click to toggle source

Creates a bunch of predefined resource methods based on the current registry at the time. See method_missing for what else can happen.

# File lib/inspec/backend.rb, line 18
def self.add_resource_methods # TODO: remove
  Inspec::Resource.registry.each do |id, r|
    define_method id.to_sym do |*args|
      r.new(self, id.to_s, *args)
    end
  end
end
create(config) click to toggle source

Create the transport backend with aggregated resources.

@param [Inspec::Config] config for the transport backend @return [TransportBackend] enriched transport instance

# File lib/inspec/backend.rb, line 30
def self.create(config) # rubocop:disable Metrics/AbcSize
  train_credentials = config.unpack_train_credentials
  transport_name = Train.validate_backend(train_credentials)
  transport = Train.create(transport_name, train_credentials)
  if transport.nil?
    raise "Can't find transport backend '#{transport_name}'."
  end

  connection = transport.connection
  if connection.nil?
    raise "Can't connect to transport backend '#{transport_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

  Inspec::Backend.new(connection)
rescue Train::ClientError => e
  raise "Client error, can't connect to '#{transport_name}' backend: #{e.message}"
rescue Train::TransportError => e
  raise "Transport error, can't connect to '#{transport_name}' backend: #{e.message}"
end
new(backend) click to toggle source
# File lib/inspec/backend.rb, line 66
def initialize(backend)
  self.backend = backend
  self.class.add_resource_methods
end

Public Instance Methods

inspect() click to toggle source

Ruby internal for pretty-printing a summary for this class

# File lib/inspec/backend.rb, line 93
def inspect
  "Inspec::Backend::Class @transport=#{backend.class}"
end
local_transport?() click to toggle source

Determine whether the connection/transport is a local connection Useful for resources to modify behavior as necessary, such as using the Ruby stdlib for a better experience.

# File lib/inspec/backend.rb, line 81
def local_transport?
  return false unless defined?(Train::Transports::Local)

  backend.is_a?(Train::Transports::Local::Connection)
end
method_missing(id, *args, &blk) click to toggle source
Calls superclass method
# File lib/inspec/backend.rb, line 97
def method_missing(id, *args, &blk)
  Inspec::DSL.method_missing_resource(self, id, *args)
rescue LoadError
  super
end
to_s() click to toggle source

Ruby internal for printing a nice name for this class

# File lib/inspec/backend.rb, line 88
def to_s
  "Inspec::Backend::Class"
end
version() click to toggle source

Provide a shorthand to retrieve the inspec version from within a profile

@return [String] inspec version

# File lib/inspec/backend.rb, line 74
def version
  Inspec::VERSION
end