Class: NotifyHub
- Inherits:
-
Object
- Object
- NotifyHub
- Defined in:
- lib/notifyhub.rb,
lib/version.rb
Overview
NotifyHub is a callback facility. NotifyHub is used by the informer to notify clients about arbitrary events in the informer. NotifyHub contains notification sets (NotifySet).
NotifySet is identified by set ID and it can include one or many notifications (Notify). Client defines the action performed at notification (callback). Informer activates the notification when notification events occur.
Notifications can be enabled/disabled on different levels (NotifyHub, NotifySet, and Notify).
Usage example:
require 'notifyhub'
# Create class that includes interesting events.
class Storage
# Handle to NotifyHub.
attr_accessor :hub
def initialize
# Create NotifyHub with 3 callbacks.
@hub = NotifyHub.declare( :store, :load, :na )
end
# Store data and notify clients.
def store( data )
@data = data
@hub[ :store ].notify( @data )
end
# Load data and notify clients.
def load
@hub[ :load ].notify( @data )
@data
end
end
storage = Storage.new
# Setup notify action for store.
storage.hub[ :store ].action do |data|
puts "store: #{data}"
end
# Setup notify action for load.
storage.hub[ :load ].action do |data|
puts "load: #{data}"
end
# Use storage and get notifications.
storage.store( "my data" )
data = storage.load
Produces:
store: my data
load: my data
Defined Under Namespace
Classes: NotFound, Redefining
Constant Summary collapse
- VERSION =
"0.0.4"
Instance Attribute Summary collapse
-
#autodeclare ⇒ Object
Declare sets automatically at action registration.
Class Method Summary collapse
-
.auto(*id) ⇒ Object
Create NotifyHub and with autodeclare for sets.
-
.create { ... } ⇒ Object
Create NotifyHub and run block with it.
-
.declare(*id) ⇒ Object
Create NotifyHub and declare sets.
- .version ⇒ Object
Instance Method Summary collapse
-
#[](id) ⇒ NotifySet
Get NotifySet by ID.
-
#action(id, &action) ⇒ Object
(also: #register, #with)
Register action to NotifySet.
-
#declare(*id) ⇒ Object
Declare Notify by set.
-
#enable(id, value) ⇒ Object
Enable/disable Notify set or all if not set.
-
#ids ⇒ Array<Symbol>
Get list of NotifySet IDs.
-
#initialize(*id) ⇒ NotifyHub
constructor
Instantiation.
-
#notify(id, *args) ⇒ Object
Run all notifiers in Notify set.
-
#remove(id, notify = nil) ⇒ Object
Remove all or one Notify.
Constructor Details
#initialize(*id) ⇒ NotifyHub
Instantiation.
111 112 113 114 115 |
# File 'lib/notifyhub.rb', line 111 def initialize( *id ) @autodeclare = false @set = {} declare( *id ) end |
Instance Attribute Details
#autodeclare ⇒ Object
Declare sets automatically at action registration.
67 68 69 |
# File 'lib/notifyhub.rb', line 67 def autodeclare @autodeclare end |
Class Method Details
.auto(*id) ⇒ Object
Create NotifyHub and with autodeclare for sets. Declare sets automatically at action registration.
89 90 91 92 93 |
# File 'lib/notifyhub.rb', line 89 def NotifyHub.auto( *id ) n = NotifyHub.new( *id ) n.autodeclare = true n end |
.create { ... } ⇒ Object
Create NotifyHub and run block with it.
99 100 101 102 103 104 105 |
# File 'lib/notifyhub.rb', line 99 def NotifyHub.create( &blk ) cg = NotifyHub.new if block_given? cg.instance_eval( &blk ) end cg end |
Instance Method Details
#[](id) ⇒ NotifySet
Get NotifySet by ID.
190 191 192 193 194 |
# File 'lib/notifyhub.rb', line 190 def []( id ) useSet( id ) do |set| set end end |
#action(id, &action) ⇒ Object Also known as: register, with
Register action to NotifySet. Multiple notifies can exist per set.
137 138 139 140 141 |
# File 'lib/notifyhub.rb', line 137 def action( id, &action ) useSet( id ) do |set| set.action( &action ) end end |
#declare(*id) ⇒ Object
Declare Notify by set. Multiple notifiers can exist per set.
121 122 123 124 125 126 127 128 129 |
# File 'lib/notifyhub.rb', line 121 def declare( *id ) id.each do |i| if @set[ i ] raise Redefining, "Notify set already declared: #{i.to_s}" else @set[ i ] = NotifySet.new( i ) end end end |
#enable(id, value) ⇒ Object
Enable/disable Notify set or all if not set.
162 163 164 165 166 167 168 169 170 171 172 |
# File 'lib/notifyhub.rb', line 162 def enable( id, value ) if id withSet( id ) do |set| set.enable = value end else @set.each_value do |set| set.enable = value end end end |
#ids ⇒ Array<Symbol>
Get list of NotifySet IDs.
200 201 202 |
# File 'lib/notifyhub.rb', line 200 def ids @set.keys end |
#notify(id, *args) ⇒ Object
Run all notifiers in Notify set.
179 180 181 182 183 |
# File 'lib/notifyhub.rb', line 179 def notify( id, *args ) withSet( id ) do |set| set.notify( *args ) end end |
#remove(id, notify = nil) ⇒ Object
Remove all or one Notify.
151 152 153 154 155 |
# File 'lib/notifyhub.rb', line 151 def remove( id, notify = nil ) withSet( id ) do |set| set.remove( notify ) end end |