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 |
# 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).
114 115 116 |
# File 'lib/xmi/versioned.rb', line 114 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.
69 70 71 72 73 74 75 76 |
# File 'lib/xmi/versioned.rb', line 69 def init_models! return if @initialized register register_models! @initialized = true end |
#initialized? ⇒ Boolean
Check if this version has been initialized
138 139 140 |
# File 'lib/xmi/versioned.rb', line 138 def initialized? @initialized end |
#namespace_classes ⇒ Array<Class>
Get namespace classes this version binds to
102 103 104 105 |
# File 'lib/xmi/versioned.rb', line 102 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
93 94 95 96 |
# File 'lib/xmi/versioned.rb', line 93 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.
84 85 86 87 |
# File 'lib/xmi/versioned.rb', line 84 def register_models! raise NotImplementedError, "Each version must implement #register_models!" end |
#uml_namespace ⇒ Class?
Get the UML namespace class for this version
130 131 132 |
# File 'lib/xmi/versioned.rb', line 130 def uml_namespace namespace_classes.find { |ns| ns.uri.include?("/UML/") && !ns.uri.include?("UMLD") } end |
#xmi_namespace ⇒ Class?
Get the XMI namespace class for this version
122 123 124 |
# File 'lib/xmi/versioned.rb', line 122 def xmi_namespace namespace_classes.find { |ns| ns.uri.include?("/XMI/") } end |