Class: Lutaml::Xml::NamespaceResolver
- Inherits:
-
Object
- Object
- Lutaml::Xml::NamespaceResolver
- Defined in:
- lib/lutaml/xml/namespace_resolver.rb
Overview
Encapsulates all namespace resolution logic for XML serialization
Responsibilities:
-
Extract strategy from DeclarationPlan
-
Determine prefix usage
-
Determine xmlns=“” requirements
-
Calculate final namespace URI
This module provides a single source of truth for namespace decisions, reducing code duplication across adapters and enabling easier testing.
Instance Attribute Summary collapse
-
#register ⇒ Object
readonly
Returns the value of attribute register.
Instance Method Summary collapse
-
#initialize(register) ⇒ NamespaceResolver
constructor
A new instance of NamespaceResolver.
-
#resolve_for_element(rule, attribute, mapping, plan, options) ⇒ Hash
Resolve namespace for an element.
-
#xmlns_blank_required?(ns_result, parent_uses_default_ns) ⇒ Boolean
Check if xmlns=“” should be added to attributes.
Constructor Details
#initialize(register) ⇒ NamespaceResolver
Returns a new instance of NamespaceResolver.
18 19 20 |
# File 'lib/lutaml/xml/namespace_resolver.rb', line 18 def initialize(register) @register = register end |
Instance Attribute Details
#register ⇒ Object (readonly)
Returns the value of attribute register.
16 17 18 |
# File 'lib/lutaml/xml/namespace_resolver.rb', line 16 def register @register end |
Instance Method Details
#resolve_for_element(rule, attribute, mapping, plan, options) ⇒ Hash
Resolve namespace for an element
35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
# File 'lib/lutaml/xml/namespace_resolver.rb', line 35 def resolve_for_element(rule, attribute, mapping, plan, ) # Get form_default from parent's schema (namespace class) # W3C default is :unqualified, not :qualified form_default = mapping&.namespace_class&.element_form_default || :unqualified # Resolve element's namespace first to know which namespace we're dealing with temp_ns_info = rule.resolve_namespace( attr: attribute, register: @register, parent_ns_uri: mapping&.namespace_uri, parent_ns_class: mapping&.namespace_class, form_default: form_default, use_prefix: false, # Temporary, just to get namespace parent_prefix: nil, ) element_ns_uri = temp_ns_info[:uri] # Tree structure no longer has element_strategy - use legacy logic directly resolve_from_legacy_logic(rule, attribute, mapping, plan, , element_ns_uri, form_default) end |
#xmlns_blank_required?(ns_result, parent_uses_default_ns) ⇒ Boolean
Check if xmlns=“” should be added to attributes
63 64 65 |
# File 'lib/lutaml/xml/namespace_resolver.rb', line 63 def xmlns_blank_required?(ns_result, parent_uses_default_ns) ns_result[:blank_xmlns] && parent_uses_default_ns end |