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