Module Listener
In: lib/webgen/listener.rb
Listener dot/f_8.png

Module Listener

Implementation of the listener pattern. The including class defines messages to which other classes can listen.

Usage example:

 class Test
   include Listener

   def initialize
     add_msg_name :test
   end

   def invoke( *param )
     dispatch_msg( :test, *param )
   end

 end

 t = Test.new
 t.add_msg_listener( :test ) do |*param|
   print param.inspect
 end
 t.invoke 'hello'
 t.invoke 'lester', ['tsd', 4, 'test']

Methods

Public Instance methods

Adds a new message listener for the object. The message msgName will be dispatched to either the given callableObject (has to respond to call) or the given block. If both are specified the callableObject is used.

[Source]

    # File lib/webgen/listener.rb, line 57
57:   def add_msg_listener( msgName, callableObject = nil, &block )
58:     return unless defined?( @msgNames ) && @msgNames.has_key?( msgName )
59: 
60:     if !callableObject.nil?
61:       raise NoMethodError, "listener needs to respond to 'call'" unless callableObject.respond_to? :call
62:       @msgNames[msgName].push callableObject
63:     elsif !block.nil?
64:       @msgNames[msgName].push block
65:     else
66:       raise "you have to provide a callback object or a block"
67:     end
68:   end

Removes the given object from the dispatcher queue of the message msgName.

[Source]

    # File lib/webgen/listener.rb, line 72
72:   def del_msg_listener( msgName, object )
73:     @msgNames[msgName].delete object if defined? @msgNames
74:   end

Private Instance methods

Adds a new message target called msgName

[Source]

    # File lib/webgen/listener.rb, line 83
83:   def add_msg_name( msgName )
84:     @msgNames = {}  unless defined? @msgNames
85:     @msgNames[msgName] = [] unless @msgNames.has_key? msgName
86:   end

Deletes the message target msgName.

[Source]

    # File lib/webgen/listener.rb, line 90
90:   def del_msg_name( msgName )
91:     @msgNames.delete msgName if defined? @msgNames
92:   end

Dispatches the message msgName to all listeners for this message, providing the given arguments

[Source]

     # File lib/webgen/listener.rb, line 97
 97:   def dispatch_msg( msgName, *args )
 98:     if defined? @msgNames and @msgNames.has_key? msgName
 99:       @msgNames[msgName].each do |obj|
100:         obj.call( *args )
101:       end
102:     end
103:   end

[Validate]