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