Module | Observable |
In: |
lib/observer.rb
|
Implements the Observable design pattern as a mixin so that other objects can be notified of changes in state. See observer.rb for details and an example.
Add observer as an observer on this object. observer will now receive notifications.
# File lib/observer.rb, line 123 123: def add_observer(observer) 124: @observer_peers = [] unless defined? @observer_peers 125: unless observer.respond_to? :update 126: raise NoMethodError, "observer needs to respond to `update'" 127: end 128: @observer_peers.push observer 129: end
Return the number of observers associated with this object.
# File lib/observer.rb, line 149 149: def count_observers 150: if defined? @observer_peers 151: @observer_peers.size 152: else 153: 0 154: end 155: end
Delete observer as an observer on this object. It will no longer receive notifications.
# File lib/observer.rb, line 135 135: def delete_observer(observer) 136: @observer_peers.delete observer if defined? @observer_peers 137: end
Delete all observers associated with this object.
# File lib/observer.rb, line 142 142: def delete_observers 143: @observer_peers.clear if defined? @observer_peers 144: end
If this object‘s changed state is true, invoke the update method in each currently associated observer in turn, passing it the given arguments. The changed state is then set to false.
# File lib/observer.rb, line 181 181: def notify_observers(*arg) 182: if defined? @observer_state and @observer_state 183: if defined? @observer_peers 184: for i in @observer_peers.dup 185: i.update(*arg) 186: end 187: end 188: @observer_state = false 189: end 190: end