class EventHandler
This class is used for event handeling.
Examples¶ ↑
events = EventHandler.new events.add_event(:name => :test_event) events.connect(:test_event) do |*args| print "Test-event called!\n" end events.call(:test_event) #=> prints "Test-event called!\n"
Public Class Methods
new(args = {})
click to toggle source
Sets various used variables.
# File lib/event_handler.rb, line 12 def initialize(args = {}) @args = args @events = {} end
Public Instance Methods
add_event(event)
click to toggle source
Adds information about a new event.
Examples¶ ↑
events.add_event(:name => :test_event)
# File lib/event_handler.rb, line 20 def add_event(event) raise "No name given." if !event[:name] @events[event[:name]] = [] if !@events.key?(event[:name]) @events[event[:name]] = { :event => event, :callbacks => {}, :callbacks_count => 0 } end
add_events(*events)
click to toggle source
call(name, *args)
click to toggle source
Calls an added event.
Examples¶ ↑
events.call(:test_event, {:data => 1})
# File lib/event_handler.rb, line 92 def call(name, *args) raise "No such event: '#{name}'." if !@events.key?(name) event = @events[name] ret = nil event[:callbacks].clone.each do |callback_id, callback_hash| ret = callback_hash[:block].call(name, *args) end return ret end
connect(name, &block)
click to toggle source
Connects the given block to a given event.
Examples¶ ↑
events.connect(:test_event){ |*args| print "Test event!\n"}
# File lib/event_handler.rb, line 43 def connect(name, &block) raise "No such event: '#{name}'." if !@events.key?(name) event = @events[name] if event[:event].key?(:connections_max) and event[:callbacks].length >= event[:event][:connections_max].to_i raise "The event '#{name}' has reached its maximum connections of '#{event[:event][:connections_max]}'" end event[:callbacks_count] += 1 count = event[:callbacks_count] event[:callbacks][count] = { :block => block } return count end
connected?(name)
click to toggle source
count_connects(name)
click to toggle source
Returns how many blocks have been connected to an event.
Examples¶ ↑
print "More than five connections to test-event!" if events.count_events(:test_event) > 5
# File lib/event_handler.rb, line 84 def count_connects(name) raise "No such event." if !@events.key?(name) return @events[name][:callbacks].length end
disconnect(name, callback_id)
click to toggle source
Disconnects an event.
Examples¶ ↑
connection_id = events.connect(:test_event){print "test event!} events.disconnect(:test_event, connection_id) events.call(:test_event) #=> Doesnt print 'test event!'.
# File lib/event_handler.rb, line 74 def disconnect(name, callback_id) raise "No such event: '#{name}'." if !@events.key?(name) raise "No such connection: '#{name}' --> '#{callback_id}' (#{@events[name]})" if !@events[name][:callbacks].key?(callback_id) @events[name][:callbacks][callback_id].clear @events[name][:callbacks].delete(callback_id) end