module Rbgo::Observable
Public Instance Methods
add_observer(observer, func = :update)
click to toggle source
# File lib/rbgo/observer.rb, line 9 def add_observer(observer, func = :update) unless defined? @observer_peers Observable.instance_variable_get(:@mutex).synchronize do @observer_peers = SyncHash.new unless defined? @observer_peers end end unless observer.respond_to? func raise NoMethodError, "observer does not respond to `#{func}'" end @observer_peers[observer] = func end
changed(state = true)
click to toggle source
# File lib/rbgo/observer.rb, line 38 def changed(state = true) Observable.instance_variable_get(:@mutex).synchronize do @observer_state = state end end
changed?()
click to toggle source
# File lib/rbgo/observer.rb, line 44 def changed? if defined? @observer_state and @observer_state true else false end end
count_observers()
click to toggle source
# File lib/rbgo/observer.rb, line 30 def count_observers if defined? @observer_peers @observer_peers.size else 0 end end
delete_observer(observer)
click to toggle source
# File lib/rbgo/observer.rb, line 22 def delete_observer(observer) @observer_peers.delete observer if defined? @observer_peers end
delete_observers()
click to toggle source
# File lib/rbgo/observer.rb, line 26 def delete_observers @observer_peers.clear if defined? @observer_peers end
notify_observers(*arg)
click to toggle source
# File lib/rbgo/observer.rb, line 52 def notify_observers(*arg) if defined? @observer_state and @observer_state if defined? @observer_peers Observable.instance_variable_get(:@mutex).synchronize do if @observer_state @observer_peers.each do |k, v| CoRun::Routine.new(new_thread: false, queue_tag: :default) do k.send v, *arg end end @observer_state = false end end end end end