Publisher is a variation on Ruby's Observable. We do not keep track of any changed state; instead we assume that by virtue of calling publish we have changed state. We do not allow serialization of subscribers. We allow a Publisher to have multiple publications and maintain separate lists of subscribers for each one.
If this object’s changed state is
true, invoke the update
method in each currently associated subscriber in turn, passing it the
given arguments. The changed state is then set to
# File lib/utility/publisher.rb, line 65 def publish(*arg) if defined? @subscribers @subscribers.dup.each do |s| if s.respond_to?(:to_int) Engine.instance.db.get(s).update(*arg) else s.update(*arg) end end end end
subscriber as an subscriber on this object.
subscriber will now receive notifications.
# File lib/utility/publisher.rb, line 30 def subscribe(subscriber) @subscribers ||=  if !subscriber.respond_to?(:to_int) && !subscriber.respond_to?(:update) raise NoMethodError, "subscriber needs to respond to 'update'" end @subscribers.push subscriber end
Count of subscribers to this object.
# File lib/utility/publisher.rb, line 56 def subscriber_count @subscribers ? @subscribers.size : 0 end
subscriber as a subscriber on this object. It will no
longer receive notifications.
# File lib/utility/publisher.rb, line 42 def unsubscribe(subscriber) @subscribers.delete subscriber if defined? @subscribers end
Delete all subscribers associated with this object.
# File lib/utility/publisher.rb, line 49 def unsubscribe_all @subscribers.clear if defined? @subscribers end