oscal 0.1.1 → 0.2.2
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/.gitignore +2 -0
 - data/.rspec +0 -1
 - data/.rubocop.yml +1 -1
 - data/.ruby-version +1 -0
 - data/Gemfile +2 -0
 - data/LICENSE +25 -0
 - data/Makefile +1 -0
 - data/README.adoc +3 -0
 - data/Rakefile +13 -6
 - data/bin/console +2 -2
 - data/bin/rspec +27 -0
 - data/docker-compose.yml +1 -0
 - data/lib/oscal/add.rb +5 -4
 - data/lib/oscal/address.rb +3 -2
 - data/lib/oscal/address_line.rb +1 -0
 - data/lib/oscal/alter.rb +3 -2
 - 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 +81 -0
 - data/lib/oscal/back_matter.rb +2 -1
 - data/lib/oscal/base64_object.rb +1 -0
 - data/lib/oscal/base_class.rb +5 -4
 - data/lib/oscal/catalog.rb +8 -7
 - data/lib/oscal/choice.rb +1 -0
 - data/lib/oscal/citation.rb +3 -2
 - data/lib/oscal/combine.rb +1 -0
 - data/lib/oscal/common_utils.rb +1 -1
 - data/lib/oscal/constraint.rb +2 -1
 - data/lib/oscal/control.rb +6 -5
 - data/lib/oscal/custom.rb +3 -2
 - data/lib/oscal/datatypes.rb +50 -0
 - data/lib/oscal/document_id.rb +1 -0
 - data/lib/oscal/email_address.rb +1 -0
 - data/lib/oscal/exclude_control.rb +3 -2
 - data/lib/oscal/external_id.rb +1 -0
 - data/lib/oscal/group.rb +9 -8
 - data/lib/oscal/guideline.rb +1 -0
 - data/lib/oscal/hash_object.rb +1 -0
 - data/lib/oscal/import_object.rb +3 -2
 - data/lib/oscal/include_control.rb +3 -2
 - data/lib/oscal/insert_control.rb +3 -2
 - data/lib/oscal/link.rb +1 -0
 - data/lib/oscal/list.rb +160 -0
 - data/lib/oscal/location.rb +8 -7
 - data/lib/oscal/location_uuid.rb +1 -0
 - data/lib/oscal/logger.rb +12 -0
 - data/lib/oscal/matching.rb +1 -0
 - data/lib/oscal/member_of_organization.rb +1 -0
 - data/lib/oscal/merge.rb +2 -1
 - data/lib/oscal/metadata_block.rb +11 -10
 - data/lib/oscal/modify.rb +3 -2
 - data/lib/oscal/parameter.rb +8 -7
 - data/lib/oscal/parsing_functions.rb +19 -0
 - data/lib/oscal/part.rb +4 -3
 - data/lib/oscal/party.rb +11 -10
 - data/lib/oscal/party_uuid.rb +1 -0
 - data/lib/oscal/profile.rb +7 -6
 - data/lib/oscal/property.rb +1 -0
 - data/lib/oscal/remove.rb +1 -0
 - data/lib/oscal/resource.rb +7 -6
 - data/lib/oscal/responsible_party.rb +11 -10
 - data/lib/oscal/revision.rb +4 -3
 - data/lib/oscal/rlink.rb +2 -1
 - data/lib/oscal/role.rb +3 -2
 - data/lib/oscal/select.rb +2 -1
 - data/lib/oscal/set_parameter.rb +8 -7
 - data/lib/oscal/telephone_number.rb +1 -0
 - data/lib/oscal/test.rb +1 -0
 - data/lib/oscal/url.rb +1 -0
 - data/lib/oscal/value.rb +5 -4
 - data/lib/oscal/version.rb +1 -1
 - data/lib/oscal/with_id.rb +2 -1
 - data/lib/oscal.rb +1 -1
 - data/spec/oscal/catalog_spec.rb +5 -4
 - data/spec/oscal_spec.rb +11 -0
 - data/spec/sample_inputs/import-ap.json +4 -0
 - metadata +24 -6
 
| 
         @@ -5,13 +5,14 @@ module Oscal 
     | 
|
| 
       5 
5 
     | 
    
         
             
                KEY = %i(with_child_controls with_ids matching)
         
     | 
| 
       6 
6 
     | 
    
         | 
| 
       7 
7 
     | 
    
         
             
                attr_accessor *KEY
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
       8 
9 
     | 
    
         
             
                attr_serializable *KEY
         
     | 
| 
       9 
10 
     | 
    
         | 
| 
       10 
11 
     | 
    
         
             
                def set_value(key_name, val)
         
     | 
| 
       11 
12 
     | 
    
         
             
                  case key_name
         
     | 
| 
       12 
     | 
    
         
            -
                  when  
     | 
| 
      
 13 
     | 
    
         
            +
                  when "with_ids"
         
     | 
| 
       13 
14 
     | 
    
         
             
                    WithId.wrap(val)
         
     | 
| 
       14 
     | 
    
         
            -
                  when  
     | 
| 
      
 15 
     | 
    
         
            +
                  when "matching"
         
     | 
| 
       15 
16 
     | 
    
         
             
                    Matching.wrap(val)
         
     | 
| 
       16 
17 
     | 
    
         
             
                  else
         
     | 
| 
       17 
18 
     | 
    
         
             
                    val
         
     | 
    
        data/lib/oscal/insert_control.rb
    CHANGED
    
    | 
         @@ -5,13 +5,14 @@ module Oscal 
     | 
|
| 
       5 
5 
     | 
    
         
             
                KEY = %i(order include_all include_controls exclude_controls)
         
     | 
| 
       6 
6 
     | 
    
         | 
| 
       7 
7 
     | 
    
         
             
                attr_accessor *KEY
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
       8 
9 
     | 
    
         
             
                attr_serializable *KEY
         
     | 
| 
       9 
10 
     | 
    
         | 
| 
       10 
11 
     | 
    
         
             
                def set_value(key_name, val)
         
     | 
| 
       11 
12 
     | 
    
         
             
                  case key_name
         
     | 
| 
       12 
     | 
    
         
            -
                  when  
     | 
| 
      
 13 
     | 
    
         
            +
                  when "include_controls"
         
     | 
| 
       13 
14 
     | 
    
         
             
                    IncludeControl.wrap(val)
         
     | 
| 
       14 
     | 
    
         
            -
                  when  
     | 
| 
      
 15 
     | 
    
         
            +
                  when "exclude_controls"
         
     | 
| 
       15 
16 
     | 
    
         
             
                    ExcludeControls.wrap(val)
         
     | 
| 
       16 
17 
     | 
    
         
             
                  else
         
     | 
| 
       17 
18 
     | 
    
         
             
                    val
         
     | 
    
        data/lib/oscal/link.rb
    CHANGED
    
    
    
        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
         
     | 
    
        data/lib/oscal/location.rb
    CHANGED
    
    | 
         @@ -3,24 +3,25 @@ require_relative "base_class" 
     | 
|
| 
       3 
3 
     | 
    
         
             
            module Oscal
         
     | 
| 
       4 
4 
     | 
    
         
             
              class Location < Oscal::BaseClass
         
     | 
| 
       5 
5 
     | 
    
         
             
                KEY = %i(uuid title address email_addresses telephone_numbers urls
         
     | 
| 
       6 
     | 
    
         
            -
             
     | 
| 
      
 6 
     | 
    
         
            +
                         props links remakrs)
         
     | 
| 
       7 
7 
     | 
    
         | 
| 
       8 
8 
     | 
    
         
             
                attr_accessor *KEY
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
       9 
10 
     | 
    
         
             
                attr_serializable *KEY
         
     | 
| 
       10 
11 
     | 
    
         | 
| 
       11 
12 
     | 
    
         
             
                def set_value(key_name, val)
         
     | 
| 
       12 
13 
     | 
    
         
             
                  case key_name
         
     | 
| 
       13 
     | 
    
         
            -
                  when  
     | 
| 
      
 14 
     | 
    
         
            +
                  when "address"
         
     | 
| 
       14 
15 
     | 
    
         
             
                    Address.wrap(val)
         
     | 
| 
       15 
     | 
    
         
            -
                  when  
     | 
| 
      
 16 
     | 
    
         
            +
                  when "email_addresses"
         
     | 
| 
       16 
17 
     | 
    
         
             
                    EmailAddress.wrap(val)
         
     | 
| 
       17 
     | 
    
         
            -
                  when  
     | 
| 
      
 18 
     | 
    
         
            +
                  when "telephone_numbers"
         
     | 
| 
       18 
19 
     | 
    
         
             
                    TelephoneNumber.wrap(val)
         
     | 
| 
       19 
     | 
    
         
            -
                  when  
     | 
| 
      
 20 
     | 
    
         
            +
                  when "urls"
         
     | 
| 
       20 
21 
     | 
    
         
             
                    Url.wrap(val)
         
     | 
| 
       21 
     | 
    
         
            -
                  when  
     | 
| 
      
 22 
     | 
    
         
            +
                  when "props"
         
     | 
| 
       22 
23 
     | 
    
         
             
                    Property.wrap(val)
         
     | 
| 
       23 
     | 
    
         
            -
                  when  
     | 
| 
      
 24 
     | 
    
         
            +
                  when "links"
         
     | 
| 
       24 
25 
     | 
    
         
             
                    Link.wrap(val)
         
     | 
| 
       25 
26 
     | 
    
         
             
                  else
         
     | 
| 
       26 
27 
     | 
    
         
             
                    val
         
     | 
    
        data/lib/oscal/location_uuid.rb
    CHANGED
    
    
    
        data/lib/oscal/logger.rb
    ADDED
    
    
    
        data/lib/oscal/matching.rb
    CHANGED
    
    
    
        data/lib/oscal/merge.rb
    CHANGED
    
    
    
        data/lib/oscal/metadata_block.rb
    CHANGED
    
    | 
         @@ -3,29 +3,30 @@ require_relative "base_class" 
     | 
|
| 
       3 
3 
     | 
    
         
             
            module Oscal
         
     | 
| 
       4 
4 
     | 
    
         
             
              class MetadataBlock < Oscal::BaseClass
         
     | 
| 
       5 
5 
     | 
    
         
             
                KEY = %i(title published last_modified version
         
     | 
| 
       6 
     | 
    
         
            -
             
     | 
| 
       7 
     | 
    
         
            -
             
     | 
| 
      
 6 
     | 
    
         
            +
                         oscal_version revisions document_ids props links roles
         
     | 
| 
      
 7 
     | 
    
         
            +
                         locations parties responsible_parties remarks)
         
     | 
| 
       8 
8 
     | 
    
         | 
| 
       9 
9 
     | 
    
         
             
                attr_accessor *KEY
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
       10 
11 
     | 
    
         
             
                attr_serializable *KEY
         
     | 
| 
       11 
12 
     | 
    
         | 
| 
       12 
13 
     | 
    
         
             
                def set_value(key_name, val)
         
     | 
| 
       13 
14 
     | 
    
         
             
                  case key_name
         
     | 
| 
       14 
     | 
    
         
            -
                  when  
     | 
| 
      
 15 
     | 
    
         
            +
                  when "revisions"
         
     | 
| 
       15 
16 
     | 
    
         
             
                    Revision.wrap(val)
         
     | 
| 
       16 
     | 
    
         
            -
                  when  
     | 
| 
      
 17 
     | 
    
         
            +
                  when "docuement_ids"
         
     | 
| 
       17 
18 
     | 
    
         
             
                    DocumentId.wrap(val)
         
     | 
| 
       18 
     | 
    
         
            -
                  when  
     | 
| 
      
 19 
     | 
    
         
            +
                  when "props"
         
     | 
| 
       19 
20 
     | 
    
         
             
                    Property.wrap(val)
         
     | 
| 
       20 
     | 
    
         
            -
                  when  
     | 
| 
      
 21 
     | 
    
         
            +
                  when "links"
         
     | 
| 
       21 
22 
     | 
    
         
             
                    Link.wrap(val)
         
     | 
| 
       22 
     | 
    
         
            -
                  when  
     | 
| 
      
 23 
     | 
    
         
            +
                  when "roles"
         
     | 
| 
       23 
24 
     | 
    
         
             
                    Role.wrap(val)
         
     | 
| 
       24 
     | 
    
         
            -
                  when  
     | 
| 
      
 25 
     | 
    
         
            +
                  when "locations"
         
     | 
| 
       25 
26 
     | 
    
         
             
                    Location.wrap(val)
         
     | 
| 
       26 
     | 
    
         
            -
                  when  
     | 
| 
      
 27 
     | 
    
         
            +
                  when "parties"
         
     | 
| 
       27 
28 
     | 
    
         
             
                    Party.wrap(val)
         
     | 
| 
       28 
     | 
    
         
            -
                  when  
     | 
| 
      
 29 
     | 
    
         
            +
                  when "responsible_parties"
         
     | 
| 
       29 
30 
     | 
    
         
             
                    ResponsibleParty.wrap(val)
         
     | 
| 
       30 
31 
     | 
    
         
             
                  else
         
     | 
| 
       31 
32 
     | 
    
         
             
                    val
         
     | 
    
        data/lib/oscal/modify.rb
    CHANGED
    
    | 
         @@ -5,13 +5,14 @@ module Oscal 
     | 
|
| 
       5 
5 
     | 
    
         
             
                KEY = %i(set_parameters alters)
         
     | 
| 
       6 
6 
     | 
    
         | 
| 
       7 
7 
     | 
    
         
             
                attr_accessor *KEY
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
       8 
9 
     | 
    
         
             
                attr_serializable *KEY
         
     | 
| 
       9 
10 
     | 
    
         | 
| 
       10 
11 
     | 
    
         
             
                def set_value(key_name, val)
         
     | 
| 
       11 
12 
     | 
    
         
             
                  case key_name
         
     | 
| 
       12 
     | 
    
         
            -
                  when  
     | 
| 
      
 13 
     | 
    
         
            +
                  when "set_parameters"
         
     | 
| 
       13 
14 
     | 
    
         
             
                    SetParameter.wrap(val)
         
     | 
| 
       14 
     | 
    
         
            -
                  when  
     | 
| 
      
 15 
     | 
    
         
            +
                  when "alters"
         
     | 
| 
       15 
16 
     | 
    
         
             
                    Alter.wrap(val)
         
     | 
| 
       16 
17 
     | 
    
         
             
                  else
         
     | 
| 
       17 
18 
     | 
    
         
             
                    val
         
     | 
    
        data/lib/oscal/parameter.rb
    CHANGED
    
    | 
         @@ -3,24 +3,25 @@ require_relative "base_class" 
     | 
|
| 
       3 
3 
     | 
    
         
             
            module Oscal
         
     | 
| 
       4 
4 
     | 
    
         
             
              class Parameter < Oscal::BaseClass
         
     | 
| 
       5 
5 
     | 
    
         
             
                KEY = %i(id klass depneds_on props links label usage
         
     | 
| 
       6 
     | 
    
         
            -
             
     | 
| 
      
 6 
     | 
    
         
            +
                         constraints guidelines values select remarks)
         
     | 
| 
       7 
7 
     | 
    
         | 
| 
       8 
8 
     | 
    
         
             
                attr_accessor *KEY
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
       9 
10 
     | 
    
         
             
                attr_serializable *KEY
         
     | 
| 
       10 
11 
     | 
    
         | 
| 
       11 
12 
     | 
    
         
             
                def set_value(key_name, val)
         
     | 
| 
       12 
13 
     | 
    
         
             
                  case key_name
         
     | 
| 
       13 
     | 
    
         
            -
                  when  
     | 
| 
      
 14 
     | 
    
         
            +
                  when "props"
         
     | 
| 
       14 
15 
     | 
    
         
             
                    Property.wrap(val)
         
     | 
| 
       15 
     | 
    
         
            -
                  when  
     | 
| 
      
 16 
     | 
    
         
            +
                  when "links"
         
     | 
| 
       16 
17 
     | 
    
         
             
                    Link.wrap(val)
         
     | 
| 
       17 
     | 
    
         
            -
                  when  
     | 
| 
      
 18 
     | 
    
         
            +
                  when "constraints"
         
     | 
| 
       18 
19 
     | 
    
         
             
                    Constraint.wrap(val)
         
     | 
| 
       19 
     | 
    
         
            -
                  when  
     | 
| 
      
 20 
     | 
    
         
            +
                  when "guidelines"
         
     | 
| 
       20 
21 
     | 
    
         
             
                    Guideline.wrap(val)
         
     | 
| 
       21 
     | 
    
         
            -
                  when  
     | 
| 
      
 22 
     | 
    
         
            +
                  when "values"
         
     | 
| 
       22 
23 
     | 
    
         
             
                    Value.wrap(val)
         
     | 
| 
       23 
     | 
    
         
            -
                  when  
     | 
| 
      
 24 
     | 
    
         
            +
                  when "select"
         
     | 
| 
       24 
25 
     | 
    
         
             
                    Select.wrap(val)
         
     | 
| 
       25 
26 
     | 
    
         
             
                  else
         
     | 
| 
       26 
27 
     | 
    
         
             
                    val
         
     | 
| 
         @@ -0,0 +1,19 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            module Oscal
         
     | 
| 
      
 2 
     | 
    
         
            +
              module ParsingFunctions
         
     | 
| 
      
 3 
     | 
    
         
            +
                def sym2str(key)
         
     | 
| 
      
 4 
     | 
    
         
            +
                  if key.is_a?(Symbol)
         
     | 
| 
      
 5 
     | 
    
         
            +
                    key.to_s.gsub("-", "_").gsub("class", "klass")
         
     | 
| 
      
 6 
     | 
    
         
            +
                  elsif key.is_a?(String)
         
     | 
| 
      
 7 
     | 
    
         
            +
                    key
         
     | 
| 
      
 8 
     | 
    
         
            +
                  end
         
     | 
| 
      
 9 
     | 
    
         
            +
                end
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
                def str2sym(var)
         
     | 
| 
      
 12 
     | 
    
         
            +
                  if var.is_a?(String)
         
     | 
| 
      
 13 
     | 
    
         
            +
                    var.gsub("-", "_").gsub("class", "klass").to_sym
         
     | 
| 
      
 14 
     | 
    
         
            +
                  elsif var.is_a?(Symbol)
         
     | 
| 
      
 15 
     | 
    
         
            +
                    var
         
     | 
| 
      
 16 
     | 
    
         
            +
                  end
         
     | 
| 
      
 17 
     | 
    
         
            +
                end
         
     | 
| 
      
 18 
     | 
    
         
            +
              end
         
     | 
| 
      
 19 
     | 
    
         
            +
            end
         
     | 
    
        data/lib/oscal/part.rb
    CHANGED
    
    | 
         @@ -5,15 +5,16 @@ module Oscal 
     | 
|
| 
       5 
5 
     | 
    
         
             
                KEY = %i(id name ns klass title props prose parts links)
         
     | 
| 
       6 
6 
     | 
    
         | 
| 
       7 
7 
     | 
    
         
             
                attr_accessor *KEY
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
       8 
9 
     | 
    
         
             
                attr_serializable *KEY
         
     | 
| 
       9 
10 
     | 
    
         | 
| 
       10 
11 
     | 
    
         
             
                def set_value(key_name, val)
         
     | 
| 
       11 
12 
     | 
    
         
             
                  case key_name
         
     | 
| 
       12 
     | 
    
         
            -
                  when  
     | 
| 
      
 13 
     | 
    
         
            +
                  when "props"
         
     | 
| 
       13 
14 
     | 
    
         
             
                    Property.wrap(val)
         
     | 
| 
       14 
     | 
    
         
            -
                  when  
     | 
| 
      
 15 
     | 
    
         
            +
                  when "parts"
         
     | 
| 
       15 
16 
     | 
    
         
             
                    Part.wrap(val)
         
     | 
| 
       16 
     | 
    
         
            -
                  when  
     | 
| 
      
 17 
     | 
    
         
            +
                  when "links"
         
     | 
| 
       17 
18 
     | 
    
         
             
                    Link.wrap(val)
         
     | 
| 
       18 
19 
     | 
    
         
             
                  else
         
     | 
| 
       19 
20 
     | 
    
         
             
                    val
         
     | 
    
        data/lib/oscal/party.rb
    CHANGED
    
    | 
         @@ -3,29 +3,30 @@ require_relative "base_class" 
     | 
|
| 
       3 
3 
     | 
    
         
             
            module Oscal
         
     | 
| 
       4 
4 
     | 
    
         
             
              class Party < Oscal::BaseClass
         
     | 
| 
       5 
5 
     | 
    
         
             
                KEY = %i(uuid type name short_name external_ids props links
         
     | 
| 
       6 
     | 
    
         
            -
             
     | 
| 
       7 
     | 
    
         
            -
             
     | 
| 
      
 6 
     | 
    
         
            +
                         email_addresses telephone_numbers addresses location_uuids
         
     | 
| 
      
 7 
     | 
    
         
            +
                         member_of_organizations remakrs)
         
     | 
| 
       8 
8 
     | 
    
         | 
| 
       9 
9 
     | 
    
         
             
                attr_accessor *KEY
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
       10 
11 
     | 
    
         
             
                attr_serializable *KEY
         
     | 
| 
       11 
12 
     | 
    
         | 
| 
       12 
13 
     | 
    
         
             
                def set_value(key_name, val)
         
     | 
| 
       13 
14 
     | 
    
         
             
                  case key_name
         
     | 
| 
       14 
     | 
    
         
            -
                  when  
     | 
| 
      
 15 
     | 
    
         
            +
                  when "external_ids"
         
     | 
| 
       15 
16 
     | 
    
         
             
                    ExternalId.wrap(val)
         
     | 
| 
       16 
     | 
    
         
            -
                  when  
     | 
| 
      
 17 
     | 
    
         
            +
                  when "props"
         
     | 
| 
       17 
18 
     | 
    
         
             
                    Property.wrap(val)
         
     | 
| 
       18 
     | 
    
         
            -
                  when  
     | 
| 
      
 19 
     | 
    
         
            +
                  when "links"
         
     | 
| 
       19 
20 
     | 
    
         
             
                    Link.wrap(val)
         
     | 
| 
       20 
     | 
    
         
            -
                  when  
     | 
| 
      
 21 
     | 
    
         
            +
                  when "email_addresses"
         
     | 
| 
       21 
22 
     | 
    
         
             
                    EmailAddress.wrap(val)
         
     | 
| 
       22 
     | 
    
         
            -
                  when  
     | 
| 
      
 23 
     | 
    
         
            +
                  when "telephone_numbers"
         
     | 
| 
       23 
24 
     | 
    
         
             
                    TelephoneNumber.wrap(val)
         
     | 
| 
       24 
     | 
    
         
            -
                  when  
     | 
| 
      
 25 
     | 
    
         
            +
                  when "addresses"
         
     | 
| 
       25 
26 
     | 
    
         
             
                    Address.wrap(val)
         
     | 
| 
       26 
     | 
    
         
            -
                  when  
     | 
| 
      
 27 
     | 
    
         
            +
                  when "location_uuids"
         
     | 
| 
       27 
28 
     | 
    
         
             
                    LocationUuid.wrap(val)
         
     | 
| 
       28 
     | 
    
         
            -
                  when  
     | 
| 
      
 29 
     | 
    
         
            +
                  when "member_of_organizations"
         
     | 
| 
       29 
30 
     | 
    
         
             
                    MemberOfOrganization.wrap(val)
         
     | 
| 
       30 
31 
     | 
    
         
             
                  else
         
     | 
| 
       31 
32 
     | 
    
         
             
                    val
         
     | 
    
        data/lib/oscal/party_uuid.rb
    CHANGED
    
    
    
        data/lib/oscal/profile.rb
    CHANGED
    
    | 
         @@ -8,6 +8,7 @@ module Oscal 
     | 
|
| 
       8 
8 
     | 
    
         | 
| 
       9 
9 
     | 
    
         
             
                KEY = %i(uuid metadata imports merge modify back_matter)
         
     | 
| 
       10 
10 
     | 
    
         
             
                attr_accessor *KEY
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
       11 
12 
     | 
    
         
             
                attr_serializable *KEY
         
     | 
| 
       12 
13 
     | 
    
         | 
| 
       13 
14 
     | 
    
         
             
                def initialize(uuid, metadata, imports, merge, modify, back_matter)
         
     | 
| 
         @@ -23,12 +24,12 @@ module Oscal 
     | 
|
| 
       23 
24 
     | 
    
         
             
                  yaml_data     = safe_load_yaml(path)
         
     | 
| 
       24 
25 
     | 
    
         
             
                  yaml_profile  = yaml_data["profile"]
         
     | 
| 
       25 
26 
     | 
    
         | 
| 
       26 
     | 
    
         
            -
                  uuid          = yaml_profile[ 
     | 
| 
       27 
     | 
    
         
            -
                  metadata      = yaml_profile[ 
     | 
| 
       28 
     | 
    
         
            -
                  imports       = yaml_profile[ 
     | 
| 
       29 
     | 
    
         
            -
                  merge         = yaml_profile[ 
     | 
| 
       30 
     | 
    
         
            -
                  modify        = yaml_profile[ 
     | 
| 
       31 
     | 
    
         
            -
                  back_matter   = yaml_profile[ 
     | 
| 
      
 27 
     | 
    
         
            +
                  uuid          = yaml_profile["uuid"]
         
     | 
| 
      
 28 
     | 
    
         
            +
                  metadata      = yaml_profile["metadata"]
         
     | 
| 
      
 29 
     | 
    
         
            +
                  imports       = yaml_profile["imports"]
         
     | 
| 
      
 30 
     | 
    
         
            +
                  merge         = yaml_profile["merge"]
         
     | 
| 
      
 31 
     | 
    
         
            +
                  modify        = yaml_profile["modify"]
         
     | 
| 
      
 32 
     | 
    
         
            +
                  back_matter   = yaml_profile["back-matter"]
         
     | 
| 
       32 
33 
     | 
    
         | 
| 
       33 
34 
     | 
    
         
             
                  Profile.new(uuid, metadata, imports, merge, modify, back_matter)
         
     | 
| 
       34 
35 
     | 
    
         
             
                end
         
     | 
    
        data/lib/oscal/property.rb
    CHANGED
    
    
    
        data/lib/oscal/remove.rb
    CHANGED
    
    
    
        data/lib/oscal/resource.rb
    CHANGED
    
    | 
         @@ -3,22 +3,23 @@ require_relative "base_class" 
     | 
|
| 
       3 
3 
     | 
    
         
             
            module Oscal
         
     | 
| 
       4 
4 
     | 
    
         
             
              class Resource < Oscal::BaseClass
         
     | 
| 
       5 
5 
     | 
    
         
             
                KEY = %i(uuid title description props docuement_ids citation rlinks
         
     | 
| 
       6 
     | 
    
         
            -
             
     | 
| 
      
 6 
     | 
    
         
            +
                         base64 remarks)
         
     | 
| 
       7 
7 
     | 
    
         | 
| 
       8 
8 
     | 
    
         
             
                attr_accessor *KEY
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
       9 
10 
     | 
    
         
             
                attr_serializable *KEY
         
     | 
| 
       10 
11 
     | 
    
         | 
| 
       11 
12 
     | 
    
         
             
                def set_value(key_name, val)
         
     | 
| 
       12 
13 
     | 
    
         
             
                  case key_name
         
     | 
| 
       13 
     | 
    
         
            -
                  when  
     | 
| 
      
 14 
     | 
    
         
            +
                  when "props"
         
     | 
| 
       14 
15 
     | 
    
         
             
                    Property.wrap(val)
         
     | 
| 
       15 
     | 
    
         
            -
                  when  
     | 
| 
      
 16 
     | 
    
         
            +
                  when "document_ids"
         
     | 
| 
       16 
17 
     | 
    
         
             
                    DocumentId.wrap(val)
         
     | 
| 
       17 
     | 
    
         
            -
                  when  
     | 
| 
      
 18 
     | 
    
         
            +
                  when "citation"
         
     | 
| 
       18 
19 
     | 
    
         
             
                    Citation.wrap(val)
         
     | 
| 
       19 
     | 
    
         
            -
                  when  
     | 
| 
      
 20 
     | 
    
         
            +
                  when "rlinks"
         
     | 
| 
       20 
21 
     | 
    
         
             
                    Rlink.wrap(val)
         
     | 
| 
       21 
     | 
    
         
            -
                  when  
     | 
| 
      
 22 
     | 
    
         
            +
                  when "base64"
         
     | 
| 
       22 
23 
     | 
    
         
             
                    Base64Object.wrap(val)
         
     | 
| 
       23 
24 
     | 
    
         
             
                  else
         
     | 
| 
       24 
25 
     | 
    
         
             
                    val
         
     | 
| 
         @@ -5,19 +5,20 @@ module Oscal 
     | 
|
| 
       5 
5 
     | 
    
         
             
                KEY = %i(role_id party_uuids props links remakrs)
         
     | 
| 
       6 
6 
     | 
    
         | 
| 
       7 
7 
     | 
    
         
             
                attr_accessor *KEY
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
       8 
9 
     | 
    
         
             
                attr_serializable *KEY
         
     | 
| 
       9 
10 
     | 
    
         | 
| 
       10 
11 
     | 
    
         
             
                def set_value(key_name, val)
         
     | 
| 
       11 
     | 
    
         
            -
             
     | 
| 
       12 
     | 
    
         
            -
             
     | 
| 
       13 
     | 
    
         
            -
             
     | 
| 
       14 
     | 
    
         
            -
             
     | 
| 
       15 
     | 
    
         
            -
             
     | 
| 
       16 
     | 
    
         
            -
             
     | 
| 
       17 
     | 
    
         
            -
             
     | 
| 
       18 
     | 
    
         
            -
             
     | 
| 
       19 
     | 
    
         
            -
             
     | 
| 
       20 
     | 
    
         
            -
             
     | 
| 
      
 12 
     | 
    
         
            +
                  case key_name
         
     | 
| 
      
 13 
     | 
    
         
            +
                  when "party_uuids"
         
     | 
| 
      
 14 
     | 
    
         
            +
                    PartyUuid.wrap(val)
         
     | 
| 
      
 15 
     | 
    
         
            +
                  when "props"
         
     | 
| 
      
 16 
     | 
    
         
            +
                    Property.wrap(val)
         
     | 
| 
      
 17 
     | 
    
         
            +
                  when "links"
         
     | 
| 
      
 18 
     | 
    
         
            +
                    Link.wrap(val)
         
     | 
| 
      
 19 
     | 
    
         
            +
                  else
         
     | 
| 
      
 20 
     | 
    
         
            +
                    val
         
     | 
| 
      
 21 
     | 
    
         
            +
                  end
         
     | 
| 
       21 
22 
     | 
    
         
             
                end
         
     | 
| 
       22 
23 
     | 
    
         
             
              end
         
     | 
| 
       23 
24 
     | 
    
         
             
            end
         
     | 
    
        data/lib/oscal/revision.rb
    CHANGED
    
    | 
         @@ -3,16 +3,17 @@ require_relative "base_class" 
     | 
|
| 
       3 
3 
     | 
    
         
             
            module Oscal
         
     | 
| 
       4 
4 
     | 
    
         
             
              class Revision < Oscal::BaseClass
         
     | 
| 
       5 
5 
     | 
    
         
             
                KEY = %i(title published last_modified version oscal_version
         
     | 
| 
       6 
     | 
    
         
            -
             
     | 
| 
      
 6 
     | 
    
         
            +
                         props links remarks)
         
     | 
| 
       7 
7 
     | 
    
         | 
| 
       8 
8 
     | 
    
         
             
                attr_accessor *KEY
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
       9 
10 
     | 
    
         
             
                attr_serializable *KEY
         
     | 
| 
       10 
11 
     | 
    
         | 
| 
       11 
12 
     | 
    
         
             
                def set_value(key_name, val)
         
     | 
| 
       12 
13 
     | 
    
         
             
                  case key_name
         
     | 
| 
       13 
     | 
    
         
            -
                  when  
     | 
| 
      
 14 
     | 
    
         
            +
                  when "props"
         
     | 
| 
       14 
15 
     | 
    
         
             
                    Property.wrap(val)
         
     | 
| 
       15 
     | 
    
         
            -
                  when  
     | 
| 
      
 16 
     | 
    
         
            +
                  when "links"
         
     | 
| 
       16 
17 
     | 
    
         
             
                    Link.wrap(val)
         
     | 
| 
       17 
18 
     | 
    
         
             
                  else
         
     | 
| 
       18 
19 
     | 
    
         
             
                    val
         
     | 
    
        data/lib/oscal/rlink.rb
    CHANGED
    
    
    
        data/lib/oscal/role.rb
    CHANGED
    
    | 
         @@ -5,13 +5,14 @@ module Oscal 
     | 
|
| 
       5 
5 
     | 
    
         
             
                KEY = %i(id title short_name description props links remakrs)
         
     | 
| 
       6 
6 
     | 
    
         | 
| 
       7 
7 
     | 
    
         
             
                attr_accessor *KEY
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
       8 
9 
     | 
    
         
             
                attr_serializable *KEY
         
     | 
| 
       9 
10 
     | 
    
         | 
| 
       10 
11 
     | 
    
         
             
                def set_value(key_name, val)
         
     | 
| 
       11 
12 
     | 
    
         
             
                  case key_name
         
     | 
| 
       12 
     | 
    
         
            -
                  when  
     | 
| 
      
 13 
     | 
    
         
            +
                  when "props"
         
     | 
| 
       13 
14 
     | 
    
         
             
                    Property.wrap(val)
         
     | 
| 
       14 
     | 
    
         
            -
                  when  
     | 
| 
      
 15 
     | 
    
         
            +
                  when "links"
         
     | 
| 
       15 
16 
     | 
    
         
             
                    Link.wrap(val)
         
     | 
| 
       16 
17 
     | 
    
         
             
                  else
         
     | 
| 
       17 
18 
     | 
    
         
             
                    val
         
     |