Class: Lutaml::Xml::HoistingAlgorithm::NamespaceScopeOnly

Inherits:
Base
  • Object
show all
Defined in:
lib/lutaml/xml/hoisting_algorithm.rb

Overview

NamespaceScopeOnly Algorithm

Only hoists namespaces that are in namespace_scope. Non-scope namespaces are declared at first usage.

This is the strictest interpretation of namespace_scope semantics.

Instance Method Summary collapse

Instance Method Details

#should_hoist_here?(element, namespace_class, needs, context) ⇒ Boolean

Returns:

  • (Boolean)


121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
# File 'lib/lutaml/xml/hoisting_algorithm.rb', line 121

def should_hoist_here?(element, namespace_class, needs, context)
  return false if already_hoisted?(namespace_class, context)

  scope_config = needs.scope_config_for(namespace_class)

  if scope_config
    # In namespace_scope - eligible for hoisting, use LCA logic
    element_needs_namespace?(element, namespace_class)
  else
    # Not in namespace_scope - only at first usage
    element.namespace_class == namespace_class ||
      element.attributes.any? do |a|
        a.namespace_class == namespace_class
      end
  end
end