Class: Nanoc2::NotificationCenter
- Inherits:
-
Object
- Object
- Nanoc2::NotificationCenter
- Defined in:
- lib/nanoc2/base/notification_center.rb
Overview
Nanoc2::NotificationCenter provides a way to send notifications between objects. It allows blocks associated with a certain notification name to be registered; these blocks will be called when the notification with the given name is posted.
It is a slightly different implementation of the Observer pattern; the table of subscribers is not stored in the observable object itself, but in the notification center.
Class Method Summary collapse
-
.on(name, id = nil, &block) ⇒ Object
Adds the given block to the list of blocks that should be called when the notification with the given name is received.
-
.post(name, *args) ⇒ Object
Posts a notification with the given name.
-
.remove(name, id) ⇒ Object
Removes the block with the given identifier from the list of blocks that should be called when the notification with the given name is posted.
Class Method Details
.on(name, id = nil, &block) ⇒ Object
Adds the given block to the list of blocks that should be called when the notification with the given name is received.
name
-
The name of the notification that will be posted.
id
-
An identifier for the block. This is only used to be able to remove the block (using the remove method) later. Defaults to nil.
23 24 25 26 27 28 |
# File 'lib/nanoc2/base/notification_center.rb', line 23 def on(name, id=nil, &block) initialize_if_necessary(name) # Add observer @notifications[name] << { :id => id, :block => block } end |
.post(name, *args) ⇒ Object
Posts a notification with the given name. All arguments wil be passed to the blocks handling the notification.
32 33 34 35 36 37 38 39 |
# File 'lib/nanoc2/base/notification_center.rb', line 32 def post(name, *args) initialize_if_necessary(name) # Notify all observers @notifications[name].each do |observer| observer[:block].call(*args) end end |
.remove(name, id) ⇒ Object
Removes the block with the given identifier from the list of blocks that should be called when the notification with the given name is posted.
name
-
The name of the notification that will be posted.
id
-
The identifier of the block that should be removed.
48 49 50 51 52 53 |
# File 'lib/nanoc2/base/notification_center.rb', line 48 def remove(name, id) initialize_if_necessary(name) # Remove relevant observers @notifications[name].reject! { |i| i[:id] == id } end |