Sha256: fd330152df915e7d1df374e58b2f7c4957e972cac733fa165a4d9880c467c9e2

Contents?: true

Size: 1.9 KB

Versions: 3

Compression:

Stored size: 1.9 KB

Contents

# -*- ruby -*-
#encoding: utf-8

require 'arborist/event' unless defined?( Arborist::Event )
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::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 event contains node information other than about a
	### change in its state.
	def informational?
		return true
	end


	### Returns +true+ if the specified +object+ matches this event.
	def match( object )
		rval = super &&
			self.delta_matches?( object.criteria ) &&
			!self.delta_matches?( object.negative_criteria, if_empty: false )
		self.log.debug "Delta event #match: %p" % [ rval ]
		return rval
	end


	### Returns +true+ if the 'delta' value of the specified +criteria+ (which
	### must respond to .all?) matches the delta this event represents. If the specified
	### criteria doesn't contain any `delta` criteria, the +default+ value is used instead.
	def delta_matches?( criteria, if_empty: true )
		self.log.debug "Delta matching %p (%p if empty)" % [ criteria, if_empty ]
		delta_criteria = criteria['delta']
		return if_empty if !delta_criteria || delta_criteria.empty?

		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

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
arborist-0.6.0 lib/arborist/event/node_delta.rb
arborist-0.5.0 lib/arborist/event/node_delta.rb
arborist-0.4.0 lib/arborist/event/node_delta.rb