class Lutaml::Xml::Decisions::DecisionEngine

to lowest priority. First rule that applies determines the decision.
Uses Chain of Responsibility pattern to evaluate rules from highest
Decision Engine - Evaluates rules in priority order

def self.default

Returns:
  • (DecisionEngine) - An engine with all priority rules
def self.default
  rules = [
    Rules::InheritFromParentRule.new,
    Rules::UsedPrefixRule.new,
    Rules::ElementFormDefaultUnqualifiedRule.new,
    Rules::HoistedOnParentRule.new,
    Rules::ElementFormOptionRule.new,
    Rules::ReuseParentPrefixRule.new,
    Rules::FormatPreservationRule.new,
    Rules::ExplicitOptionRule.new,
    Rules::NamespaceScopeRule.new,
    Rules::AttributeUsageRule.new,
    Rules::ElementFormDefaultRule.new,
    Rules::DefaultPreferenceRule.new, # Must be last (catch-all)
  ]
  new(rules)
end

def add_rule(rule)

Returns:
  • (DecisionEngine) - A new engine with the rule added

Parameters:
  • rule (DecisionRule) -- The rule to add
def add_rule(rule)
  new_rules = @rules + [rule]
  DecisionEngine.new(new_rules)
end

def execute(context)

Raises:
  • (RuntimeError) - If no rule applies (should never happen)

Returns:
  • (Decision) - The decision made by the first applicable rule

Parameters:
  • context (DecisionContext) -- The decision context
def execute(context)
  @rules.each do |rule|
    if rule.applies?(context)
      return rule.decide(context)
    end
  end
  # This should never happen if DefaultPreferenceRule is included
  raise "No decision rule applied for context: #{context.inspect}"
end

def initialize(rules = [])

def initialize(rules = [])
  @rules = rules.sort # Sort by priority (lower = higher priority)
  freeze
end