Module: Legion::Extensions::MindGrowth::Helpers::CompositionMap
- Defined in:
- lib/legion/extensions/mind_growth/helpers/composition_map.rb
Class Method Summary collapse
- .add_rule(source_extension:, output_key:, target_extension:, target_method:, transform: nil) ⇒ Object
- .all_rules ⇒ Object
- .clear! ⇒ Object
- .match_output(source_extension:, output:) ⇒ Object
- .remove_rule(rule_id:) ⇒ Object
- .rules_for(source_extension:) ⇒ Object
- .stats ⇒ Object
Class Method Details
.add_rule(source_extension:, output_key:, target_extension:, target_method:, transform: nil) ⇒ Object
13 14 15 16 17 18 19 20 21 22 23 24 25 |
# File 'lib/legion/extensions/mind_growth/helpers/composition_map.rb', line 13 def add_rule(source_extension:, output_key:, target_extension:, target_method:, transform: nil, **) rule_id = SecureRandom.uuid rule = { id: rule_id, source_extension: source_extension.to_s, output_key: output_key.to_sym, target_extension: target_extension.to_s, target_method: target_method.to_sym, transform: transform }.freeze @mutex.synchronize { @rules[rule_id] = rule } { success: true, rule_id: rule_id } end |
.all_rules ⇒ Object
37 38 39 |
# File 'lib/legion/extensions/mind_growth/helpers/composition_map.rb', line 37 def all_rules @mutex.synchronize { @rules.values.dup } end |
.clear! ⇒ Object
54 55 56 |
# File 'lib/legion/extensions/mind_growth/helpers/composition_map.rb', line 54 def clear! @mutex.synchronize { @rules.clear } end |
.match_output(source_extension:, output:) ⇒ Object
41 42 43 44 45 46 47 48 49 50 51 52 |
# File 'lib/legion/extensions/mind_growth/helpers/composition_map.rb', line 41 def match_output(source_extension:, output:, **) src = source_extension.to_s out_h = output.is_a?(Hash) ? output : {} rules = @mutex.synchronize { @rules.values.select { |r| r[:source_extension] == src }.map(&:dup) } rules.filter_map do |rule| key = rule[:output_key] next unless out_h.key?(key) { rule: rule, matched_value: out_h[key] } end end |
.remove_rule(rule_id:) ⇒ Object
27 28 29 30 |
# File 'lib/legion/extensions/mind_growth/helpers/composition_map.rb', line 27 def remove_rule(rule_id:, **) removed = @mutex.synchronize { @rules.delete(rule_id) } { success: !removed.nil?, rule_id: rule_id } end |
.rules_for(source_extension:) ⇒ Object
32 33 34 35 |
# File 'lib/legion/extensions/mind_growth/helpers/composition_map.rb', line 32 def rules_for(source_extension:, **) src = source_extension.to_s @mutex.synchronize { @rules.values.select { |r| r[:source_extension] == src }.map(&:dup) } end |
.stats ⇒ Object
58 59 60 61 62 63 64 65 66 67 68 69 70 71 |
# File 'lib/legion/extensions/mind_growth/helpers/composition_map.rb', line 58 def stats all = @mutex.synchronize { @rules.values.dup } by_source = Hash.new(0) by_target = Hash.new(0) all.each do |r| by_source[r[:source_extension]] += 1 by_target[r[:target_extension]] += 1 end { total_rules: all.size, by_source: by_source.transform_values { |v| v }, by_target: by_target.transform_values { |v| v } } end |