]> xenbits.xen.org Git - xenclient/ruby-dbus.git/commitdiff
Fix the signals handling. master origin/HEAD origin/master
authorJean Guyader <jean.guyader@eu.citrix.com>
Thu, 30 Jul 2009 19:35:31 +0000 (20:35 +0100)
committerJean Guyader <jean.guyader@eu.citrix.com>
Thu, 30 Jul 2009 19:35:31 +0000 (20:35 +0100)
lib/dbus/matchrule.rb

index b6f79f59be62a19797094b486b78356b53f73bf1..01e501b6c834233f01d50679753676970f2800df 100644 (file)
@@ -33,6 +33,7 @@ module DBus
     # Create a new match rule
     def initialize
       @sender = @interface = @member = @path = @destination = @type = nil
+      @filter = Hash.new()
     end
 
     # Set the message types to filter to type _t_.
@@ -56,12 +57,12 @@ module DBus
 
     # Parses a match rule string _s_ and sets the filters on the object.
     def from_s(str)
-      s.split(",").each do |eq|
+      str.split(",").each do |eq|
         if eq =~ /^(.*)='([^']*)'$/
           name = $1
-          val = $1
+          val = $2
           if FILTERS.member?(name.to_sym)
-            method(name + "=").call(val)
+            @filter[name] = val
           else
             raise MatchRuleException
           end
@@ -73,9 +74,9 @@ module DBus
     # given interface _intf_.
     def from_signal(intf, signal)
       signal = signal.name unless signal.is_a?(String)
-      self.type = "signal"
-      self.interface = intf.name
-      self.member = signal
+      self.type = @filter["name"] = "signal"
+      self.interface = @filter["interface"] = intf.name
+      self.member = @filter["member"] = signal
       self.path = intf.object.path
       self
     end
@@ -89,9 +90,9 @@ module DBus
           return false
         end
       end
-      return false if @interface and @interface != msg.interface
-      return false if @member and @member != msg.member
-      return false if @path and @path != msg.path
+      return false if @filter["interface"] and @filter["interface"] != msg.interface
+      return false if @filter["member"] and @filter["member"] != msg.member
+      return false if @filter["path"] and @filter["path"] != msg.path
       true
     end
   end # class MatchRule