Class: Inspec::ProfileContext

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

Overview

rubocop:disable Metrics/ClassLength

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(profile_id, backend, conf) ⇒ ProfileContext

Returns a new instance of ProfileContext.



18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# File 'lib/inspec/profile_context.rb', line 18

def initialize(profile_id, backend, conf)
  if backend.nil?
    fail 'ProfileContext is initiated with a backend == nil. ' \
         'This is a backend error which must be fixed upstream.'
  end
  @profile_id = profile_id
  @backend = backend
  @conf = conf.dup
  @rules = {}
  @subcontexts = []
  @dependencies = {}
  @dependencies = conf['profile'].locked_dependencies unless conf['profile'].nil?
  @require_loader = ::Inspec::RequireLoader.new
  @attributes = []
  reload_dsl
end

Instance Attribute Details

#attributesObject (readonly)

Returns the value of attribute attributes.



17
18
19
# File 'lib/inspec/profile_context.rb', line 17

def attributes
  @attributes
end

#profile_idObject (readonly)

Returns the value of attribute profile_id.



17
18
19
# File 'lib/inspec/profile_context.rb', line 17

def profile_id
  @profile_id
end

#rulesObject (readonly)

Returns the value of attribute rules.



17
18
19
# File 'lib/inspec/profile_context.rb', line 17

def rules
  @rules
end

Class Method Details

.for_profile(profile, backend) ⇒ Object



13
14
15
# File 'lib/inspec/profile_context.rb', line 13

def self.for_profile(profile, backend)
  new(profile.name, backend, { 'profile' => profile })
end

Instance Method Details

#add_subcontext(context) ⇒ Object



47
48
49
# File 'lib/inspec/profile_context.rb', line 47

def add_subcontext(context)
  @subcontexts << context
end

#all_rulesObject



41
42
43
44
45
# File 'lib/inspec/profile_context.rb', line 41

def all_rules
  ret = @rules.values
  ret += @subcontexts.map(&:all_rules).flatten
  ret
end

#load(content, source = nil, line = nil) ⇒ Object



74
75
76
77
78
79
80
81
82
83
84
# File 'lib/inspec/profile_context.rb', line 74

def load(content, source = nil, line = nil)
  Inspec::Log.debug("Loading #{source || '<anonymous content>'} into #{self}")
  @current_load = { file: source }
  if content.is_a? Proc
    @profile_context.instance_eval(&content)
  elsif source.nil? && line.nil?
    @profile_context.instance_eval(content)
  else
    @profile_context.instance_eval(content, source || 'unknown', line || 1)
  end
end

#load_libraries(libs) ⇒ Object



51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
# File 'lib/inspec/profile_context.rb', line 51

def load_libraries(libs)
  lib_prefix = 'libraries' + File::SEPARATOR
  autoloads = []

  libs.each do |content, source, line|
    path = source
    if source.start_with?(lib_prefix)
      path = source.sub(lib_prefix, '')
      autoloads.push(path) if File.dirname(path) == '.'
    end

    @require_loader.add(path, content, source, line)
  end

  # load all files directly that are flat inside the libraries folder
  autoloads.each do |path|
    next unless path.end_with?('.rb')
    load(*@require_loader.load(path)) unless @require_loader.loaded?(path)
  end

  reload_dsl
end

#register_attribute(name, options = {}) ⇒ Object



105
106
107
108
109
110
111
112
# File 'lib/inspec/profile_context.rb', line 105

def register_attribute(name, options = {})
  # we need to return an attribute object, to allow dermination of default values
  attr = Attribute.new(name, options)
  # read value from given gived values
  attr.value(@conf['attributes'][attr.name]) unless @conf['attributes'].nil?
  @attributes.push(attr)
  attr.value
end

#register_rule(r) ⇒ Object



90
91
92
93
94
95
96
97
98
99
100
101
102
103
# File 'lib/inspec/profile_context.rb', line 90

def register_rule(r)
  # get the full ID
  r.instance_variable_set(:@__file, @current_load[:file])
  r.instance_variable_set(:@__group_title, @current_load[:title])

  # add the rule to the registry
  fid = full_id(Inspec::Rule.profile_id(r), Inspec::Rule.rule_id(r))
  existing = @rules[fid]
  if existing.nil?
    @rules[fid] = r
  else
    Inspec::Rule.merge(existing, r)
  end
end

#reload_dslObject



35
36
37
38
39
# File 'lib/inspec/profile_context.rb', line 35

def reload_dsl
  resources_dsl = Inspec::Resource.create_dsl(@backend)
  ctx = create_context(resources_dsl, rule_context(resources_dsl))
  @profile_context = ctx.new(@backend, @conf, @dependencies, @require_loader)
end

#set_header(field, val) ⇒ Object



114
115
116
# File 'lib/inspec/profile_context.rb', line 114

def set_header(field, val)
  @current_load[field] = val
end

#unregister_rule(id) ⇒ Object



86
87
88
# File 'lib/inspec/profile_context.rb', line 86

def unregister_rule(id)
  @rules.delete(full_id(@profile_id, id))
end