Module: Oscal::VersionRegistry
- Defined in:
- lib/oscal/version_registry.rb
Overview
Registry for OSCAL version-specific model trees.
Manages the mapping between OSCAL version strings and their modules. Version detection is based on the <oscal-version> element in the document’s metadata, not on XML namespace (all OSCAL versions share the same namespace: csrc.nist.gov/ns/oscal/1.0).
Class Method Summary collapse
-
.available_versions ⇒ Array<String>
All registered version strings, sorted.
-
.detect_model_type(content) ⇒ Symbol?
Detect the root model type from a document.
-
.detect_version(content) ⇒ String?
Detect OSCAL version from a document string (XML, JSON, or YAML).
-
.latest_module ⇒ Module?
Get the latest registered version module.
-
.latest_register ⇒ Lutaml::Model::Register?
Get the latest register (initializes if needed).
-
.register_for_version(version) ⇒ Lutaml::Model::Register?
Get the register for a specific OSCAL version.
-
.register_version(version, mod) ⇒ Object
Register a version module.
-
.version_module(version) ⇒ Module?
Get the version module for a version string.
Class Method Details
.available_versions ⇒ Array<String>
All registered version strings, sorted.
75 76 77 |
# File 'lib/oscal/version_registry.rb', line 75 def available_versions @versions.keys.sort end |
.detect_model_type(content) ⇒ Symbol?
Detect the root model type from a document.
103 104 105 106 107 108 109 110 111 112 113 114 115 |
# File 'lib/oscal/version_registry.rb', line 103 def detect_model_type(content) return nil if content.nil? || content.strip.empty? if content.lstrip.start_with?("<") detect_model_type_xml(content) elsif content.lstrip.start_with?("{") detect_model_type_json(content) else detect_model_type_yaml(content) end rescue StandardError nil end |
.detect_version(content) ⇒ String?
Detect OSCAL version from a document string (XML, JSON, or YAML).
Looks for the “oscal-version” field in the document’s metadata.
85 86 87 88 89 90 91 92 93 94 95 96 97 |
# File 'lib/oscal/version_registry.rb', line 85 def detect_version(content) return nil if content.nil? || content.strip.empty? if content.lstrip.start_with?("<") detect_version_xml(content) elsif content.lstrip.start_with?("{") detect_version_json(content) else detect_version_yaml(content) end rescue StandardError nil end |
.latest_module ⇒ Module?
Get the latest registered version module.
55 56 57 58 59 |
# File 'lib/oscal/version_registry.rb', line 55 def latest_module return nil if @versions.empty? @versions.values.last end |
.latest_register ⇒ Lutaml::Model::Register?
Get the latest register (initializes if needed).
64 65 66 67 68 69 70 |
# File 'lib/oscal/version_registry.rb', line 64 def latest_register mod = latest_module return nil unless mod mod.init_models! unless mod.initialized? mod.register end |
.register_for_version(version) ⇒ Lutaml::Model::Register?
Get the register for a specific OSCAL version.
44 45 46 47 48 49 50 |
# File 'lib/oscal/version_registry.rb', line 44 def register_for_version(version) mod = @versions[version] return nil unless mod mod.init_models! unless mod.initialized? mod.register end |
.register_version(version, mod) ⇒ Object
Register a version module.
28 29 30 |
# File 'lib/oscal/version_registry.rb', line 28 def register_version(version, mod) @versions = @versions.merge(version => mod) end |
.version_module(version) ⇒ Module?
Get the version module for a version string.
36 37 38 |
# File 'lib/oscal/version_registry.rb', line 36 def version_module(version) @versions[version] end |