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.

Methods

Public Instance methods

Add observer as an observer on this object. observer will now receive notifications.

[Source]

     # 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

Set the changed state of this object. Notifications will be sent only if the changed state is true.

[Source]

     # File lib/observer.rb, line 161
161:   def changed(state=true)
162:     @observer_state = state
163:   end

Query the changed state of this object.

[Source]

     # File lib/observer.rb, line 168
168:   def changed?
169:     if defined? @observer_state and @observer_state
170:       true
171:     else
172:       false
173:     end
174:   end

Return the number of observers associated with this object.

[Source]

     # 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.

[Source]

     # 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.

[Source]

     # 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.

[Source]

     # 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

[Validate]