Class: N::EventManager

Inherits:
Object
  • Object
show all
Defined in:
lib/n/events.rb

Overview

EventManager

Example:

$ev.event(“id/user/login”, user) $ev.add_handler(“id/user/login”, “login-score”, proc { |user| user += 1 })

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(logger = nil) ⇒ EventManager

Returns a new instance of EventManager.



38
39
40
41
# File 'lib/n/events.rb', line 38

def initialize(logger = nil)
	@events = Hash.new
	@logger = logger
end

Instance Attribute Details

#eventsObject (readonly)

Returns the value of attribute events.



35
36
37
# File 'lib/n/events.rb', line 35

def events
  @events
end

#loggerObject

Returns the value of attribute logger.



36
37
38
# File 'lib/n/events.rb', line 36

def logger
  @logger
end

Instance Method Details

#add_handler(event, name, proc) ⇒ Object

Register an event handler.

Input:

event = the event name = the name of the handler proc = the proc of the hadler



50
51
52
53
54
55
# File 'lib/n/events.rb', line 50

def add_handler(event, name, proc)
	unless event_handlers = @events[event]
		@events[event] = event_handlers = Hash.new
	end
	event_handlers[name] = proc
end

#event(event, params) ⇒ Object Also known as: fire

Fire an event

Input:

event = the event to fire param = parameters for the handler, use an array for multiple parameters.



84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
# File 'lib/n/events.rb', line 84

def event(event, params)
	if event_handlers = @events[event]
		# call all event handler procs
		for handler in event_handlers.values
			# call the handler with the params.
			handler.call(params)
		end
	end
	if @logger
		if params.is_a?(Array)
			pstr = params.collect{|i| i.to_s()}.join(", ")
		else
			pstr = params.to_s()
		end
		@logger.info("#{event}: #{pstr}")
	end
end

#remove_all_handlers(event) ⇒ Object

Remove all handlers for the event.

Input:

event = the event name = the name of the handler



73
74
75
# File 'lib/n/events.rb', line 73

def remove_all_handlers(event)
	@events[event] = Hash.new
end

#remove_handler(event, name) ⇒ Object

Remove the named handler from the event.



59
60
61
62
63
64
65
# File 'lib/n/events.rb', line 59

def remove_handler(event, name)
	if event_handlers = @events[event]
		event_handlers.delete(name)
	else
		$log.debug "ev: cannot remove, handler #{name} not found for event #{event}" if $DBG
	end
end