Class: Xmi::EaRoot

Inherits:
Object
  • Object
show all
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

Class Method Details

.extension_loaded?(extension_id) ⇒ Boolean

Check if an extension is currently loaded.

Parameters:

  • extension_id (String, Symbol)

    The extension module name

Returns:

  • (Boolean)


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.

Parameters:

  • xml_path (String)

    Path to the MDG extension XML file

Raises:

  • (ArgumentError)

    If the extension is already loaded



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_extensionsHash<String, String>

List all currently loaded extensions.

Returns:

  • (Hash<String, String>)

    Map of extension_id => xml_path



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.

Parameters:

  • extension_id (String, Symbol)

    The extension module name (e.g., “Citygml”)



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