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