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