Module: RSMP::Distributor
- Included in:
- Proxy
- Defined in:
- lib/rsmp/collect/distributor.rb
Overview
Class which distributes messages to receivers
Instance Attribute Summary collapse
-
#receivers ⇒ Object
readonly
Returns the value of attribute receivers.
Instance Method Summary collapse
- #add_receiver(receiver) ⇒ Object
- #clear_deferred_distribution ⇒ Object
- #distribute(message) ⇒ Object
- #distribute_error(error, options = {}) ⇒ Object
- #distribute_immediately(message) ⇒ Object
- #distribute_queued ⇒ Object
- #initialize_distributor ⇒ Object
- #inspect ⇒ Object
- #remove_receiver(receiver) ⇒ Object
- #with_deferred_distribution ⇒ Object
Instance Attribute Details
#receivers ⇒ Object (readonly)
Returns the value of attribute receivers.
4 5 6 |
# File 'lib/rsmp/collect/distributor.rb', line 4 def receivers @receivers end |
Instance Method Details
#add_receiver(receiver) ⇒ Object
36 37 38 39 40 |
# File 'lib/rsmp/collect/distributor.rb', line 36 def add_receiver(receiver) raise ArgumentError unless receiver @receivers << receiver unless @receivers.include? receiver end |
#clear_deferred_distribution ⇒ Object
16 17 18 |
# File 'lib/rsmp/collect/distributor.rb', line 16 def clear_deferred_distribution @deferred_messages = [] end |
#distribute(message) ⇒ Object
48 49 50 51 52 53 54 55 56 |
# File 'lib/rsmp/collect/distributor.rb', line 48 def distribute() raise ArgumentError unless if @defer_distribution @deferred_messages << else distribute_immediately end end |
#distribute_error(error, options = {}) ⇒ Object
62 63 64 |
# File 'lib/rsmp/collect/distributor.rb', line 62 def distribute_error(error, = {}) @receivers.each { |receiver| receiver.receive_error error, } end |
#distribute_immediately(message) ⇒ Object
58 59 60 |
# File 'lib/rsmp/collect/distributor.rb', line 58 def distribute_immediately() @receivers.each { |receiver| receiver.receive } end |
#distribute_queued ⇒ Object
30 31 32 33 34 |
# File 'lib/rsmp/collect/distributor.rb', line 30 def distribute_queued @deferred_messages.each { || distribute_immediately } ensure @deferred_messages = [] end |
#initialize_distributor ⇒ Object
10 11 12 13 14 |
# File 'lib/rsmp/collect/distributor.rb', line 10 def initialize_distributor @receivers = [] @defer_distribution = false @deferred_messages = [] end |
#inspect ⇒ Object
6 7 8 |
# File 'lib/rsmp/collect/distributor.rb', line 6 def inspect "#<#{self.class.name}:#{object_id}}>" end |
#remove_receiver(receiver) ⇒ Object
42 43 44 45 46 |
# File 'lib/rsmp/collect/distributor.rb', line 42 def remove_receiver(receiver) raise ArgumentError unless receiver @receivers.delete receiver end |
#with_deferred_distribution ⇒ Object
20 21 22 23 24 25 26 27 28 |
# File 'lib/rsmp/collect/distributor.rb', line 20 def with_deferred_distribution was = @defer_distribution @defer_distribution = true yield distribute_queued ensure @defer_distribution = was @deferred_messages = [] end |