Module: Oscal::V1_2_1

Extended by:
Versioned
Defined in:
lib/oscal/v1_2_1.rb,
lib/oscal/v1_2_1/all_models.rb

Overview

OSCAL 1.2.1 version module.

Contains all model classes for OSCAL version 1.2.1. Classes are pre-generated from the OSCAL metaschema and loaded from lib/oscal/v1_2_1/*.rb.

Defined Under Namespace

Classes: Action, Activity, ActivityDescription, ActivityStep, ActivityTitle, AddrLine, Address, AdjustmentJustification, AssessmentAssets, AssessmentAssetsAssessmentPlatform, AssessmentMethod, AssessmentMethodDescription, AssessmentPart, AssessmentPartProse, AssessmentPartTitle, AssessmentPlan, AssessmentPlanLocalDefinitions, AssessmentPlanTermsAndConditions, AssessmentResults, AssessmentResultsLocalDefinitions, AssessmentSubject, AssessmentSubjectDescription, AssessmentSubjectPlaceholder, AssessmentSubjectPlaceholderDescription, AssessmentSubjectPlaceholderSource, AssociatedRisk, AuthorizationBoundary, AuthorizationBoundaryDescription, AuthorizedPrivilege, AuthorizedPrivilegeDescription, AuthorizedPrivilegeTitle, BackMatter, BackMatterResource, Base, Base64InBackMatter, BaseField, ByComponent, ByComponentDescription, ByComponentExport, ByComponentInherited, ByComponentSatisfied, Capability, CapabilityDescription, Catalog, Characterization, CharacterizationFacet, ComponentDefinition, ConfidenceScore, Control, ControlImplementation, ControlImplementationDescription, ControlTitle, Coverage, DataFlow, DataFlowDescription, DateAuthorized, DefinedComponent, DefinedComponentDescription, DefinedComponentPurpose, DefinedComponentTitle, Diagram, DiagramCaption, DiagramDescription, DocumentId, EmailAddress, ExternalIdInMetadata, Finding, FindingDescription, FindingTarget, FindingTargetDescription, FindingTargetStatus, FindingTargetTitle, FindingTitle, FunctionPerformed, GapSummary, Group, GroupTitle, HashField, Impact, ImplementationStatus, ImplementedRequirement, ImplementedRequirementDescription, Import, ImportAp, ImportComponentDefinition, ImportProfile, ImportSsp, IncludeAll, IncorporatesComponent, IncorporatesComponentDescription, InsertControls, InventoryItem, InventoryItemDescription, InventoryItemImplementedComponent, LastModified, Link, LinkText, LocalDefinitions, LocalObjective, LocalObjectiveDescription, LocationUuid, LoggedBy, Map, Mapping, MappingCollection, MappingDescription, MappingItem, MappingProvenance, MappingResourceReference, Matching, Merge, MergeCombine, MergeCustom, MergeFlat, Metadata, MetadataLocation, MetadataParty, MetadataRevision, MetadataRole, MetadataTitle, Modify, ModifyAlter, ModifySetParameter, NetworkArchitecture, NetworkArchitectureDescription, Observation, ObservationDescription, ObservationRelevantEvidence, ObservationTitle, Origin, OriginActor, OscalVersion, Parameter, ParameterConstraint, ParameterConstraintDescription, ParameterConstraintTest, ParameterGuideline, ParameterGuidelineProse, ParameterLabel, ParameterSelection, ParameterSelectionChoice, ParameterUsage, ParameterValue, Part, PartProse, PartTitle, PartyUuid, Percentage, PlanOfActionAndMilestones, PoamItem, PoamItemDescription, PoamItemOrigin, PoamItemRelatedFinding, PoamItemTitle, PortRange, Profile, Property, Protocol, ProtocolTitle, Published, QualifierItem, QualifierItemDescription, RelatedObservation, RelatedTask, RelatedTaskIdentifiedSubject, Remarks, Response, ResponseDescription, ResponseRequiredAsset, ResponseTitle, ResponsibleParty, ResponsibleRole, Result, ResultAssessmentLog, ResultAttestation, ResultDescription, ResultLocalDefinitions, ResultTitle, ReviewedControls, ReviewedControlsControlObjectiveSelection, ReviewedControlsControlSelection, ReviewedControlsDescription, Risk, RiskDescription, RiskMitigatingFactor, RiskRiskLog, RiskStatement, RiskStatus, RiskTitle, RoleId, SecurityImpactLevel, SelectControlById, SelectObjectiveById, SelectSubjectById, Selected, SetParameter, Statement, StatementDescription, Status, SubjectReference, SubjectReferenceTitle, SystemCharacteristics, SystemCharacteristicsDescription, SystemComponent, SystemComponentDescription, SystemComponentPurpose, SystemComponentStatus, SystemComponentTitle, SystemId, SystemImplementation, SystemImplementationLeveragedAuthorization, SystemInformation, SystemInformationInformationType, SystemSecurityPlan, SystemUser, SystemUserDescription, SystemUserTitle, Task, TaskAssociatedActivity, TaskDependency, TaskDescription, TaskTiming, TaskTitle, TelephoneNumber, ThreatId, Version, WithId

Constant Summary collapse

ROOT_CLASS_KEYS =

Maps clean class names to ModelGenerator keys.

{
  "Catalog" => "Assembly_catalog",
  "Profile" => "Assembly_profile",
  "ComponentDefinition" => "Assembly_component_definition",
  "SystemSecurityPlan" => "Assembly_system_security_plan",
  "AssessmentPlan" => "Assembly_assessment_plan",
  "AssessmentResults" => "Assembly_assessment_results",
  "PlanOfActionAndMilestones" => "Assembly_plan_of_action_and_milestones",
  "MappingCollection" => "Assembly_mapping_collection",
}.freeze

Class Method Summary collapse

Methods included from Versioned

create_register, extended, fallback_registers, init_models!, initialized?, oscal_version, register, register_id, register_models!

Class Method Details

.class_key_to_const_name(key) ⇒ Object



99
100
101
102
103
104
105
# File 'lib/oscal/v1_2_1.rb', line 99

def self.class_key_to_const_name(key)
  parts = key.sub(/\A(Assembly|Field|Flag)_/, "").split("_")
  name = parts.map(&:capitalize).join
  # Avoid conflicts with Ruby built-ins
  name = "#{name}Field" if %w[Hash Method Object Class Module].include?(name)
  name
end

.fallback_registersObject



22
23
24
# File 'lib/oscal/v1_2_1.rb', line 22

def self.fallback_registers
  %i[oscal_common default]
end

.find_metaschema(filename) ⇒ Object



87
88
89
90
91
92
93
94
95
96
97
# File 'lib/oscal/v1_2_1.rb', line 87

def self.find_metaschema(filename)
  paths = [
    # Local submodule first
    File.expand_path("../../fixtures/oscal/src/metaschema/#{filename}", __dir__),
    # Sibling metaschema repo
    File.expand_path("../../../metaschema/spec/fixtures/oscal/src/metaschema/#{filename}", __dir__),
    File.expand_path("../../../../metaschema/spec/fixtures/oscal/src/metaschema/#{filename}", __dir__),
  ]

  paths.find { |p| File.exist?(p) }
end

.generate_runtimeObject

Generate classes at runtime from the OSCAL metaschema.



57
58
59
60
61
62
63
64
65
66
67
68
# File 'lib/oscal/v1_2_1.rb', line 57

def self.generate_runtime
  metaschema_path = find_metaschema("oscal_complete_metaschema.xml")
  return unless metaschema_path

  @runtime_classes = Metaschema::ModelGenerator.generate_from_file(metaschema_path)

  # Expose as constants on this module
  @runtime_classes.each do |key, klass|
    const_name = class_key_to_const_name(key)
    const_set(const_name, klass) unless const_defined?(const_name)
  end
end

.load_pre_generatedObject

Load pre-generated model files from lib/oscal/v1_2_1/



43
44
45
46
47
48
49
50
51
52
53
54
# File 'lib/oscal/v1_2_1.rb', line 43

def self.load_pre_generated
  dir = File.join(__dir__, "v1_2_1")
  if Dir.exist?(dir) && !Dir.empty?(dir)
    Dir[File.join(dir, "*.rb")].sort.each { |f| require f }
  else
    # Fall back to runtime generation if pre-generated files don't exist
    generate_runtime
  end

  # Register all classes with the version register
  register_all_classes
end

.oscal_versionObject



18
19
20
# File 'lib/oscal/v1_2_1.rb', line 18

def self.oscal_version
  "1.2.1"
end

.register_all_classesObject

Register all loaded classes with this version’s register.



71
72
73
74
75
76
77
78
# File 'lib/oscal/v1_2_1.rb', line 71

def self.register_all_classes
  constants.each do |const_name|
    klass = const_get(const_name)
    next unless klass.is_a?(Class) && klass < Lutaml::Model::Serializable

    register.register_model(klass)
  end
end

.register_idObject



14
15
16
# File 'lib/oscal/v1_2_1.rb', line 14

def self.register_id
  :oscal_1_2_1
end

.register_models!Object



38
39
40
# File 'lib/oscal/v1_2_1.rb', line 38

def self.register_models!
  load_pre_generated
end

.resolve_class(name) ⇒ Object

Resolve a class by clean name or ModelGenerator key.



81
82
83
# File 'lib/oscal/v1_2_1.rb', line 81

def self.resolve_class(name)
  const_get(name) if const_defined?(name)
end