Sha256: 29bd65cfe4e89e21c5af7fcf8b141b6d234a74ecdcfd8e7ae293d56749effacb

Contents?: true

Size: 1.02 KB

Versions: 21

Compression:

Stored size: 1.02 KB

Contents

require 'ddtrace/logger'

module Datadog
  # A simple pub-sub event model for components to exchange messages through.
  class Event
    attr_reader \
      :name,
      :subscriptions

    def initialize(name)
      @name = name
      @subscriptions = {}
      @mutex = Mutex.new
    end

    def subscribe(key, &block)
      raise ArgumentError, 'Must give a block to subscribe!' unless block

      @mutex.synchronize do
        subscriptions[key] = block
      end
    end

    def unsubscribe(key)
      @mutex.synchronize do
        subscriptions.delete(key)
      end
    end

    def unsubscribe_all!
      @mutex.synchronize do
        subscriptions.clear
      end

      true
    end

    def publish(*args)
      @mutex.synchronize do
        subscriptions.each do |key, block|
          begin
            block.call(*args)
          rescue StandardError => e
            Datadog.logger.debug("Error while handling '#{key}' for '#{name}' event: #{e.message}")
          end
        end

        true
      end
    end
  end
end

Version data entries

21 entries across 21 versions & 2 rubygems

Version Path
ddtrace-0.51.1 lib/ddtrace/event.rb
ddtrace-0.51.0 lib/ddtrace/event.rb
ddtrace-0.50.0 lib/ddtrace/event.rb
ddtrace-0.49.0 lib/ddtrace/event.rb
ddtrace-0.48.0 lib/ddtrace/event.rb
ddtrace-0.47.0 lib/ddtrace/event.rb
ddtrace-0.46.0 lib/ddtrace/event.rb
ddtrace-0.45.0 lib/ddtrace/event.rb
ddtrace-0.44.0 lib/ddtrace/event.rb
ddtrace-0.43.0 lib/ddtrace/event.rb
ddtrace-0.42.0 lib/ddtrace/event.rb
ddtrace-0.41.0 lib/ddtrace/event.rb
ls-trace-0.2.0 lib/ddtrace/event.rb
ddtrace-0.40.0 lib/ddtrace/event.rb
ddtrace-0.39.0 lib/ddtrace/event.rb
ddtrace-0.38.0 lib/ddtrace/event.rb
ddtrace-0.37.0 lib/ddtrace/event.rb
ddtrace-0.36.0 lib/ddtrace/event.rb
ddtrace-0.35.2 lib/ddtrace/event.rb
ddtrace-0.35.1 lib/ddtrace/event.rb