Module: Legion::Extensions::Absorbers::PatternMatcher
- Defined in:
- lib/legion/extensions/absorbers/pattern_matcher.rb
Class Method Summary collapse
- .list ⇒ Object
- .register(absorber_class) ⇒ Object
- .registrations ⇒ Object
- .reset! ⇒ Object
- .resolve(input) ⇒ Object
Class Method Details
.list ⇒ Object
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 |
.registrations ⇒ Object
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 |