Module: Mongo::Monitoring::Subscribable
Relationships & Source Files | |
Extension / Inclusion / Inheritance Descendants | |
Extended In:
| |
Included In:
| |
Defined in: | lib/mongo/monitoring.rb |
Overview
Contains subscription methods common between monitoring and global event subscriptions.
Instance Method Summary
-
#subscribe(topic, subscriber)
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)
Unsubscribe a listener from an event topic.
- #subscribers_for(topic) private
Instance Method Details
#subscribe(topic, subscriber)
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.
# 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.
# 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.
# File 'lib/mongo/monitoring.rb', line 174
def subscribers?(topic) !subscribers_for(topic).empty? end
#subscribers_for(topic) (private)
# File 'lib/mongo/monitoring.rb', line 180
def subscribers_for(topic) subscribers[topic] ||= [] end
#unsubscribe(topic, subscriber)
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.
# 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