Module: Legion::Extensions::Absorbers::PatternMatcher

Defined in:
lib/legion/extensions/absorbers/pattern_matcher.rb

Class Method Summary collapse

Class Method Details

.listObject



38
39
40
# File 'lib/legion/extensions/absorbers/pattern_matcher.rb', line 38

def list
  @mutex.synchronize { @registrations.dup }
end

.register(absorber_class) ⇒ Object



12
13
14
15
16
17
18
19
20
21
22
23
24
# File 'lib/legion/extensions/absorbers/pattern_matcher.rb', line 12

def register(absorber_class)
  @mutex.synchronize do
    absorber_class.patterns.each do |pat|
      @registrations << {
        type:           pat[:type],
        value:          pat[:value],
        priority:       pat[:priority],
        absorber_class: absorber_class,
        description:    absorber_class.description
      }
    end
  end
end

.registrationsObject



42
43
44
# File 'lib/legion/extensions/absorbers/pattern_matcher.rb', line 42

def registrations
  @mutex.synchronize { @registrations.dup }
end

.reset!Object



46
47
48
# File 'lib/legion/extensions/absorbers/pattern_matcher.rb', line 46

def reset!
  @mutex.synchronize { @registrations.clear }
end

.resolve(input) ⇒ Object



26
27
28
29
30
31
32
33
34
35
36
# File 'lib/legion/extensions/absorbers/pattern_matcher.rb', line 26

def resolve(input)
  matches = @mutex.synchronize { @registrations.dup }.select do |reg|
    matcher = Matchers::Base.for_type(reg[:type])
    next false unless matcher

    matcher.match?(reg[:value], input)
  end
  return nil if matches.empty?

  matches.min_by { |m| [m[:priority], -m[:value].gsub('*', '').length] }&.dig(:absorber_class)
end