Sha256: b93a56d0d06ca9f29bed69881265e2a693ecabae0f8d30f5fe922cfc1841ae3d

Contents?: true

Size: 1.06 KB

Versions: 5

Compression:

Stored size: 1.06 KB

Contents

require 'singleton'

module Wisper
  class GlobalListeners
    include Singleton
    attr_reader :mutex
    private :mutex

    def initialize
      @registrations = Set.new
      @mutex         = Mutex.new
    end

    def add(listener, options = {})
      with_mutex { @registrations << ObjectRegistration.new(listener, options) }
      self
    end

    def registrations
      with_mutex { @registrations }
    end

    def listeners
      registrations.map(&:listener).freeze
    end

    def clear
      with_mutex { @registrations.clear }
    end

    def self.add(listener, options = {})
      instance.add(listener, options)
    end

    def self.registrations
      instance.registrations
    end

    def self.listeners
      instance.listeners
    end

    def self.clear
      instance.clear
    end

    # remain backwards compatible
    def self.add_listener(listener, options = {})
      warn "[DEPRECATION] use `add` instead of `add_listener`"
      add(listener, options)
    end

    private

    def with_mutex
      mutex.synchronize { yield }
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
wisper-1.5.0 lib/wisper/global_listeners.rb
wisper-1.4.0 lib/wisper/global_listeners.rb
wisper-1.3.0 lib/wisper/global_listeners.rb
wisper-1.2.1 lib/wisper/global_listeners.rb
wisper-1.2.0 lib/wisper/global_listeners.rb