Class: RSMP::CommandMatcher

Inherits:
Matcher
  • Object
show all
Defined in:
lib/rsmp/collect/command_matcher.rb

Overview

Class for matching a command

Instance Attribute Summary

Attributes inherited from Matcher

#got, #message, #want

Instance Method Summary collapse

Methods inherited from Matcher

#done?, #forget, #initialize, #keep, #perform_match

Constructor Details

This class inherits a constructor from RSMP::Matcher

Instance Method Details

#match(item) ⇒ Object



32
33
34
35
36
37
# File 'lib/rsmp/collect/command_matcher.rb', line 32

def match(item)
  code_match = match_code(item)
  return code_match if code_match.nil?

  match_value?(item)
end

#match_code(item) ⇒ Object



4
5
6
7
8
9
# File 'lib/rsmp/collect/command_matcher.rb', line 4

def match_code(item)
  return nil if @want['cCI'] && @want['cCI'] != item['cCI']
  return nil if @want['n'] && @want['n'] != item['n']

  true
end

#match_value?(item) ⇒ Boolean

Returns:

  • (Boolean)


11
12
13
14
15
16
17
18
19
20
21
22
23
# File 'lib/rsmp/collect/command_matcher.rb', line 11

def match_value?(item)
  return true unless @want.key?('v')
  return true if %w[undefined unknown].include?(item['age'])

  want = @want['v']
  got = item['v']
  if want.is_a? Regexp
    return false unless regex_match?(got, want)
  elsif got != want
    return false
  end
  true
end

#regex_match?(got, want) ⇒ Boolean

Returns:

  • (Boolean)


25
26
27
28
29
30
# File 'lib/rsmp/collect/command_matcher.rb', line 25

def regex_match?(got, want)
  return got =~ want if got.is_a?(String)
  return got.any? { |item| item.is_a?(String) && item =~ want } if got.is_a?(Array)

  false
end