Class: Inspec::Backend

Inherits:
Object
  • Object
show all
Defined in:
lib/inspec/backend.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(backend) ⇒ Backend

Returns a new instance of Backend.



68
69
70
71
# File 'lib/inspec/backend.rb', line 68

def initialize(backend)
  self.backend = backend
  self.class.add_resource_methods
end

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(id, *args, &blk) ⇒ Object



99
100
101
102
103
# File 'lib/inspec/backend.rb', line 99

def method_missing(id, *args, &blk)
  Inspec::DSL.method_missing_resource(self, id, *args)
rescue LoadError
  super
end

Instance Attribute Details

#backendObject

Returns the value of attribute backend.



11
12
13
# File 'lib/inspec/backend.rb', line 11

def backend
  @backend
end

#profileObject

Returns the value of attribute profile.



12
13
14
# File 'lib/inspec/backend.rb', line 12

def profile
  @profile
end

Class Method Details

.add_resource_methodsObject

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



18
19
20
21
22
23
24
# 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) ⇒ TransportBackend

Create the transport backend with aggregated resources.

Parameters:

Returns:

  • (TransportBackend)

    enriched transport instance



30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
# 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}"
rescue Errno::ENOENT => e
  raise "#{e.message}"
end

Instance Method Details

#inspectObject

Ruby internal for pretty-printing a summary for this class



95
96
97
# File 'lib/inspec/backend.rb', line 95

def inspect
  "Inspec::Backend::Class @transport=#{backend.class}"
end

#local_transport?Boolean

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.

Returns:

  • (Boolean)


83
84
85
86
87
# File 'lib/inspec/backend.rb', line 83

def local_transport?
  return false unless defined?(Train::Transports::Local)

  backend.is_a?(Train::Transports::Local::Connection)
end

#to_sObject

Ruby internal for printing a nice name for this class



90
91
92
# File 'lib/inspec/backend.rb', line 90

def to_s
  "Inspec::Backend::Class"
end

#versionString

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

Returns:

  • (String)

    inspec version



76
77
78
# File 'lib/inspec/backend.rb', line 76

def version
  Inspec::VERSION
end