Sha256: f104858ec4740d1f621301624c8ed30e322996cc0f4c7db6dc931b526b9c5aab

Contents?: true

Size: 1.89 KB

Versions: 22

Compression:

Stored size: 1.89 KB

Contents

class Knj::Event_handler
  def initialize(args = {})
    @args = args
    @events = {}
  end
  
  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
  
  def add_events(*events)
    events.each do |event|
      self.add_event(:name => event)
    end
  end
  
  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
  
  #Returns true if the given event is connected.
  def connected?(name)
    return true if @events.key?(name)
    return false
  end
  
  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
  
  def count_connects(name)
    raise "No such event." if !@events.key?(name)
    return @events[name][:callbacks].length
  end
  
  def connected?(name)
    raise "No such event." if !@events.key?(name)
    return !@events[name][:callbacks].empty?
  end
  
  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
end

Version data entries

22 entries across 22 versions & 1 rubygems

Version Path
knjrbfw-0.0.30 lib/knj/event_handler.rb
knjrbfw-0.0.29 lib/knj/event_handler.rb
knjrbfw-0.0.28 lib/knj/event_handler.rb
knjrbfw-0.0.27 lib/knj/event_handler.rb
knjrbfw-0.0.26 lib/knj/event_handler.rb
knjrbfw-0.0.25 lib/knj/event_handler.rb
knjrbfw-0.0.24 lib/knj/event_handler.rb
knjrbfw-0.0.23 lib/knj/event_handler.rb
knjrbfw-0.0.22 lib/knj/event_handler.rb
knjrbfw-0.0.21 lib/knj/event_handler.rb
knjrbfw-0.0.20 lib/knj/event_handler.rb
knjrbfw-0.0.19 lib/knj/event_handler.rb
knjrbfw-0.0.18 lib/knj/event_handler.rb
knjrbfw-0.0.17 lib/knj/event_handler.rb
knjrbfw-0.0.16 lib/knj/event_handler.rb
knjrbfw-0.0.15 lib/knj/event_handler.rb
knjrbfw-0.0.14 lib/knj/event_handler.rb
knjrbfw-0.0.13 lib/knj/event_handler.rb
knjrbfw-0.0.12 lib/knj/event_handler.rb
knjrbfw-0.0.11 lib/knj/event_handler.rb