Class: Knj::Event_handler

Inherits:
Object show all
Defined in:
lib/knj/event_handler.rb

Instance Method Summary collapse

Constructor Details

#initialize(args = {}) ⇒ Event_handler

Returns a new instance of Event_handler.



2
3
4
5
# File 'lib/knj/event_handler.rb', line 2

def initialize(args = {})
  @args = args
  @events = {}
end

Instance Method Details

#add_event(event) ⇒ Object



7
8
9
10
11
12
13
14
15
16
# File 'lib/knj/event_handler.rb', line 7

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) ⇒ Object



18
19
20
21
22
# File 'lib/knj/event_handler.rb', line 18

def add_events(*events)
  events.each do |event|
    self.add_event(:name => event)
  end
end

#call(name, *args) ⇒ Object



65
66
67
68
69
70
71
72
73
74
# File 'lib/knj/event_handler.rb', line 65

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) ⇒ Object



24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# File 'lib/knj/event_handler.rb', line 24

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) ⇒ Boolean

Returns true if the given event is connected.

Returns:

  • (Boolean)


43
44
45
46
# File 'lib/knj/event_handler.rb', line 43

def connected?(name)
  return true if @events.key?(name)
  return false
end

#count_connects(name) ⇒ Object



55
56
57
58
# File 'lib/knj/event_handler.rb', line 55

def count_connects(name)
  raise "No such event." if !@events.key?(name)
  return @events[name][:callbacks].length
end

#disconnect(name, callback_id) ⇒ Object



48
49
50
51
52
53
# File 'lib/knj/event_handler.rb', line 48

def disconnect(name, callback_id)
  raise "No such event: '#{name}'." if !@events.key?(name)
  raise "No such connection: '#{name}' --> '#{callback_id}'" if !@events[name].key?(callback_id)
  @events[name][callback_id].clear
  @events[name].delete(callback_id)
end