gree/observed

View on GitHub
lib/observed/basic_event_bus.rb

Summary

Maintainability
A
0 mins
Test Coverage
require 'thread'
require 'monitor'

module Observed
  class BasicEventBus
    def initialize
      @monitor = ::Monitor.new
      @subscribers = []
    end
    def emit(tag, *params)
      handle_event(tag, *params)
    end

    def on_receive(pattern, &block)
      @monitor.synchronize do
        @subscribers.push [pattern, block]
      end
    end

    private

    def handle_event(tag, *params)
      @monitor.synchronize do
        @subscribers.each do |pattern, s|
          if pattern.match(tag)
            s.call *params
          end
        end
      end
    end
  end
end