Class: Knj::Event_handler
Instance Method Summary collapse
- #add_event(event) ⇒ Object
- #add_events(*events) ⇒ Object
- #call(name, *args) ⇒ Object
- #connect(name, &block) ⇒ Object
-
#connected?(name) ⇒ Boolean
Returns true if the given event is connected.
- #count_connects(name) ⇒ Object
- #disconnect(name, callback_id) ⇒ Object
-
#initialize(args = {}) ⇒ Event_handler
constructor
A new instance of Event_handler.
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.
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 |