Class: NotifyHub

Inherits:
Object
  • Object
show all
Defined in:
lib/notifyhub.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).

Example:

require 'notifyhub'

# Create class that includes interesting events.
class Storage

    # Handle to NotifyHub.
    attr_accessor :hub

    def initialize
        # Create NotifyHub.
        @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

Defined Under Namespace

Classes: NotFound, Redefining

Instance Attribute Summary (collapse)

Class Method Summary (collapse)

Instance Method Summary (collapse)

Constructor Details

- (NotifyHub) initialize(*id)

Instantiation.

Parameters:

  • id (Array<Symbol>)

    Notify set id(s).



107
108
109
110
111
# File 'lib/notifyhub.rb', line 107

def initialize( *id )
    @autodeclare = false
    @set = {}
    declare( *id )
end

Instance Attribute Details

- (Object) autodeclare

Declare sets automatically at action registration.



63
64
65
# File 'lib/notifyhub.rb', line 63

def autodeclare
  @autodeclare
end

Class Method Details

+ (Object) auto(*id)

Create NotifyHub and with autodeclare for sets. Declare sets automatically at action registration.

Parameters:

  • id (Array<Symbol>)

    Notify set(s).



85
86
87
88
89
# File 'lib/notifyhub.rb', line 85

def NotifyHub.auto( *id )
    n = NotifyHub.new( *id )
    n.autodeclare = true
    n
end

+ (Object) create { ... }

Create NotifyHub and run block with it.

Yields:

  • Block to run with NotifyHub.



95
96
97
98
99
100
101
# File 'lib/notifyhub.rb', line 95

def NotifyHub.create( &blk )
    cg = NotifyHub.new
    if block_given?
        cg.instance_eval( &blk )
    end
    cg
end

+ (Object) declare(*id)

Create NotifyHub and declare sets.

Parameters:

  • id (Array<Symbol>)

    Notify set(s).



76
77
78
# File 'lib/notifyhub.rb', line 76

def NotifyHub.declare( *id )
    NotifyHub.new( *id )
end

Instance Method Details

- (NotifySet) [](id)

Get NotifySet by ID.

Parameters:

  • id (Symbol)

    Set ID.

Returns:



186
187
188
189
190
# File 'lib/notifyhub.rb', line 186

def []( id )
    useSet( id ) do |set|
        set
    end
end

- (Object) action(id, &action) Also known as: register, with

Register action to NotifySet. Multiple notifies can exist per set.

Parameters:

  • id (Symbol)

    Notify set id (class).

  • action (Block)

    Notify action.



133
134
135
136
137
# File 'lib/notifyhub.rb', line 133

def action( id, &action )
    useSet( id ) do |set|
        set.action( &action )            
    end
end

- (Object) declare(*id)

Declare Notify by set. Multiple notifiers can exist per set.

Parameters:

  • id (Array<Symbol>)

    Notify set id(s).



117
118
119
120
121
122
123
124
125
# File 'lib/notifyhub.rb', line 117

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

- (Object) enable(id, value)

Enable/disable Notify set or all if not set.

Parameters:

  • id (Symbol)

    Notify set id (all if nil given).

  • value (Boolean)

    Enable with true and disable with false.



158
159
160
161
162
163
164
165
166
167
168
# File 'lib/notifyhub.rb', line 158

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

- (Array<Symbol>) ids

Get list of NotifySet IDs.

Returns:

  • (Array<Symbol>)

    NotifySet IDs.



196
197
198
# File 'lib/notifyhub.rb', line 196

def ids
    @set.keys
end

- (Object) notify(id, *args)

Run all notifiers in Notify set.

Parameters:

  • id (Symbol)

    Notify set id (class).

  • args (Array<Object>)

    Arguments for notifiers.



175
176
177
178
179
# File 'lib/notifyhub.rb', line 175

def notify( id, *args )
    withSet( id ) do |set|
        set.notify( *args )
    end
end

- (Object) remove(id, notify = nil)

Remove all or one Notify.

Parameters:

  • id (Symbol)

    Notify set id (class).

  • notify (Notify) (defaults to: nil)

    Notify to remove (all if not given).



147
148
149
150
151
# File 'lib/notifyhub.rb', line 147

def remove( id, notify = nil )
    withSet( id ) do |set|
        set.remove( notify )
    end
end