Module: Mongo::Monitoring::Subscribable
- Included in:
- Mongo::Monitoring, Global
- Defined in:
- lib/mongo/monitoring.rb
Overview
Contains subscription methods common between monitoring and global event subscriptions.
Instance Method Summary collapse
-
#subscribe(topic, subscriber) ⇒ Object
Subscribe a listener to an event topic.
-
#subscribers ⇒ Hash<String, Object>
Get all the subscribers.
-
#subscribers?(topic) ⇒ true, false
Determine if there are any subscribers for a particular event.
-
#unsubscribe(topic, subscriber) ⇒ Object
Unsubscribe a listener from an event topic.
Instance Method Details
#subscribe(topic, subscriber) ⇒ Object
It is possible to subscribe the same listener to the same topic
Subscribe a listener to an event topic.
multiple times, in which case the listener will be invoked as many times as it is subscribed and to unsubscribe it the same number of unsubscribe calls will be needed.
105 106 107 |
# File 'lib/mongo/monitoring.rb', line 105 def subscribe(topic, subscriber) subscribers_for(topic).push(subscriber) end |
#subscribers ⇒ Hash<String, Object>
Get all the subscribers.
157 158 159 |
# File 'lib/mongo/monitoring.rb', line 157 def subscribers @subscribers ||= {} end |
#subscribers?(topic) ⇒ true, false
Determine if there are any subscribers for a particular event.
174 175 176 |
# File 'lib/mongo/monitoring.rb', line 174 def subscribers?(topic) !subscribers_for(topic).empty? end |
#unsubscribe(topic, subscriber) ⇒ Object
Global subscriber registry is separate from per-client subscriber registry. The same subscriber can be subscribed to events from a particular client as well as globally; unsubscribing globally will not unsubscribe that subscriber from the client it was explicitly subscribed to.
Currently the list of global subscribers is copied into a client whenever the client is created. Thus unsubscribing a subscriber globally has no effect for existing clients - they will continue sending events to the unsubscribed subscriber.
Unsubscribe a listener from an event topic.
If the listener was subscribed to the event topic multiple times, this call removes a single subscription.
If the listener was not subscribed to the topic, this operation is a no-op and no exceptions are raised.
138 139 140 141 142 143 144 |
# File 'lib/mongo/monitoring.rb', line 138 def unsubscribe(topic, subscriber) subs = subscribers_for(topic) index = subs.index(subscriber) if index subs.delete_at(index) end end |