Module: RosettAi::Composition::MergeStrategy
- Defined in:
- lib/rosett_ai/composition/merge_strategy.rb
Overview
Configurable merge strategies for resolving rule ID collisions across scopes. When the same rule ID exists in multiple behaviours, the merge strategy determines which value(s) appear in the final composition.
Defined Under Namespace
Classes: ArrayUnion, DeepMerge, FirstWins
Constant Summary collapse
- STRATEGIES =
['first_wins', 'deep_merge', 'array_union'].freeze
Class Method Summary collapse
-
.group_by_id(rules) ⇒ Array<Array(String, Array<Hash>)>
Groups rules by ID while preserving insertion order.
-
.resolve(name) ⇒ Class
Resolves the strategy class from a name string.
Class Method Details
.group_by_id(rules) ⇒ Array<Array(String, Array<Hash>)>
Groups rules by ID while preserving insertion order.
37 38 39 40 41 42 43 44 45 46 47 |
# File 'lib/rosett_ai/composition/merge_strategy.rb', line 37 def self.group_by_id(rules) groups = rules.group_by { |r| r[:id] } seen = {} rules.filter_map do |rule| id = rule[:id] next if seen.key?(id) seen[id] = true [id, groups[id]] end end |
.resolve(name) ⇒ Class
Resolves the strategy class from a name string.
22 23 24 25 26 27 28 29 30 31 |
# File 'lib/rosett_ai/composition/merge_strategy.rb', line 22 def self.resolve(name) case name.to_s when 'first_wins' then FirstWins when 'deep_merge' then DeepMerge when 'array_union' then ArrayUnion else raise RosettAi::CompositionError, "Unknown merge strategy: #{name}. Valid: #{STRATEGIES.join(', ')}" end end |