Class: Cassie::Subscribers

Inherits:
Object
  • Object
show all
Defined in:
lib/cassie/subscribers.rb

Overview

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

Instance Method Summary collapse

Constructor Details

#initialize(parent_subscribers = nil) ⇒ Subscribers

Returns a new instance of Subscribers.



4
5
6
7
8
# File 'lib/cassie/subscribers.rb', line 4

def initialize(parent_subscribers = nil)
  @array = [].freeze
  @lock = Mutex.new
  @parent_subscribers = parent_subscribers
end

Instance Method Details

#add(subscriber) ⇒ Object Also known as: <<



10
11
12
13
14
15
16
# File 'lib/cassie/subscribers.rb', line 10

def add(subscriber)
  @lock.synchronize do
    new_array = @array.dup
    new_array << subscriber
    @array = new_array
  end
end

#clearObject



30
31
32
# File 'lib/cassie/subscribers.rb', line 30

def clear
  @array = []
end

#each(&block) ⇒ Object



42
43
44
45
46
47
# File 'lib/cassie/subscribers.rb', line 42

def each(&block)
  @array.each(&block)
  if @parent_subscribers
    @parent_subscribers.each(&block)
  end
end

#empty?Boolean

Returns:

  • (Boolean)


38
39
40
# File 'lib/cassie/subscribers.rb', line 38

def empty?
  size == 0
end

#include?(subscriber) ⇒ Boolean

Returns:

  • (Boolean)


49
50
51
# File 'lib/cassie/subscribers.rb', line 49

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

#remove(subscriber) ⇒ Object Also known as: delete



19
20
21
22
23
24
25
26
27
# File 'lib/cassie/subscribers.rb', line 19

def remove(subscriber)
  removed = nil
  @lock.synchronize do
    new_array = @array.dup
    removed = new_array.delete(subscriber)
    @array = new_array
  end
  removed
end

#sizeObject



34
35
36
# File 'lib/cassie/subscribers.rb', line 34

def size
  @array.size + (@parent_subscribers ? @parent_subscribers.size : 0)
end