| 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