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 |