Class: ComplianceEngine::Collection

Inherits:
Object
  • Object
show all
Defined in:
lib/compliance_engine/collection.rb

Overview

A generic compliance engine data collection

Direct Known Subclasses

Ces, Checks, Controls, Profiles

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(data) ⇒ Collection

A generic compliance engine data collection

Parameters:



10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# File 'lib/compliance_engine/collection.rb', line 10

def initialize(data)
  context_variables.each { |var| instance_variable_set(var, data.instance_variable_get(var)) }
  @collection ||= {}
  hash_key = key
  data.files.each do |file|
    file_data = data.get(file)
    unless file_data.is_a?(Hash)
      ComplianceEngine.log.debug "Skipping #{file}: expected Hash content, got #{file_data.class}"
      next
    end

    entries = file_data[hash_key]
    next if entries.nil?

    unless entries.is_a?(Hash)
      ComplianceEngine.log.error "Expected '#{hash_key}' in #{file} to be a Hash, got #{entries.class}"
      next
    end

    entries.each do |k, v|
      @collection[k] ||= collected.new(k, data: self)
      @collection[k].add(file, v)
    end
  end
end

Instance Attribute Details

#collectionObject

Returns the value of attribute collection.



36
37
38
# File 'lib/compliance_engine/collection.rb', line 36

def collection
  @collection
end

#enforcement_toleranceObject

Returns the value of attribute enforcement_tolerance.



36
37
38
# File 'lib/compliance_engine/collection.rb', line 36

def enforcement_tolerance
  @enforcement_tolerance
end

#environment_dataObject

Returns the value of attribute environment_data.



36
37
38
# File 'lib/compliance_engine/collection.rb', line 36

def environment_data
  @environment_data
end

#factsObject

Returns the value of attribute facts.



36
37
38
# File 'lib/compliance_engine/collection.rb', line 36

def facts
  @facts
end

Instance Method Details

#[](key) ⇒ Object

Return a single value from the collection

Parameters:

  • key (String)

    the key of the value to return

Returns:

  • (Object)

    the value of the key



95
96
97
# File 'lib/compliance_engine/collection.rb', line 95

def [](key)
  collection[key]
end

#all?(&block) ⇒ TrueClass, FalseClass

Return true if all of the values in the collection match the block

Parameters:

  • block (Proc)

    the block to execute

Returns:

  • (TrueClass, FalseClass)

    true if all of the values in the collection match the block



144
145
146
# File 'lib/compliance_engine/collection.rb', line 144

def all?(&block)
  to_h.all?(&block)
end

#any?(&block) ⇒ TrueClass, FalseClass

Return true if any of the values in the collection match the block

Parameters:

  • block (Proc)

    the block to execute

Returns:

  • (TrueClass, FalseClass)

    true if any of the values in the collection match the block



136
137
138
# File 'lib/compliance_engine/collection.rb', line 136

def any?(&block)
  to_h.any?(&block)
end

#each(&block) ⇒ self, Enumerator

Iterates over the collection

Parameters:

  • block (Proc)

    the block to execute

Returns:

  • (self, Enumerator)


103
104
105
106
107
108
# File 'lib/compliance_engine/collection.rb', line 103

def each(&block)
  return to_enum(:each) unless block

  to_h.each(&block)
  self
end

#each_key(&block) ⇒ self, Enumerator

Iterates over keys in the collection

Parameters:

  • block (Proc)

    the block to execute

Returns:

  • (self, Enumerator)


125
126
127
128
129
130
# File 'lib/compliance_engine/collection.rb', line 125

def each_key(&block)
  return to_enum(:each_key) unless block

  to_h.each_key(&block)
  self
end

#each_value(&block) ⇒ self, Enumerator

Iterates over values in the collection

Parameters:

  • block (Proc)

    the block to execute

Returns:

  • (self, Enumerator)


114
115
116
117
118
119
# File 'lib/compliance_engine/collection.rb', line 114

def each_value(&block)
  return to_enum(:each_value) unless block

  to_h.each_value(&block)
  self
end

#initialize_copy(_source) ⇒ NilClass

Ensure that cloned/duped objects get independent component instances.

Ruby’s default clone/dup is a shallow copy, so @collection would be shared between the source and the copy, and every Component inside it would be the same object. Calling invalidate_cache on one copy would then propagate its facts into those shared components, silently affecting the other copy’s view of the data.

Duping each Component (which triggers Component#initialize_copy) gives every copy of the Collection its own independent components. Any derived caches on the Collection itself (e.g. @by_oval_id in Ces) are cleared so each copy rebuilds them from its own component set.

Returns:

  • (NilClass)


63
64
65
66
67
68
# File 'lib/compliance_engine/collection.rb', line 63

def initialize_copy(_source)
  super
  @collection = @collection.transform_values(&:dup)
  (instance_variables - (context_variables + [:@collection])).each { |var| instance_variable_set(var, nil) }
  nil
end

#invalidate_cache(data = nil) ⇒ NilClass

Invalidate the cache of computed data

Parameters:

Returns:

  • (NilClass)


42
43
44
45
46
47
# File 'lib/compliance_engine/collection.rb', line 42

def invalidate_cache(data = nil)
  context_variables.each { |var| instance_variable_set(var, data&.instance_variable_get(var)) }
  collection.each_value { |obj| obj.invalidate_cache(data) }
  (instance_variables - (context_variables + [:@collection])).each { |var| instance_variable_set(var, nil) }
  nil
end

#keysArray

Returns the keys of the collection

Returns:

  • (Array)

    the keys of the collection



80
81
82
# File 'lib/compliance_engine/collection.rb', line 80

def keys
  to_h.keys
end

#reject(&block) ⇒ ComplianceEngine::Collection, Enumerator

Filter out values in the collection

Parameters:

  • block (Proc)

    the block to execute

Returns:



166
167
168
169
170
171
172
# File 'lib/compliance_engine/collection.rb', line 166

def reject(&block)
  return to_enum(:reject) unless block_given?

  result = dup
  result.collection = result.to_h.reject(&block)
  result
end

#select(&block) ⇒ ComplianceEngine::Collection, Enumerator Also known as: filter

Select values in the collection

Parameters:

  • block (Proc)

    the block to execute

Returns:



152
153
154
155
156
157
158
# File 'lib/compliance_engine/collection.rb', line 152

def select(&block)
  return to_enum(:select) unless block_given?

  result = dup
  result.collection = result.to_h.select(&block)
  result
end

#to_hHash

Converts the object to a hash representation

Returns:

  • (Hash)

    the hash representation of the object



73
74
75
# File 'lib/compliance_engine/collection.rb', line 73

def to_h
  collection.reject { |k, _| k.is_a?(Symbol) }
end

#transform_values(&block) ⇒ Hash, Enumerator

Transform values in the collection

Parameters:

  • block (Proc)

    the block to execute

Returns:

  • (Hash, Enumerator)

    a hash with transformed values, or an Enumerator when no block is given



178
179
180
# File 'lib/compliance_engine/collection.rb', line 178

def transform_values(&block)
  to_h.transform_values(&block)
end

#valuesArray

Returns the values of the collection

Returns:

  • (Array)

    the values of the collection



87
88
89
# File 'lib/compliance_engine/collection.rb', line 87

def values
  to_h.values
end