lib/arborist/event/node_delta.rb in arborist-0.0.1.pre20160128152542 vs lib/arborist/event/node_delta.rb in arborist-0.0.1.pre20160606141735
- old
+ new
@@ -1,20 +1,47 @@
# -*- ruby -*-
#encoding: utf-8
require 'arborist/event' unless defined?( Arborist::Event )
-require 'arborist/event/node_matching'
+require 'arborist/event/node'
+require 'arborist/mixins'
# An event sent when one or more attributes of a node changes.
-class Arborist::Event::NodeDelta < Arborist::Event
- include Arborist::Event::NodeMatching
+class Arborist::Event::NodeDelta < Arborist::Event::Node
+ include Arborist::HashUtilities
### Create a new NodeDelta event for the specified +node+. The +delta+
### is a Hash of:
### attribute_name => [ old_value, new_value ]
def initialize( node, delta )
super # Overridden for the documentation
+ end
+
+
+ ### Overridden so delta events only contain the diff of attributes that changed.
+ def payload
+ return @payload
+ end
+
+
+ ### Returns +true+ if the specified +object+ matches this event.
+ def match( object )
+ return super &&
+ object.respond_to?( :criteria ) && self.delta_matches?( object.criteria )
+ end
+
+
+ ### Returns +true+ if the 'delta' value of the specified +criteria+ (which
+ ### must respond to .all?) matches the delta this event represents.
+ def delta_matches?( criteria )
+ delta_criteria = criteria['delta'] || {}
+ self.log.debug "Matching event against delta criteria: %p" % [ delta_criteria ]
+
+ return delta_criteria.all? do |key, val|
+ self.log.debug " matching %p: %p against %p" % [ key, val, self.payload ]
+ hash_matches( self.payload, key, val )
+ end.tap {|match| self.log.debug " event delta %s match." % [ match ? "DID" : "did not"] }
end
end # class Arborist::Event::NodeDelta