Class: Lutaml::Xml::Decisions::Rules::NamespaceScopeRule

Inherits:
DecisionRule
  • Object
show all
Defined in:
lib/lutaml/xml/decisions/rules/namespace_scope_rule.rb

Overview

Priority 3: namespace_scope configuration

When namespace_scope hoists a namespace to root, elements using that namespace MUST use prefix format (UNLESS it’s the ROOT element’s OWN namespace - in which case default format is preferred)

Instance Method Summary collapse

Methods inherited from DecisionRule

#<=>, #name

Instance Method Details

#applies?(context) ⇒ Boolean

Applies when namespace is in namespace_scope configuration AND will be hoisted

Returns:

  • (Boolean)


20
21
22
23
24
25
26
27
28
29
# File 'lib/lutaml/xml/decisions/rules/namespace_scope_rule.rb', line 20

def applies?(context)
  return false unless context.has_namespace?

  config = context.namespace_scope_config
  return false if config.nil?

  # Only apply if namespace_scope will actually hoist
  ns_usage = context.namespace_usage
  config.always_mode? || (config.auto_mode? && ns_usage&.used_in&.any?)
end

#decide(context) ⇒ Object

Decision: Use prefix (except for root’s own namespace)



32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# File 'lib/lutaml/xml/decisions/rules/namespace_scope_rule.rb', line 32

def decide(context)
  context.namespace_scope_config

  if context.is_root && context.has_namespace?
    # Root element with its own namespace -> use default format (cleaner)
    Decision.default(
      namespace_class: context.namespace_class,
      reason: "Priority 3: Root element's own namespace - use default format",
    )
  else
    # Other hoisted namespaces OR non-root elements -> MUST use prefix
    Decision.prefix(
      prefix: context.namespace_class.prefix_default,
      namespace_class: context.namespace_class,
      reason: "Priority 3: namespace_scope hoisting - use prefix format",
    )
  end
end

#priorityObject

Priority 3



15
16
17
# File 'lib/lutaml/xml/decisions/rules/namespace_scope_rule.rb', line 15

def priority
  3
end