Class: RosettAi::Composition::CompositionResult
- Inherits:
-
Object
- Object
- RosettAi::Composition::CompositionResult
- Defined in:
- lib/rosett_ai/composition/composition_result.rb
Overview
Value object representing the final result of behaviour composition. Contains the merged rules, metadata about how they were composed, and any warnings or conflicts detected during composition.
Instance Attribute Summary collapse
-
#conflicts ⇒ Array<String>
readonly
Conflicts detected (rule ID collisions).
-
#merge_strategy ⇒ String
readonly
Merge strategy used during composition.
-
#rules ⇒ Array<Hash>
readonly
Final merged rules in priority order.
-
#sources ⇒ Hash{String => String}
readonly
Behaviour name => scope mapping.
-
#trace ⇒ Array<Hash>
readonly
Trace entries showing composition decisions.
-
#warnings ⇒ Array<String>
readonly
Warnings emitted during composition.
Instance Method Summary collapse
-
#conflicts? ⇒ Boolean
True if any conflicts were detected.
-
#initialize(rules:, trace: [], warnings: [], conflicts: [], sources: {}, merge_strategy: 'first_wins') ⇒ CompositionResult
constructor
rubocop:disable Metrics/ParameterLists -- value object with all-keyword defaults.
-
#rule_count ⇒ Integer
Total number of composed rules.
-
#warnings? ⇒ Boolean
True if any warnings were emitted.
Constructor Details
#initialize(rules:, trace: [], warnings: [], conflicts: [], sources: {}, merge_strategy: 'first_wins') ⇒ CompositionResult
rubocop:disable Metrics/ParameterLists -- value object with all-keyword defaults
37 38 39 40 41 42 43 44 45 46 |
# File 'lib/rosett_ai/composition/composition_result.rb', line 37 def initialize(rules:, trace: [], warnings: [], conflicts: [], sources: {}, merge_strategy: 'first_wins') # rubocop:enable Metrics/ParameterLists @rules = rules.freeze @trace = trace.freeze @warnings = warnings.freeze @conflicts = conflicts.freeze @sources = sources.freeze @merge_strategy = merge_strategy.freeze end |
Instance Attribute Details
#conflicts ⇒ Array<String> (readonly)
Returns conflicts detected (rule ID collisions).
22 23 24 |
# File 'lib/rosett_ai/composition/composition_result.rb', line 22 def conflicts @conflicts end |
#merge_strategy ⇒ String (readonly)
Returns merge strategy used during composition.
28 29 30 |
# File 'lib/rosett_ai/composition/composition_result.rb', line 28 def merge_strategy @merge_strategy end |
#rules ⇒ Array<Hash> (readonly)
Returns final merged rules in priority order.
13 14 15 |
# File 'lib/rosett_ai/composition/composition_result.rb', line 13 def rules @rules end |
#sources ⇒ Hash{String => String} (readonly)
Returns behaviour name => scope mapping.
25 26 27 |
# File 'lib/rosett_ai/composition/composition_result.rb', line 25 def sources @sources end |
#trace ⇒ Array<Hash> (readonly)
Returns trace entries showing composition decisions.
16 17 18 |
# File 'lib/rosett_ai/composition/composition_result.rb', line 16 def trace @trace end |
#warnings ⇒ Array<String> (readonly)
Returns warnings emitted during composition.
19 20 21 |
# File 'lib/rosett_ai/composition/composition_result.rb', line 19 def warnings @warnings end |
Instance Method Details
#conflicts? ⇒ Boolean
Returns true if any conflicts were detected.
54 55 56 |
# File 'lib/rosett_ai/composition/composition_result.rb', line 54 def conflicts? !conflicts.empty? end |
#rule_count ⇒ Integer
Returns total number of composed rules.
49 50 51 |
# File 'lib/rosett_ai/composition/composition_result.rb', line 49 def rule_count rules.size end |
#warnings? ⇒ Boolean
Returns true if any warnings were emitted.
59 60 61 |
# File 'lib/rosett_ai/composition/composition_result.rb', line 59 def warnings? !warnings.empty? end |