class Cassie::Subscribers

Thread safe list of subscribers. Each subscriber must respond to the :call method.

Public Class Methods

new(parent_subscribers = nil) click to toggle source
# File lib/cassie/subscribers.rb, line 5
def initialize(parent_subscribers = nil)
  @array = [].freeze
  @lock = Mutex.new
  @parent_subscribers = parent_subscribers
end

Public Instance Methods

<<(subscriber)
Alias for: add
add(subscriber) click to toggle source
# File lib/cassie/subscribers.rb, line 11
def add(subscriber)
  @lock.synchronize do
    new_array = @array.dup
    new_array << subscriber
    @array = new_array
  end
end
Also aliased as: <<
clear() click to toggle source
# File lib/cassie/subscribers.rb, line 31
def clear
  @array = []
end
delete(subscriber)
Alias for: remove
each(&block) click to toggle source
# File lib/cassie/subscribers.rb, line 43
def each(&block)
  @array.each(&block)
  @parent_subscribers&.each(&block)
end
empty?() click to toggle source
# File lib/cassie/subscribers.rb, line 39
def empty?
  size == 0
end
include?(subscriber) click to toggle source
# File lib/cassie/subscribers.rb, line 48
def include?(subscriber)
  @array.include?(subscriber)
end
remove(subscriber) click to toggle source
# File lib/cassie/subscribers.rb, line 20
def remove(subscriber)
  removed = nil
  @lock.synchronize do
    new_array = @array.dup
    removed = new_array.delete(subscriber)
    @array = new_array
  end
  removed
end
Also aliased as: delete
size() click to toggle source
# File lib/cassie/subscribers.rb, line 35
def size
  @array.size + (@parent_subscribers ? @parent_subscribers.size : 0)
end