Class: Oscal::Assembly
Direct Known Subclasses
Oscal::AssessmentPlan::AssessmentPlan, Oscal::AssessmentPlan::ImportSSP, Oscal::AssessmentPlan::ReviewedControls, Oscal::AssessmentResult::Activity, Oscal::AssessmentResult::AssessmentAssets, Oscal::AssessmentResult::AssessmentPlatform, Oscal::AssessmentResult::AssessmentResult, Oscal::AssessmentResult::AssessmentTask, Oscal::AssessmentResult::AssociatedActivity, Oscal::AssessmentResult::AssociatedRisk, Oscal::AssessmentResult::Attestation, Oscal::AssessmentResult::Attestations, Oscal::AssessmentResult::Component, Oscal::AssessmentResult::ControlObjectiveSelection, Oscal::AssessmentResult::ControlSelection, Oscal::AssessmentResult::Entry, Oscal::AssessmentResult::ExcludeObjective, Oscal::AssessmentResult::Finding, Oscal::AssessmentResult::ImportAP, Oscal::AssessmentResult::IncludeAll, Oscal::AssessmentResult::IncludeControl, Oscal::AssessmentResult::IncludeObjective, Oscal::AssessmentResult::InventoryItem, Oscal::AssessmentResult::LocalDefinitions, Oscal::AssessmentResult::ObjectivesAndMethods, Oscal::AssessmentResult::Observation, Oscal::AssessmentResult::RelatedControls, Oscal::AssessmentResult::RelatedObservation, Oscal::AssessmentResult::ResponsibleRole, Oscal::AssessmentResult::Result, Oscal::AssessmentResult::ReviewedControls, Oscal::AssessmentResult::Risk, Oscal::AssessmentResult::StatusAssembly, Oscal::AssessmentResult::Step, Oscal::AssessmentResult::Subject, Oscal::AssessmentResult::Target, Oscal::AssessmentResult::Task, Oscal::AssessmentResult::User
Instance Method Summary
collapse
#get_logger, logger=
#str2sym, #sym2str
Constructor Details
#initialize(input) ⇒ Assembly
Returns a new instance of Assembly.
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
|
# File 'lib/oscal/assembly.rb', line 104
def initialize(input)
@logger = get_logger
@logger.debug("#{self.class}.new called with #{input.to_s[0, 25]}")
sym_hash = check_and_normalize_input(input)
validate_input(sym_hash)
sym_hash.each do |key, value|
method("#{key}=".to_sym).call(validate_content(key, value))
end
end
|
Instance Method Details
#allowed_attributes ⇒ Object
28
29
30
31
32
33
34
|
# File 'lib/oscal/assembly.rb', line 28
def allowed_attributes
if self.class.constants.include?(:OPTIONAL)
mandatory_attributes + self.class::OPTIONAL
else
mandatory_attributes
end
end
|
55
56
57
58
59
60
61
62
63
64
65
66
|
# File 'lib/oscal/assembly.rb', line 55
def check_and_normalize_input(input)
@logger.debug("Checking to see if input is a Hash")
unless input.is_a? Hash
raise Oscal::InvalidTypeError,
"Assemblies can only be created from Hash types"
end
@logger.debug("Assembly is hash with keys #{input.keys}")
@logger.debug("Attempting to transform strings to symbols.")
input.transform_keys { |key| str2sym(key) }
end
|
83
84
85
86
87
88
89
90
|
# File 'lib/oscal/assembly.rb', line 83
def (allowed, provided)
@logger.debug("Checking allowed values: #{allowed}")
= provided.keys - provided.keys.intersection(allowed)
if .length.positive?
raise Oscal::InvalidTypeError,
"Extra attributes provided #{}"
end
end
|
#mandatory_attributes ⇒ Object
20
21
22
23
24
25
26
|
# File 'lib/oscal/assembly.rb', line 20
def mandatory_attributes
if self.class.constants.include?(:MANDATORY)
self.class::MANDATORY
else
[]
end
end
|
#missing_values?(mandatory, provided) ⇒ Boolean
74
75
76
77
78
79
80
81
|
# File 'lib/oscal/assembly.rb', line 74
def missing_values?(mandatory, provided)
@logger.debug("Checking mandatory values: #{mandatory}")
missing_values = mandatory - provided.keys.intersection(mandatory)
if missing_values.length.positive?
raise Oscal::InvalidTypeError,
"Missing mandatory values: #{missing_values}"
end
end
|
#to_h ⇒ Object
40
41
42
43
44
45
46
47
48
49
50
51
52
53
|
# File 'lib/oscal/assembly.rb', line 40
def to_h
allowed_attributes.each_with_object({}) do |var, hash|
attr_value = method(var).call
hash[sym2str(var)] = if attr_value == nil
next
elsif attr_value.class <= OscalArray
attr_value.each(&:to_h)
elsif attr_value.class <= OscalDatatype
attr_value
else
attr_value.to_h
end
end
end
|
#to_json(*args) ⇒ Object
36
37
38
|
# File 'lib/oscal/assembly.rb', line 36
def to_json(*args)
to_h.to_json(*args)
end
|
#validate_content(key, value) ⇒ Object
92
93
94
95
96
97
98
99
100
101
102
|
# File 'lib/oscal/assembly.rb', line 92
def validate_content(key, value)
@logger.info("Validating #{value}")
expected_class = Oscal::get_type_of_attribute(key)
@logger.debug("Attempting to instiate #{key} as #{expected_class}")
instantiated = expected_class.new(value)
rescue Oscal::InvalidTypeError
raise Oscal::InvalidTypeError,
"Value #{value.to_s[0, 25]} not a valid #{key}"
else
instantiated end
|
68
69
70
71
72
|
# File 'lib/oscal/assembly.rb', line 68
def validate_input(input)
@logger.debug("Checking mandatory and optional values.")
missing_values?(mandatory_attributes, input)
(allowed_attributes, input)
end
|