Sha256: 3421fac0fe4ae11a555c8c8c323a83419690f2c6a9d70b4d49c4e1d5885fe3b9

Contents?: true

Size: 1019 Bytes

Versions: 3

Compression:

Stored size: 1019 Bytes

Contents

# Thread safe list of subscribers. Each subscriber must respond to the :call method.
class Cassie::Subscribers
  
  def initialize(parent_subscribers = nil)
    @array = [].freeze
    @lock = Mutex.new
    @parent_subscribers = parent_subscribers
  end
  
  def add(subscriber)
    @lock.synchronize do
      new_array = @array.dup
      new_array << subscriber
      @array = new_array
    end
  end
  alias_method :<<, :add
  
  def remove(subscriber)
    removed = nil
    @lock.synchronize do
      new_array = @array.dup
      removed = new_array.delete(subscriber)
      @array = new_array
    end
    removed
  end
  alias_method :delete, :remove
  
  def clear
    @array = []
  end
  
  def size
    @array.size + (@parent_subscribers ? @parent_subscribers.size : 0)
  end
  
  def empty?
    size == 0
  end
  
  def each(&block)
    @array.each(&block)
    if @parent_subscribers
      @parent_subscribers.each(&block)
    end
  end
  
  def include?(subscriber)
    @array.include?(subscriber)
  end
  
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
whi-cassie-1.1.1 lib/cassie/subscribers.rb
whi-cassie-1.1.0 lib/cassie/subscribers.rb
whi-cassie-1.0.7 lib/cassie/subscribers.rb