Class: Xmi::EaRoot
- Inherits:
-
Object
- Object
- Xmi::EaRoot
- Defined in:
- lib/xmi/ea_root.rb
Overview
rubocop:disable Metrics/ClassLength
Constant Summary collapse
- MODULE_TEMPLATE =
<<~TEXT module Xmi class EaRoot module #MODULE_NAME# #KLASSES# end end end TEXT
- KLASS_TEMPLATE =
<<~TEXT class #KLASS_NAME# < #FROM_KLASS# #ROOT_TAG_LINE# #ATTRIBUTES##XML_MAPPING# end TEXT
- XML_MAPPING =
<<~TEXT xml do root "#ROOT_TAG#" namespace #NAMESPACE_CLASS# #MAP_ATTRIBUTES# end TEXT
- ATTRIBUTE_LINE =
<<~TEXT attribute :#TAG_NAME#, #ATTRIBUTE_TYPE# TEXT
- MAP_ATTRIBUTES =
<<~TEXT map_attribute "#ATTRIBUTE_NAME#", to: :#ATTRIBUTE_METHOD# TEXT
- MAP_ELEMENT =
<<~TEXT map_element "#ELEMENT_NAME#", to: :#ELEMENT_METHOD#, value_map: Xmi::VALUE_MAP TEXT
Class Method Summary collapse
-
.extension_loaded?(extension_id) ⇒ Boolean
Check if an extension is currently loaded.
-
.load_extension(xml_path) ⇒ void
Load an EA extension from an XML file.
-
.loaded_extensions ⇒ Hash<String, String>
List all currently loaded extensions.
- .output_rb_file(output_rb_path) ⇒ Object
-
.unload_extension(extension_id) ⇒ void
Unload an extension by removing its module and clearing tracking.
Class Method Details
.extension_loaded?(extension_id) ⇒ Boolean
Check if an extension is currently loaded.
88 89 90 91 |
# File 'lib/xmi/ea_root.rb', line 88 def extension_loaded?(extension_id) extension_id = extension_id.to_s.capitalize loaded_extensions.key?(extension_id) end |
.load_extension(xml_path) ⇒ void
This method returns an undefined value.
Load an EA extension from an XML file.
53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
# File 'lib/xmi/ea_root.rb', line 53 def load_extension(xml_path) @content = gen_content(xml_path) extension_id = @module_name if loaded_extensions.key?(extension_id) raise ArgumentError, "Extension '#{extension_id}' is already loaded from " \ "'#{loaded_extensions[extension_id]}'. " \ "Call unload_extension('#{extension_id}') first if you want to reload it." end Object.class_eval @content update_mappings(extension_id) loaded_extensions[extension_id] = xml_path end |
.loaded_extensions ⇒ Hash<String, String>
List all currently loaded extensions.
96 97 98 |
# File 'lib/xmi/ea_root.rb', line 96 def loaded_extensions @loaded_extensions ||= {} end |
.output_rb_file(output_rb_path) ⇒ Object
100 101 102 |
# File 'lib/xmi/ea_root.rb', line 100 def output_rb_file(output_rb_path) File.write(output_rb_path, @content) end |
.unload_extension(extension_id) ⇒ void
This method returns an undefined value.
Unload an extension by removing its module and clearing tracking.
This allows the extension to be loaded again, which is useful for testing scenarios that need to reload extensions.
76 77 78 79 80 81 82 |
# File 'lib/xmi/ea_root.rb', line 76 def unload_extension(extension_id) extension_id = extension_id.to_s.capitalize remove_const(extension_id) if const_defined?(extension_id) loaded_extensions.delete(extension_id) end |