Module: Ace::Assign::Atoms::CompositionRules
- Defined in:
- lib/ace/assign/atoms/composition_rules.rb
Overview
Pure functions for loading and applying composition rules.
Composition rules define ordering constraints, step pairs, and conditional suggestions for building assignments.
Class Method Summary collapse
-
.load(catalog_dir) ⇒ Hash
Load composition rules from catalog directory.
-
.suggest_additions(step_names, rules) ⇒ Array<Hash>
Suggest additional steps based on the selected set and rules.
-
.validate_ordering(step_names, rules) ⇒ Array<Hash>
Validate step ordering against rules.
Class Method Details
.load(catalog_dir) ⇒ Hash
Load composition rules from catalog directory.
25 26 27 28 29 30 31 32 |
# File 'lib/ace/assign/atoms/composition_rules.rb', line 25 def self.load(catalog_dir) rules_path = File.join(catalog_dir, "composition-rules.yml") return default_rules unless File.exist?(rules_path) YAML.safe_load_file(rules_path, permitted_classes: [Date]) || default_rules rescue default_rules end |
.suggest_additions(step_names, rules) ⇒ Array<Hash>
Suggest additional steps based on the selected set and rules.
56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 |
# File 'lib/ace/assign/atoms/composition_rules.rb', line 56 def self.suggest_additions(step_names, rules) suggestions = [] # Check pair completeness (rules["pairs"] || []).each do |pair| pair_suggestions = check_pair_completeness(step_names, pair) suggestions.concat(pair_suggestions) end # Check conditional rules (rules["conditional"] || []).each do |conditional| conditional_suggestions = check_conditional_rule(step_names, conditional) suggestions.concat(conditional_suggestions) end suggestions end |
.validate_ordering(step_names, rules) ⇒ Array<Hash>
Validate step ordering against rules.
39 40 41 42 43 44 45 46 47 48 49 |
# File 'lib/ace/assign/atoms/composition_rules.rb', line 39 def self.validate_ordering(step_names, rules) violations = [] ordering_rules = rules["ordering"] || [] ordering_rules.each do |rule| violation = check_ordering_rule(step_names, rule) violations << violation if violation end violations end |