Module: Oscal::Versioned
- Included in:
- V1_2_1
- Defined in:
- lib/oscal/versioned.rb
Overview
Base module for version-specific OSCAL model trees.
Each version module (V1_2_1, V1_3_0, etc.) extends this and provides its own register.
Unlike XMI which uses namespace-based version detection, OSCAL uses schema-version-based detection (the <oscal-version> element in metadata). All OSCAL versions share the same XML namespace.
Class Method Summary collapse
Instance Method Summary collapse
-
#create_register ⇒ Object
Create and configure the register with fallback chain.
-
#fallback_registers ⇒ Object
Override: fallback register IDs for type resolution.
-
#init_models! ⇒ Object
Initialize this version’s model tree.
- #initialized? ⇒ Boolean
-
#oscal_version ⇒ Object
Override: the OSCAL version string (e.g., “1.2.1”).
-
#register ⇒ Object
The version-specific register for type resolution.
-
#register_id ⇒ Object
Override: the register ID symbol for this version.
-
#register_models! ⇒ Object
Override in each version module to load/register model classes.
Class Method Details
.extended(base) ⇒ Object
34 35 36 37 38 39 |
# File 'lib/oscal/versioned.rb', line 34 def self.extended(base) base.instance_eval do @register = nil @initialized = false end end |
Instance Method Details
#create_register ⇒ Object
Create and configure the register with fallback chain.
47 48 49 50 51 52 |
# File 'lib/oscal/versioned.rb', line 47 def create_register reg = Lutaml::Model::Register.new(register_id, fallback: fallback_registers) Lutaml::Model::GlobalRegister.register(reg) reg end |
#fallback_registers ⇒ Object
Override: fallback register IDs for type resolution. Default chain: common types, then global default.
80 81 82 |
# File 'lib/oscal/versioned.rb', line 80 def fallback_registers %i[oscal_common default] end |
#init_models! ⇒ Object
Initialize this version’s model tree. Safe to call multiple times.
55 56 57 58 59 60 61 |
# File 'lib/oscal/versioned.rb', line 55 def init_models! return if @initialized register register_models! @initialized = true end |
#initialized? ⇒ Boolean
84 85 86 |
# File 'lib/oscal/versioned.rb', line 84 def initialized? @initialized end |
#oscal_version ⇒ Object
Override: the OSCAL version string (e.g., “1.2.1”).
74 75 76 |
# File 'lib/oscal/versioned.rb', line 74 def oscal_version raise NotImplementedError, "Each version must implement #oscal_version" end |
#register ⇒ Object
The version-specific register for type resolution.
42 43 44 |
# File 'lib/oscal/versioned.rb', line 42 def register @register ||= create_register end |
#register_id ⇒ Object
Override: the register ID symbol for this version.
69 70 71 |
# File 'lib/oscal/versioned.rb', line 69 def register_id raise NotImplementedError, "Each version must implement #register_id" end |
#register_models! ⇒ Object
Override in each version module to load/register model classes.
64 65 66 |
# File 'lib/oscal/versioned.rb', line 64 def register_models! raise NotImplementedError, "Each version must implement #register_models!" end |