oscal 0.1.0 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.docker/Dockerfile +19 -0
- data/.docker/Makefile +43 -0
- data/.docker/docker-compose.yml +14 -0
- data/.docker/readme.md +61 -0
- data/.github/workflows/rake.yml +15 -0
- data/.github/workflows/release.yml +24 -0
- data/.gitignore +13 -0
- data/.gitmodules +3 -0
- data/.hound.yml +5 -0
- data/.rspec +0 -1
- data/.rubocop.yml +10 -0
- data/.ruby-version +1 -0
- data/Gemfile +4 -0
- data/LICENSE +25 -0
- data/Makefile +1 -0
- data/README.adoc +66 -0
- data/Rakefile +13 -6
- data/bin/console +30 -0
- data/bin/rspec +27 -0
- data/bin/setup +8 -0
- data/docker-compose.yml +1 -0
- data/exe/convert2oscalyaml.rb +560 -0
- data/lib/oscal/add.rb +26 -0
- data/lib/oscal/address.rb +22 -0
- data/lib/oscal/address_line.rb +11 -0
- data/lib/oscal/alter.rb +22 -0
- data/lib/oscal/assembly.rb +119 -0
- data/lib/oscal/assessment_plan.rb +28 -0
- data/lib/oscal/assessment_result.rb +230 -0
- data/lib/oscal/attribute_type_hash.rb +80 -0
- data/lib/oscal/back_matter.rb +20 -0
- data/lib/oscal/base64_object.rb +11 -0
- data/lib/oscal/base_class.rb +50 -0
- data/lib/oscal/catalog.rb +51 -10
- data/lib/oscal/choice.rb +11 -0
- data/lib/oscal/citation.rb +22 -0
- data/lib/oscal/combine.rb +11 -0
- data/lib/oscal/common_utils.rb +35 -0
- data/lib/oscal/constraint.rb +20 -0
- data/lib/oscal/control.rb +20 -30
- data/lib/oscal/custom.rb +22 -0
- data/lib/oscal/datatypes.rb +50 -0
- data/lib/oscal/document_id.rb +11 -0
- data/lib/oscal/email_address.rb +11 -0
- data/lib/oscal/exclude_control.rb +22 -0
- data/lib/oscal/external_id.rb +11 -0
- data/lib/oscal/group.rb +26 -34
- data/lib/oscal/guideline.rb +11 -0
- data/lib/oscal/hash_object.rb +11 -0
- data/lib/oscal/import_object.rb +22 -0
- data/lib/oscal/include_control.rb +22 -0
- data/lib/oscal/insert_control.rb +22 -0
- data/lib/oscal/link.rb +11 -0
- data/lib/oscal/list.rb +160 -0
- data/lib/oscal/location.rb +31 -0
- data/lib/oscal/location_uuid.rb +11 -0
- data/lib/oscal/logger.rb +8 -0
- data/lib/oscal/matching.rb +11 -0
- data/lib/oscal/member_of_organization.rb +11 -0
- data/lib/oscal/merge.rb +20 -0
- data/lib/oscal/metadata_block.rb +28 -13
- data/lib/oscal/modify.rb +22 -0
- data/lib/oscal/parameter.rb +22 -19
- data/lib/oscal/parsing_functions.rb +19 -0
- data/lib/oscal/part.rb +14 -22
- data/lib/oscal/party.rb +36 -0
- data/lib/oscal/party_uuid.rb +11 -0
- data/lib/oscal/profile.rb +33 -7
- data/lib/oscal/property.rb +4 -25
- data/lib/oscal/remove.rb +11 -0
- data/lib/oscal/resource.rb +29 -0
- data/lib/oscal/responsible_party.rb +24 -0
- data/lib/oscal/revision.rb +23 -0
- data/lib/oscal/rlink.rb +20 -0
- data/lib/oscal/role.rb +22 -0
- data/lib/oscal/select.rb +20 -0
- data/lib/oscal/serializer.rb +17 -4
- data/lib/oscal/set_parameter.rb +31 -0
- data/lib/oscal/telephone_number.rb +11 -0
- data/lib/oscal/test.rb +11 -0
- data/lib/oscal/url.rb +11 -0
- data/lib/oscal/value.rb +37 -0
- data/lib/oscal/version.rb +1 -1
- data/lib/oscal/with_id.rb +40 -0
- data/lib/oscal.rb +1 -13
- data/oscal.gemspec +9 -11
- data/spec/oscal/catalog_spec.rb +40 -0
- data/spec/oscal_spec.rb +7 -0
- data/spec/sample_inputs/import-ap.json +4 -0
- data/spec/spec_helper.rb +15 -0
- metadata +84 -10
- data/lib/oscal/component.rb +0 -14
- data/lib/oscal/prose.rb +0 -13
- data/lib/oscal/statement.rb +0 -12
@@ -0,0 +1,35 @@
|
|
1
|
+
module Oscal
|
2
|
+
module CommonUtils
|
3
|
+
def find_object_by_id(id, obj = self, attribute_name = :id)
|
4
|
+
if obj.respond_to?(attribute_name) && obj.send(attribute_name) == id
|
5
|
+
return obj
|
6
|
+
end
|
7
|
+
|
8
|
+
res = nil
|
9
|
+
|
10
|
+
obj.instance_variables.each do |ins_var|
|
11
|
+
val = obj.send(ins_var.to_s.delete("@").to_sym)
|
12
|
+
|
13
|
+
if val.is_a? Array
|
14
|
+
val.each do |v|
|
15
|
+
res = find_object_by_id(id, v, attribute_name.to_sym)
|
16
|
+
break unless res.nil?
|
17
|
+
end
|
18
|
+
else
|
19
|
+
res = find_object_by_id(id, val, attribute_name.to_sym)
|
20
|
+
end
|
21
|
+
|
22
|
+
break unless res.nil?
|
23
|
+
end
|
24
|
+
|
25
|
+
res
|
26
|
+
end
|
27
|
+
|
28
|
+
def self.included(klass)
|
29
|
+
klass.extend(ClassMethods)
|
30
|
+
end
|
31
|
+
|
32
|
+
module ClassMethods
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require_relative "base_class"
|
2
|
+
|
3
|
+
module Oscal
|
4
|
+
class Constraint < Oscal::BaseClass
|
5
|
+
KEY = %i(description tests)
|
6
|
+
|
7
|
+
attr_accessor *KEY
|
8
|
+
|
9
|
+
attr_serializable *KEY
|
10
|
+
|
11
|
+
def set_value(key_name, val)
|
12
|
+
case key_name
|
13
|
+
when "test"
|
14
|
+
Test.wrap(val)
|
15
|
+
else
|
16
|
+
val
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
data/lib/oscal/control.rb
CHANGED
@@ -1,37 +1,27 @@
|
|
1
|
-
|
2
|
-
class Control
|
3
|
-
KEY = %i(id title params props parts)
|
4
|
-
attr_accessor *KEY
|
5
|
-
|
6
|
-
def self.wrap(obj)
|
7
|
-
return obj if obj.is_a? Control
|
8
|
-
return Control.new(obj) unless obj.is_a? Array
|
9
|
-
|
10
|
-
obj.map do |x|
|
11
|
-
Control.wrap(x)
|
12
|
-
end
|
13
|
-
end
|
1
|
+
require_relative "base_class"
|
14
2
|
|
15
|
-
|
16
|
-
|
17
|
-
|
3
|
+
module Oscal
|
4
|
+
class Control < Oscal::BaseClass
|
5
|
+
KEY = %i(id klass title params props links parts controls)
|
18
6
|
|
19
|
-
|
20
|
-
raise UnknownAttributeError.new("Unknown key `#{key}` in Control")
|
21
|
-
end
|
7
|
+
attr_accessor *KEY
|
22
8
|
|
23
|
-
|
24
|
-
when 'params'
|
25
|
-
Parameter.wrap(val)
|
26
|
-
when 'props'
|
27
|
-
Property.wrap(val)
|
28
|
-
when 'parts'
|
29
|
-
Part.wrap(val)
|
30
|
-
else
|
31
|
-
val
|
32
|
-
end
|
9
|
+
attr_serializable *KEY
|
33
10
|
|
34
|
-
|
11
|
+
def set_value(key_name, val)
|
12
|
+
case key_name
|
13
|
+
when "params"
|
14
|
+
Parameter.wrap(val)
|
15
|
+
when "props"
|
16
|
+
Property.wrap(val)
|
17
|
+
when "links"
|
18
|
+
Link.wrap(val)
|
19
|
+
when "parts"
|
20
|
+
Part.wrap(val)
|
21
|
+
when "controls"
|
22
|
+
Control.wrap(val)
|
23
|
+
else
|
24
|
+
val
|
35
25
|
end
|
36
26
|
end
|
37
27
|
end
|
data/lib/oscal/custom.rb
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
require_relative "base_class"
|
2
|
+
|
3
|
+
module Oscal
|
4
|
+
class Custom < Oscal::BaseClass
|
5
|
+
KEY = %i(groups insert_controls)
|
6
|
+
|
7
|
+
attr_accessor *KEY
|
8
|
+
|
9
|
+
attr_serializable *KEY
|
10
|
+
|
11
|
+
def set_value(key_name, val)
|
12
|
+
case key_name
|
13
|
+
when "groups"
|
14
|
+
Group.wrap(val)
|
15
|
+
when "insert_controls"
|
16
|
+
InsertControl.wrap(val)
|
17
|
+
else
|
18
|
+
val
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
module Oscal
|
2
|
+
class OscalDatatype < String
|
3
|
+
include ParsingLogger
|
4
|
+
|
5
|
+
def validate(value)
|
6
|
+
@logger.debug("validating against pattern #{self.class::PATTERN}")
|
7
|
+
unless self.class::PATTERN.match?(value)
|
8
|
+
raise Oscal::InvalidTypeError,
|
9
|
+
"#{value.to_s[0, 25]} does not match Pattern for #{self.class}"
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
def initialize(input)
|
14
|
+
super
|
15
|
+
@logger = get_logger
|
16
|
+
@logger.debug("#{self.class}.new called with #{input.to_s[0, 25]}")
|
17
|
+
validate(input) # Will raise an Error if invalid
|
18
|
+
@logger.debug("validation successful.")
|
19
|
+
end
|
20
|
+
|
21
|
+
def to_s
|
22
|
+
@value
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
class DateTimeWithTimezoneDataType < OscalDatatype
|
27
|
+
PATTERN = /(((2000|2400|2800|(19|2[0-9](0[48]|[2468][048]|[13579][26])))-02-29)|(((19|2[0-9])[0-9]{2})-02-(0[1-9]|1[0-9]|2[0-8]))|(((19|2[0-9])[0-9]{2})-(0[13578]|10|12)-(0[1-9]|[12][0-9]|3[01]))|(((19|2[0-9])[0-9]{2})-(0[469]|11)-(0[1-9]|[12][0-9]|30)))T(2[0-3]|[01][0-9]):([0-5][0-9]):([0-5][0-9])(\.[0-9]+)?(Z|(-((0[0-9]|1[0-2]):00|0[39]:30)|\+((0[0-9]|1[0-4]):00|(0[34569]|10):30|(0[58]|12):45)))/
|
28
|
+
end
|
29
|
+
|
30
|
+
class MarkupMultilineDataType < OscalDatatype
|
31
|
+
# Note that there are complex rules for MarkupMultilineDataType that we are ignoring
|
32
|
+
PATTERN = /.*/
|
33
|
+
end
|
34
|
+
|
35
|
+
class StringDataType < OscalDatatype
|
36
|
+
PATTERN = /\S(.*\S)?/
|
37
|
+
end
|
38
|
+
|
39
|
+
class TokenDataType < OscalDatatype
|
40
|
+
PATTERN = /(\p{L}|_)(\p{L}|\p{N}|[.\-_])*/
|
41
|
+
end
|
42
|
+
|
43
|
+
class UriReference < OscalDatatype
|
44
|
+
PATTERN = %r{^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?}
|
45
|
+
end
|
46
|
+
|
47
|
+
class Uuid < OscalDatatype
|
48
|
+
PATTERN = /^[0-9A-Fa-f]{8}-[0-9A-Fa-f]{4}-[45][0-9A-Fa-f]{3}-[89ABab][0-9A-Fa-f]{3}-[0-9A-Fa-f]{12}$/
|
49
|
+
end
|
50
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require_relative "base_class"
|
2
|
+
|
3
|
+
module Oscal
|
4
|
+
class ExcludeControl < Oscal::BaseClass
|
5
|
+
KEY = %i(with_child_controls with_ids matching)
|
6
|
+
|
7
|
+
attr_accessor *KEY
|
8
|
+
|
9
|
+
attr_serializable *KEY
|
10
|
+
|
11
|
+
def set_value(key_name, val)
|
12
|
+
case key_name
|
13
|
+
when "with_ids"
|
14
|
+
WithId.wrap(val)
|
15
|
+
when "matching"
|
16
|
+
Matching.wrap(val)
|
17
|
+
else
|
18
|
+
val
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
data/lib/oscal/group.rb
CHANGED
@@ -1,41 +1,33 @@
|
|
1
|
-
|
2
|
-
class Group
|
3
|
-
KEYS = %i(id class title controls props parts groups)
|
4
|
-
attr_accessor *KEYS
|
5
|
-
|
6
|
-
def self.wrap(obj)
|
7
|
-
return obj if obj.is_a? Group
|
8
|
-
return Group.new(obj) unless obj.is_a? Array
|
1
|
+
require_relative "base_class"
|
9
2
|
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
def initialize(options={})
|
16
|
-
options.each_pair.each do |key,val|
|
17
|
-
key_name = key.gsub('-','_')
|
3
|
+
module Oscal
|
4
|
+
class Group < Oscal::BaseClass
|
5
|
+
KEY = %i(id klass title params props links parts groups
|
6
|
+
controls insert_controls)
|
18
7
|
|
19
|
-
|
20
|
-
raise UnknownAttributeError.new("Unknown key `#{key}` in Group")
|
21
|
-
end
|
8
|
+
attr_accessor *KEY
|
22
9
|
|
23
|
-
|
24
|
-
when 'groups'
|
25
|
-
Group.wrap(val)
|
26
|
-
when 'params'
|
27
|
-
Parameter.wrap(val)
|
28
|
-
when 'props'
|
29
|
-
Property.wrap(val)
|
30
|
-
when 'parts'
|
31
|
-
Part.wrap(val)
|
32
|
-
else
|
33
|
-
val
|
34
|
-
end
|
10
|
+
attr_serializable *KEY
|
35
11
|
|
36
|
-
|
12
|
+
def set_value(key_name, val)
|
13
|
+
case key_name
|
14
|
+
when "params"
|
15
|
+
Parameter.wrap(val)
|
16
|
+
when "props"
|
17
|
+
Property.wrap(val)
|
18
|
+
when "links"
|
19
|
+
Link.wrap(val)
|
20
|
+
when "parts"
|
21
|
+
Part.wrap(val)
|
22
|
+
when "groups"
|
23
|
+
Group.wrap(val)
|
24
|
+
when "controls"
|
25
|
+
Control.wrap(val)
|
26
|
+
when "insert_controls"
|
27
|
+
InsertControl.wrap(val)
|
28
|
+
else
|
29
|
+
val
|
37
30
|
end
|
38
31
|
end
|
39
|
-
|
40
32
|
end
|
41
|
-
end
|
33
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require_relative "base_class"
|
2
|
+
|
3
|
+
module Oscal
|
4
|
+
class ImportObject < Oscal::BaseClass
|
5
|
+
KEY = %i(href include_all include_controls exclude_controls)
|
6
|
+
|
7
|
+
attr_accessor *KEY
|
8
|
+
|
9
|
+
attr_serializable *KEY
|
10
|
+
|
11
|
+
def set_value(key_name, val)
|
12
|
+
case key_name
|
13
|
+
when "include_controls"
|
14
|
+
IncludeControl.wrap(val)
|
15
|
+
when "exclude_controls"
|
16
|
+
ExcludeControl.wrap(val)
|
17
|
+
else
|
18
|
+
val
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require_relative "base_class"
|
2
|
+
|
3
|
+
module Oscal
|
4
|
+
class IncludeControl < Oscal::BaseClass
|
5
|
+
KEY = %i(with_child_controls with_ids matching)
|
6
|
+
|
7
|
+
attr_accessor *KEY
|
8
|
+
|
9
|
+
attr_serializable *KEY
|
10
|
+
|
11
|
+
def set_value(key_name, val)
|
12
|
+
case key_name
|
13
|
+
when "with_ids"
|
14
|
+
WithId.wrap(val)
|
15
|
+
when "matching"
|
16
|
+
Matching.wrap(val)
|
17
|
+
else
|
18
|
+
val
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require_relative "base_class"
|
2
|
+
|
3
|
+
module Oscal
|
4
|
+
class InsertControl < Oscal::BaseClass
|
5
|
+
KEY = %i(order include_all include_controls exclude_controls)
|
6
|
+
|
7
|
+
attr_accessor *KEY
|
8
|
+
|
9
|
+
attr_serializable *KEY
|
10
|
+
|
11
|
+
def set_value(key_name, val)
|
12
|
+
case key_name
|
13
|
+
when "include_controls"
|
14
|
+
IncludeControl.wrap(val)
|
15
|
+
when "exclude_controls"
|
16
|
+
ExcludeControls.wrap(val)
|
17
|
+
else
|
18
|
+
val
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
data/lib/oscal/link.rb
ADDED
data/lib/oscal/list.rb
ADDED
@@ -0,0 +1,160 @@
|
|
1
|
+
require_relative("link")
|
2
|
+
require_relative("property")
|
3
|
+
require_relative("logger")
|
4
|
+
|
5
|
+
module Oscal
|
6
|
+
class OscalArray < Array
|
7
|
+
include ParsingLogger
|
8
|
+
|
9
|
+
def validate_member_type(input)
|
10
|
+
@logger.debug("Validating array members are #{self.class::MEMBER_TYPE}")
|
11
|
+
input.map do |item|
|
12
|
+
self.class::MEMBER_TYPE.new(item)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
def initialize(input)
|
17
|
+
super
|
18
|
+
@logger = get_logger
|
19
|
+
@logger.debug("#{self.class}.new called with #{input.to_s[0, 25]}")
|
20
|
+
validate_member_type(input)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
# These classes define generic arrays of basic DataTypes,
|
25
|
+
# They appear in several different places in the Oscal specs
|
26
|
+
# and can be subclassed with a different name
|
27
|
+
class StringDataTypeArray < Oscal::OscalArray
|
28
|
+
MEMBER_TYPE = StringDataType
|
29
|
+
end
|
30
|
+
|
31
|
+
class TokenDataTypeArray < Oscal::OscalArray
|
32
|
+
MEMBER_TYPE = TokenDataType
|
33
|
+
end
|
34
|
+
|
35
|
+
class UuidArray < Oscal::OscalArray
|
36
|
+
MEMBER_TYPE = Uuid
|
37
|
+
end
|
38
|
+
|
39
|
+
module AssessmentResult
|
40
|
+
class ActivityArray < Oscal::OscalArray
|
41
|
+
MEMBER_TYPE = Activity
|
42
|
+
end
|
43
|
+
|
44
|
+
class AssessmentPlatformArray < Oscal::OscalArray
|
45
|
+
MEMBER_TYPE = AssessmentPlatform
|
46
|
+
end
|
47
|
+
|
48
|
+
class AssessmentTaskArray < Oscal::OscalArray
|
49
|
+
MEMBER_TYPE = AssessmentTask
|
50
|
+
end
|
51
|
+
|
52
|
+
class AssociatedActivityArray < Oscal::OscalArray
|
53
|
+
MEMBER_TYPE = AssociatedActivity
|
54
|
+
end
|
55
|
+
|
56
|
+
class AttestationArray < Oscal::OscalArray
|
57
|
+
MEMBER_TYPE = Attestation
|
58
|
+
end
|
59
|
+
|
60
|
+
class ComponentArray < Oscal::OscalArray
|
61
|
+
MEMBER_TYPE = Component
|
62
|
+
end
|
63
|
+
|
64
|
+
class ControlObjectiveSelectionArray < Oscal::OscalArray
|
65
|
+
MEMBER_TYPE = ControlObjectiveSelection
|
66
|
+
end
|
67
|
+
|
68
|
+
class ControlSelectionArray < Oscal::OscalArray
|
69
|
+
MEMBER_TYPE = ControlSelection
|
70
|
+
end
|
71
|
+
|
72
|
+
class EntryArray < Oscal::OscalArray
|
73
|
+
MEMBER_TYPE = Entry
|
74
|
+
end
|
75
|
+
|
76
|
+
class ExcludeControlArray < Oscal::OscalArray
|
77
|
+
MEMBER_TYPE = ExcludeControl
|
78
|
+
end
|
79
|
+
|
80
|
+
class ExcludeObjectiveArray < Oscal::OscalArray
|
81
|
+
MEMBER_TYPE = ExcludeObjective
|
82
|
+
end
|
83
|
+
|
84
|
+
class FindingArray < Oscal::OscalArray
|
85
|
+
MEMBER_TYPE = Finding
|
86
|
+
end
|
87
|
+
|
88
|
+
class IncludeControlArray < Oscal::OscalArray
|
89
|
+
MEMBER_TYPE = IncludeControl
|
90
|
+
end
|
91
|
+
|
92
|
+
class InventoryItemArray < Oscal::OscalArray
|
93
|
+
MEMBER_TYPE = InventoryItem
|
94
|
+
end
|
95
|
+
|
96
|
+
class LinkArray < Oscal::OscalArray
|
97
|
+
MEMBER_TYPE = Oscal::Link
|
98
|
+
end
|
99
|
+
|
100
|
+
class MethodArray < StringDataTypeArray
|
101
|
+
end
|
102
|
+
|
103
|
+
class ObjectivesAndMethodsArray < Oscal::OscalArray
|
104
|
+
MEMBER_TYPE = ObjectivesAndMethods
|
105
|
+
end
|
106
|
+
|
107
|
+
class ObservationArray < Oscal::OscalArray
|
108
|
+
MEMBER_TYPE = Observation
|
109
|
+
end
|
110
|
+
|
111
|
+
class PartArray < Oscal::OscalArray
|
112
|
+
MEMBER_TYPE = Link
|
113
|
+
end
|
114
|
+
|
115
|
+
class PartyUuidArray < UuidArray
|
116
|
+
end
|
117
|
+
|
118
|
+
class PropArray < Oscal::OscalArray
|
119
|
+
MEMBER_TYPE = Property
|
120
|
+
end
|
121
|
+
|
122
|
+
class RelatedObservationArray < Oscal::OscalArray
|
123
|
+
MEMBER_TYPE = RelatedObservation
|
124
|
+
end
|
125
|
+
|
126
|
+
class RelatedRiskArray < Oscal::OscalArray
|
127
|
+
MEMBER_TYPE = AssociatedRisk
|
128
|
+
end
|
129
|
+
|
130
|
+
class ResponsibleRoleArray < Oscal::OscalArray
|
131
|
+
MEMBER_TYPE = ResponsibleRole
|
132
|
+
end
|
133
|
+
|
134
|
+
class ResultArray < Oscal::OscalArray
|
135
|
+
MEMBER_TYPE = Result
|
136
|
+
end
|
137
|
+
|
138
|
+
class RiskArray < Oscal::OscalArray
|
139
|
+
MEMBER_TYPE = Risk
|
140
|
+
end
|
141
|
+
|
142
|
+
class StatementIdArray < TokenDataTypeArray
|
143
|
+
end
|
144
|
+
|
145
|
+
class StepArray < Oscal::OscalArray
|
146
|
+
MEMBER_TYPE = Step
|
147
|
+
end
|
148
|
+
|
149
|
+
class SubjectArray < Oscal::OscalArray
|
150
|
+
MEMBER_TYPE = Subject
|
151
|
+
end
|
152
|
+
|
153
|
+
class TypeArray < TokenDataTypeArray
|
154
|
+
end
|
155
|
+
|
156
|
+
class UserArray < Oscal::OscalArray
|
157
|
+
MEMBER_TYPE = User
|
158
|
+
end
|
159
|
+
end
|
160
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
require_relative "base_class"
|
2
|
+
|
3
|
+
module Oscal
|
4
|
+
class Location < Oscal::BaseClass
|
5
|
+
KEY = %i(uuid title address email_addresses telephone_numbers urls
|
6
|
+
props links remakrs)
|
7
|
+
|
8
|
+
attr_accessor *KEY
|
9
|
+
|
10
|
+
attr_serializable *KEY
|
11
|
+
|
12
|
+
def set_value(key_name, val)
|
13
|
+
case key_name
|
14
|
+
when "address"
|
15
|
+
Address.wrap(val)
|
16
|
+
when "email_addresses"
|
17
|
+
EmailAddress.wrap(val)
|
18
|
+
when "telephone_numbers"
|
19
|
+
TelephoneNumber.wrap(val)
|
20
|
+
when "urls"
|
21
|
+
Url.wrap(val)
|
22
|
+
when "props"
|
23
|
+
Property.wrap(val)
|
24
|
+
when "links"
|
25
|
+
Link.wrap(val)
|
26
|
+
else
|
27
|
+
val
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
data/lib/oscal/logger.rb
ADDED
data/lib/oscal/merge.rb
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
require_relative "base_class"
|
2
|
+
|
3
|
+
module Oscal
|
4
|
+
class Merge < Oscal::BaseClass
|
5
|
+
KEY = %i(combine flat as_is custom)
|
6
|
+
|
7
|
+
attr_accessor *KEY
|
8
|
+
|
9
|
+
attr_serializable *KEY
|
10
|
+
|
11
|
+
def set_value(key_name, val)
|
12
|
+
case key_name
|
13
|
+
when "custom"
|
14
|
+
Custom.wrap(val)
|
15
|
+
else
|
16
|
+
val
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|