Module: Xmi::Versioned
Overview
Base module for version-specific XMI model trees.
Each version module (V20110701, V20131001, V20161101) extends this and provides its own register and namespace bindings.
Class Method Summary collapse
-
.extended(base) ⇒ Object
Called when a module extends Versioned.
Instance Method Summary collapse
-
#create_register ⇒ Lutaml::Model::Register
Create and configure the register.
-
#fallback_registers ⇒ Array<Symbol>
Get fallback register IDs for this version.
-
#init_models! ⇒ void
Initialize this version’s model tree.
-
#initialized? ⇒ Boolean
Check if this version has been initialized.
-
#namespace_classes ⇒ Array<Class>
Get namespace classes this version binds to.
-
#register ⇒ Lutaml::Model::Register
Get the register for this version.
-
#register_id ⇒ Symbol
Get the register ID for this version.
-
#register_models! ⇒ void
Register all models for this version.
-
#uml_namespace ⇒ Class?
Get the UML namespace class for this version.
-
#xmi_namespace ⇒ Class?
Get the XMI namespace class for this version.
Class Method Details
.extended(base) ⇒ Object
Called when a module extends Versioned
29 30 31 32 33 34 |
# File 'lib/xmi/versioned.rb', line 29 def self.extended(base) base.class_eval do @version_register = nil @initialized = false end end |
Instance Method Details
#create_register ⇒ Lutaml::Model::Register
Create and configure the register
48 49 50 51 52 53 54 55 56 57 58 59 60 61 |
# File 'lib/xmi/versioned.rb', line 48 def create_register reg = Lutaml::Model::Register.new(register_id, fallback: fallback_registers) # Register in GlobalRegister first Lutaml::Model::GlobalRegister.register(reg) # Bind to all namespaces this version handles namespace_classes.each do |ns_class| reg.bind_namespace(ns_class) end @version_register = reg end |
#fallback_registers ⇒ Array<Symbol>
Get fallback register IDs for this version
Default: fall back to common, then default. Override for version chains (e.g., V20161101 falls back to V20131001).
115 116 117 |
# File 'lib/xmi/versioned.rb', line 115 def fallback_registers %i[xmi_common default] end |
#init_models! ⇒ void
This method returns an undefined value.
Initialize this version’s model tree
This should be called after all version-specific models are defined. It registers all models in this version’s register.
70 71 72 73 74 75 76 77 |
# File 'lib/xmi/versioned.rb', line 70 def init_models! return if @initialized register register_models! @initialized = true end |
#initialized? ⇒ Boolean
Check if this version has been initialized
141 142 143 |
# File 'lib/xmi/versioned.rb', line 141 def initialized? @initialized end |
#namespace_classes ⇒ Array<Class>
Get namespace classes this version binds to
103 104 105 106 |
# File 'lib/xmi/versioned.rb', line 103 def namespace_classes raise NotImplementedError, "Each version must implement #namespace_classes" end |
#register ⇒ Lutaml::Model::Register
Get the register for this version
40 41 42 |
# File 'lib/xmi/versioned.rb', line 40 def register @register ||= create_register end |
#register_id ⇒ Symbol
Get the register ID for this version
94 95 96 97 |
# File 'lib/xmi/versioned.rb', line 94 def register_id raise NotImplementedError, "Each version must implement #register_id" end |
#register_models! ⇒ void
This method returns an undefined value.
Register all models for this version
Override in each version module to register specific models.
85 86 87 88 |
# File 'lib/xmi/versioned.rb', line 85 def register_models! raise NotImplementedError, "Each version must implement #register_models!" end |
#uml_namespace ⇒ Class?
Get the UML namespace class for this version
131 132 133 134 135 |
# File 'lib/xmi/versioned.rb', line 131 def uml_namespace namespace_classes.find do |ns| ns.uri.include?("/UML/") && !ns.uri.include?("UMLD") end end |
#xmi_namespace ⇒ Class?
Get the XMI namespace class for this version
123 124 125 |
# File 'lib/xmi/versioned.rb', line 123 def xmi_namespace namespace_classes.find { |ns| ns.uri.include?("/XMI/") } end |