Class: Lutaml::Lml::Executor::ConditionEvaluator
- Inherits:
-
Object
- Object
- Lutaml::Lml::Executor::ConditionEvaluator
- Defined in:
- lib/lutaml/lml/executor/condition_evaluator.rb
Overview
Evaluates collection validation conditions against instance data.
Conditions are simple DSL strings like “count >= 3” or “all? { |i| i.components.count > 0 }”. The evaluator parses a safe subset of forms — it never calls ‘eval` on arbitrary Ruby.
Supported condition forms:
"count >= N" — collection size comparison
"count == N", "count <= N", etc.
"all? { |i| i.path OP literal }" — every instance matches
"any? { |i| i.path OP literal }" — at least one instance matches
The block predicate supports a single comparison of an instance attribute path (e.g. ‘i.components.count`, `i.name`) against a literal (number, quoted string, true/false/nil) using one of `>, >=, <, <=, ==, !=`.
Constant Summary collapse
- ConditionError =
Class.new(StandardError)
- BLOCK_PREFIX =
/\A\s*(all|any)\?/.freeze
- BLOCK_VAR =
/\A\s*\|(\w+)\|/.freeze
- COMPARISON =
/\A\s*(.+?)\s*(>=|<=|==|!=|>|<)\s*(.+?)\s*\z/.freeze
Class Method Summary collapse
-
.evaluate(collection, instances) ⇒ Object
Evaluate all validation conditions against a collection of instances.
Instance Method Summary collapse
- #evaluate_all(conditions) ⇒ Object
-
#initialize(instances) ⇒ ConditionEvaluator
constructor
A new instance of ConditionEvaluator.
Constructor Details
#initialize(instances) ⇒ ConditionEvaluator
Returns a new instance of ConditionEvaluator.
39 40 41 |
# File 'lib/lutaml/lml/executor/condition_evaluator.rb', line 39 def initialize(instances) @instances = instances end |
Class Method Details
.evaluate(collection, instances) ⇒ Object
Evaluate all validation conditions against a collection of instances. Returns an array of error strings (empty if all pass).
32 33 34 35 36 37 |
# File 'lib/lutaml/lml/executor/condition_evaluator.rb', line 32 def self.evaluate(collection, instances) return [] unless collection.validations&.any? return [] unless collection.is_a?(Collection) new(instances).evaluate_all(collection.validations) end |
Instance Method Details
#evaluate_all(conditions) ⇒ Object
43 44 45 46 47 48 49 |
# File 'lib/lutaml/lml/executor/condition_evaluator.rb', line 43 def evaluate_all(conditions) conditions.filter_map do |condition| evaluate(condition) rescue ConditionError => e "Validation failed: #{e.}" end end |