Sha256: cd11b4b622244af640be48b7a4f1dfe6e1562151224d850cea4a3abd4e5b688c

Contents?: true

Size: 801 Bytes

Versions: 1

Compression:

Stored size: 801 Bytes

Contents

module Rohbau
  class EventTube
    def self.reset
      @subscriptions = nil
    end
    def self.publish(name, event)
      subscription_handler.handle(name, event)
    end

    def self.subscribe(name, &handler)
      subscription_handler.add(name, &handler)
    end

    def self.subscription_handler
      @subscriptions ||= SubscriptionHandler.new
    end

    class SubscriptionHandler
      def initialize
        @subscriptions = Hash.new do |h,k|
          h[k] = []
        end
      end

      def add(name, &handler)
        subscriptions[name] << handler
        true
      end

      def handle(name, event)
        subscriptions[name].each do |handler|
          handler.call(event)
        end
        true
      end

      private

      attr_reader :subscriptions
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
rohbau-0.1.0 lib/rohbau/event_tube.rb