Sha256: 49f1408fc060604a9a7ccd60d0b5f91cbcba713b151fe681cf2a594be153fc0a

Contents?: true

Size: 994 Bytes

Versions: 5

Compression:

Stored size: 994 Bytes

Contents

# frozen_string_literal: true

# 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)
    @parent_subscribers&.each(&block)
  end

  def include?(subscriber)
    @array.include?(subscriber)
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
whi-cassie-1.3.4 lib/cassie/subscribers.rb
whi-cassie-1.3.2 lib/cassie/subscribers.rb
whi-cassie-1.3.1 lib/cassie/subscribers.rb
whi-cassie-1.3.0 lib/cassie/subscribers.rb
whi-cassie-1.2.0 lib/cassie/subscribers.rb