class DBus::MatchRule
D-Bus match rule class¶ ↑
FIXME
Constants
- FILTERS
The list of possible match filters. TODO argN, argNpath
Attributes
The destination filter.
The interface filter.
The member filter.
The path filter.
The sender filter.
@return [String] The type type that is matched.
Public Class Methods
Create a new match rule
# File lib/dbus/matchrule.rb 36 def initialize 37 @sender = @interface = @member = @path = @destination = @type = nil 38 end
Public Instance Methods
Parses a match rule string s and sets the filters on the object.
# File lib/dbus/matchrule.rb 61 def from_s(str) 62 str.split(",").each do |eq| 63 next unless eq =~ /^(.*)='([^']*)'$/ 64 65 # " 66 name = Regexp.last_match(1) 67 val = Regexp.last_match(2) 68 raise MatchRuleException, name unless FILTERS.member?(name.to_sym) 69 70 method("#{name}=").call(val) 71 end 72 self 73 end
Sets the match rule to filter for the given signal and the given interface intf.
# File lib/dbus/matchrule.rb 77 def from_signal(intf, signal) 78 signal = signal.name unless signal.is_a?(String) 79 self.type = "signal" 80 self.interface = intf.name 81 self.member = signal 82 self.path = intf.object.path 83 self 84 end
Determines whether a message msg matches the match rule.
# File lib/dbus/matchrule.rb 87 def match(msg) 88 return false if @type && @type != msg.message_type_s 89 return false if @interface && @interface != msg.interface 90 return false if @member && @member != msg.member 91 return false if @path && @path != msg.path 92 93 # FIXME: sender and destination are ignored 94 true 95 end
Returns a match rule string version of the object. E.g.: “type=‘signal’,sender=‘org.freedesktop.DBus’,” + “interface=‘org.freedesktop.DBus’,member=‘Foo’,” + “path=‘/bar/foo’,destination=‘:452345.34’,arg2=‘bar’”
# File lib/dbus/matchrule.rb 54 def to_s 55 present_rules = FILTERS.select { |sym| method(sym).call } 56 present_rules.map! { |sym| "#{sym}='#{method(sym).call}'" } 57 present_rules.join(",") 58 end
Set the message types to filter to type typ. Possible message types are: signal, method_call, method_return, and error.
# File lib/dbus/matchrule.rb 42 def type=(typ) 43 if !["signal", "method_call", "method_return", "error"].member?(typ) 44 raise MatchRuleException, typ 45 end 46 47 @type = typ 48 end