Module: RSMP::Distributor

Includes:
Inspect
Included in:
Proxy
Defined in:
lib/rsmp/collect/distributor.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from Inspect

#inspector

Instance Attribute Details

#receiversObject (readonly)

Returns the value of attribute receivers.



5
6
7
# File 'lib/rsmp/collect/distributor.rb', line 5

def receivers
  @receivers
end

Instance Method Details

#add_receiver(receiver) ⇒ Object

Raises:

  • (ArgumentError)


38
39
40
41
# File 'lib/rsmp/collect/distributor.rb', line 38

def add_receiver receiver
  raise ArgumentError unless receiver
  @receivers << receiver unless @receivers.include? receiver
end

#clear_deferred_distribution(&block) ⇒ Object



19
20
21
# File 'lib/rsmp/collect/distributor.rb', line 19

def clear_deferred_distribution &block
  @deferred_messages = []
end

#distribute(message) ⇒ Object

Raises:

  • (ArgumentError)


48
49
50
51
52
53
54
55
# File 'lib/rsmp/collect/distributor.rb', line 48

def distribute message
  raise ArgumentError unless message
  if @defer_distribution
    @deferred_messages << message
  else
    distribute_immediately message
  end
end

#distribute_error(error, options = {}) ⇒ Object



61
62
63
# File 'lib/rsmp/collect/distributor.rb', line 61

def distribute_error error, options={}
  @receivers.each { |receiver| receiver.receive_error error, options }
end

#distribute_immediately(message) ⇒ Object



57
58
59
# File 'lib/rsmp/collect/distributor.rb', line 57

def distribute_immediately message
  @receivers.each { |receiver| receiver.receive message }
end

#distribute_queuedObject



32
33
34
35
36
# File 'lib/rsmp/collect/distributor.rb', line 32

def distribute_queued
  @deferred_messages.each { |message| distribute_immediately message }
ensure
  @deferred_messages = []
end

#initialize_distributorObject



13
14
15
16
17
# File 'lib/rsmp/collect/distributor.rb', line 13

def initialize_distributor
  @receivers = []
  @defer_distribution = false
  @deferred_messages = []
end

#inspectObject



9
10
11
# File 'lib/rsmp/collect/distributor.rb', line 9

def inspect
  "#<#{self.class.name}:#{self.object_id}, #{inspector(:@receivers)}>"
end

#remove_receiver(receiver) ⇒ Object

Raises:

  • (ArgumentError)


43
44
45
46
# File 'lib/rsmp/collect/distributor.rb', line 43

def remove_receiver receiver
  raise ArgumentError unless receiver
  @receivers.delete receiver
end

#with_deferred_distribution(&block) ⇒ Object



23
24
25
26
27
28
29
30
# File 'lib/rsmp/collect/distributor.rb', line 23

def with_deferred_distribution &block
  was, @defer_distribution = @defer_distribution, true
  yield
  distribute_queued
ensure
  @defer_distribution = was
  @deferred_messages = []
end