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

require 'arborist/event' unless defined?( Arborist::Event )


# A base class for events which are related to an Arborist::Node.
class Arborist::Event::Node < Arborist::Event

	### Strip and save the node argument to the constructor.
	def initialize( node, payload=nil )
		@node = node
		super( payload )
	end


	######
	public
	######

	# The node that generated the event
	attr_reader :node


	### Returns +true+ if the specified +object+ matches this event.
	def match( object )
		return super &&
			object.respond_to?( :criteria ) && self.node.matches?( object.criteria ) &&
			( !object.respond_to?(:negative_criteria) || !self.node.matches?(object.negative_criteria) )
	end


	### Use the node data as this event's payload.
	def payload
		return self.node.to_h
	end


	### Inject the node identifier into the generated hash.
	def to_h
		return super.merge( identifier: self.node.identifier )
	end

end # module Arborist::Event::NodeMatching