class SimpleEventBus

Constants

VERSION

Public Class Methods

[](*events) click to toggle source
# File lib/simple_event_bus.rb, line 11
def [](*events)
  Module.new.tap do |m|
    m.define_singleton_method(:included) do |base|
      events.each { |e| SimpleEventBus.subscribe(e, base) }
    end
  end
end
instance() click to toggle source
# File lib/simple_event_bus.rb, line 19
def instance
  @instance ||= new
end
new() click to toggle source
# File lib/simple_event_bus.rb, line 26
def initialize
  @subscribers = handler_hash
  @once = handler_hash
end

Public Instance Methods

emit(event, *args) click to toggle source
# File lib/simple_event_bus.rb, line 31
def emit(event, *args)
  caller = handler_caller(event, args)

  @subscribers[event].each(&caller)
  @once[event].delete_if(&caller)

  nil
end
subscribe(event, obj_hlr = nil, once: false, &hlr) click to toggle source
# File lib/simple_event_bus.rb, line 40
def subscribe(event, obj_hlr = nil, once: false, &hlr)
  handler = hlr || obj_hlr

  raise ArgumentError, 'object or proc handler required' if handler.nil?

  (once ? @once : @subscribers)[event][handler.object_id] = handler

  handler.object_id
end
unsubscribe(event, id) click to toggle source
# File lib/simple_event_bus.rb, line 50
def unsubscribe(event, id)
  @subscribers[event].delete(id)
end

Private Instance Methods

handler_caller(event, args) click to toggle source
# File lib/simple_event_bus.rb, line 60
def handler_caller(event, args)
  proc do |_id, handler|
    if handler.is_a?(Proc)
      handler.call(*args)
    else
      handler.send(event, *args)
    end

    true
  end
end
handler_hash() click to toggle source
# File lib/simple_event_bus.rb, line 56
def handler_hash
  Hash.new { |h, k| h[k] = {} }
end