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:

  • Decision context

Returns:

  • 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.is_a?(Lutaml::Xml::DataModel::XmlElement)

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

#decide(context) ⇒ Decision

Make the decision

Parameters:

  • Decision context

Returns:

  • The prefix decision



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:

  • 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