Module: Legion::Extensions::MindGrowth::Helpers::CompositionMap

Defined in:
lib/legion/extensions/mind_growth/helpers/composition_map.rb

Class Method Summary collapse

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_rulesObject



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

.statsObject



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