module Kamaze::Project::Concern::Observable
Observable
provides the methods for managing the associated observers.
The observers SHOULD implement a method called “update“ to receive notifications.
The observable object MNUST:
-
call “#dispatch_event“
Sample of use:
“`ruby # @abstract class Observable
include Kamaze::Project::Concern::Observable
end
class Subject < Observable
attr_accessor :updated_at def update # do something dispatch_event(:after_update) end
end
class SubjectObserver < Kamaze::Project::Observer
observe Subject def after_update(subject) subject.updated_at = Time.now end
end “`
Attributes
observer_peers[R]
@return [Hash|nil]
Public Class Methods
included(base)
click to toggle source
# File lib/kamaze/project/concern/observable.rb, line 47 def included(base) base.extend(ClassMethods) end
new()
click to toggle source
# File lib/kamaze/project/concern/observable.rb, line 98 def initialize observer_peers_initialize end
Protected Instance Methods
dispatch_event(event, *args)
click to toggle source
Dispatch given “event“
@param [Symbol|String] event @param [Array<Object>] args
@return [self]
# File lib/kamaze/project/concern/observable.rb, line 126 def dispatch_event(event, *args) self.tap do observer_peers.to_h.each do |k, v| k.__send__(v, *[event, self].concat(args)) end end end
observer_peers_initialize()
click to toggle source
Initialize observers (defined from “self.class.observer_peers“)
@return [self]
# File lib/kamaze/project/concern/observable.rb, line 110 def observer_peers_initialize (@observer_peers ||= {}).yield_self do |observer_peers| self.class.__send__(:observer_peers).to_h.each do |k, v| observer_peers[k.new] = v end end self end