Class: Lutaml::Xml::Decisions::Rules::ElementFormOptionRule

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

Overview

Decision rule for element form option from map_element

When form: :qualified is specified on map_element, the element MUST use prefix format to explicitly qualify the element name. When form: :unqualified is specified, the element MUST NOT use prefix format (uses default or blank namespace).

Priority: 0.9 (between Tier 1 explicit option and Tier 2 format preservation)

  • form: :qualified forces prefix format (even if preserved input used default)

  • form: :unqualified forces default format (even if preserved input used prefix)

This allows per-element qualification overrides of the namespace’s element_form_default setting.

Instance Method Summary collapse

Methods inherited from DecisionRule

#<=>, #name

Instance Method Details

#applies?(context) ⇒ Boolean

Check if rule applies

Parameters:

Returns:

  • (Boolean)

    true if element has form option set



30
31
32
33
34
35
36
37
38
# File 'lib/lutaml/xml/decisions/rules/element_form_option_rule.rb', line 30

def applies?(context)
  return false unless context.element
  # Check if element responds to :form before accessing it
  return false unless context.element.respond_to?(:form)

  # Check if element has form attribute
  form = context.element.form
  !form.nil?
end

#decide(context) ⇒ Decision

Make the decision

Parameters:

Returns:



44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
# File 'lib/lutaml/xml/decisions/rules/element_form_option_rule.rb', line 44

def decide(context)
  form = context.element.form

  if form == :qualified
    # Force prefix format when form: :qualified
    # Use namespace's prefix_default if available
    prefix = context.namespace_class&.prefix_default

    if prefix
      Decision.prefix(
        prefix: prefix,
        namespace_class: context.namespace_class,
        reason: "Priority 0.9: form: :qualified forces prefix format",
      )
    else
      # No prefix available - this shouldn't happen in practice
      # since form: :qualified implies the element has a namespace
      Decision.new(
        format: :default,
        prefix: nil,
        namespace_class: context.namespace_class,
        reason: "Priority 0.9: form: :qualified but no namespace prefix available",
      )
    end
  elsif form == :unqualified
    # Force default format when form: :unqualified
    Decision.default(
      namespace_class: context.namespace_class,
      reason: "Priority 0.9: form: :unqualified forces default format",
    )
  else
    # Unknown form value - should not happen
    Decision::NEUTRAL
  end
end

#priorityInteger

Returns Priority level (-0.5 = higher than InheritFromParentRule’s 0).

Returns:

  • (Integer)

    Priority level (-0.5 = higher than InheritFromParentRule’s 0)



22
23
24
# File 'lib/lutaml/xml/decisions/rules/element_form_option_rule.rb', line 22

def priority
  -0.5
end