Class: Eventr::Coordinator
- Inherits:
-
Object
- Object
- Eventr::Coordinator
- Includes:
- Singleton
- Defined in:
- lib/eventr/coordinator.rb
Instance Attribute Summary collapse
-
#consumers ⇒ Object
readonly
Returns the value of attribute consumers.
-
#publishers(*queues) ⇒ Object
readonly
Returns the value of attribute publishers.
Class Method Summary collapse
Instance Method Summary collapse
- #consumer(queue_name, &block) ⇒ Object
-
#initialize ⇒ Coordinator
constructor
A new instance of Coordinator.
- #publish(queue_name, event) ⇒ Object
- #publisher(queue_name, &block) ⇒ Object
-
#start ⇒ Object
rubycop:disable.
- #stop ⇒ Object
Constructor Details
#initialize ⇒ Coordinator
Returns a new instance of Coordinator.
26 27 28 29 |
# File 'lib/eventr/coordinator.rb', line 26 def initialize @publishers = {} @consumers = {} end |
Instance Attribute Details
#consumers ⇒ Object (readonly)
Returns the value of attribute consumers.
24 25 26 |
# File 'lib/eventr/coordinator.rb', line 24 def consumers @consumers end |
#publishers(*queues) ⇒ Object (readonly)
Returns the value of attribute publishers.
24 25 26 |
# File 'lib/eventr/coordinator.rb', line 24 def publishers @publishers end |
Class Method Details
.method_missing(method, *args, &block) ⇒ Object
31 32 33 34 |
# File 'lib/eventr/coordinator.rb', line 31 def self.method_missing(method, *args, &block) return super unless instance.public_method.include? method instance.public_send(method, *args, &block) end |
Instance Method Details
#consumer(queue_name, &block) ⇒ Object
54 55 56 57 58 59 60 |
# File 'lib/eventr/coordinator.rb', line 54 def consumer(queue_name, &block) unless @publishers.include? queue_name fail Error::InvalidQueue, "#{queue_name} queue does not exist. Define a publisher for the queue first." end @consumers[queue_name] ||= [] @consumers[queue_name] << Consumer.new(@publishers[queue_name], &block) end |
#publish(queue_name, event) ⇒ Object
47 48 49 50 51 52 |
# File 'lib/eventr/coordinator.rb', line 47 def publish(queue_name, event) unless @publishers.include? queue_name fail Error::InvalidQueue, "Publisher #{queue_name.inspect} doesn't exist" end @publishers[queue_name].push(event) end |
#publisher(queue_name, &block) ⇒ Object
40 41 42 43 44 45 |
# File 'lib/eventr/coordinator.rb', line 40 def publisher(queue_name, &block) if @publishers.include? queue_name fail Error::InvalidQueue, "publisher already defined for queue '#{queue_name}'" end @publishers[queue_name] = Publisher.new(&block) end |
#start ⇒ Object
rubycop:disable
62 63 64 65 66 67 |
# File 'lib/eventr/coordinator.rb', line 62 def start # rubycop:disable @publishers.each do |q, p| p.start @consumers[q].each { |c| c.start } end end |
#stop ⇒ Object
69 70 71 72 73 74 |
# File 'lib/eventr/coordinator.rb', line 69 def stop @publishers.each do |q, p| p.stop @consumers[q].each { |c| c.stop } end end |