oscal 0.1.0 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|