module Arachni::Support::Mixins::Observable

Provides a flexible way to make any object observable for multiple events.

The observable classes use:

* `notify_<event>( *args )`

to notify observers of events.

The observers request notifications using:

* `observable.<event>( &block )`

@author Tasos “Zapotek” Laskos <tasos.laskos@arachni-scanner.com>

Public Class Methods

included( base ) click to toggle source
# File lib/arachni/support/mixins/observable.rb, line 32
def self.included( base )
    base.extend ClassMethods
end
new() click to toggle source
Calls superclass method
# File lib/arachni/support/mixins/observable.rb, line 54
def initialize
    super

    @__observers = {}
end

Private Instance Methods

add_observer( event, &block ) click to toggle source
# File lib/arachni/support/mixins/observable.rb, line 66
def add_observer( event, &block )
    fail ArgumentError, 'Missing block' if !block
    synchronize do
        observers_for( event ) << block
    end

    self
end
clear_observers() click to toggle source
# File lib/arachni/support/mixins/observable.rb, line 97
def clear_observers
    synchronize do
        observers.clear
    end
end
dup_observers() click to toggle source
# File lib/arachni/support/mixins/observable.rb, line 85
def dup_observers
    observers.inject({}) { |h, (k, v)| h[k] = v.dup; h }
end
notify_observers( event, *args ) click to toggle source
# File lib/arachni/support/mixins/observable.rb, line 75
def notify_observers( event, *args )
    synchronize do
        observers_for( event ).each do |block|
            exception_jail( false ) { block.call( *args ) }
        end
    end

    nil
end
observers() click to toggle source
# File lib/arachni/support/mixins/observable.rb, line 62
def observers
    @__observers
end
observers_for( event ) click to toggle source
# File lib/arachni/support/mixins/observable.rb, line 93
def observers_for( event )
    observers[event.to_sym] ||= []
end
set_observers( obs ) click to toggle source
# File lib/arachni/support/mixins/observable.rb, line 89
def set_observers( obs )
    @__observers = obs
end