Module: IronNails::Core::ControllerObservable
- Included in:
- NailsEngine
- Defined in:
- lib/ironnails/observable.rb
Instance Method Summary collapse
-
#add_observer(event, controller, &observer) ⇒ Object
Add
observer
as an observer on this object. -
#count_observers ⇒ Object
Return the number of observers associated with this object.
-
#delete_observer(event, controller, &observer) ⇒ Object
Delete
observer
as an observer on this object. -
#delete_observers ⇒ Object
Delete all observers associated with this object.
-
#notify_observers(event, controller, sender, *args) ⇒ Object
Notifies the registered observers that some interesting
event
has occurred.
Instance Method Details
#add_observer(event, controller, &observer) ⇒ Object
Add observer
as an observer on this object. observer
will now receive notifications. observer
is interest in the specified event
controller
is the name of the controller that listens for this event
68 69 70 71 72 73 74 |
# File 'lib/ironnails/observable.rb', line 68 def add_observer(event, controller, &observer) @controller_observers = [] unless defined? @controller_observers unless observer.respond_to? :call raise NoMethodError, "observer needs to respond to 'update'" end @controller_observers << { :event => event.to_sym, :observer => observer, :controller => controller.to_sym } end |
#count_observers ⇒ Object
Return the number of observers associated with this object.
95 96 97 98 99 100 101 |
# File 'lib/ironnails/observable.rb', line 95 def count_observers if defined? @controller_observers @controller_observers.size else 0 end end |
#delete_observer(event, controller, &observer) ⇒ Object
Delete observer
as an observer on this object. It will no longer receive notifications of the specified event
.
80 81 82 83 |
# File 'lib/ironnails/observable.rb', line 80 def delete_observer(event, controller, &observer) evt = { :event => event.to_sym, :observer => observer, :controller => controller.to_sym } @controller_observers.delete evt if defined? @controller_observers end |
#delete_observers ⇒ Object
Delete all observers associated with this object.
88 89 90 |
# File 'lib/ironnails/observable.rb', line 88 def delete_observers @controller_observers.clear if defined? @controller_observers end |
#notify_observers(event, controller, sender, *args) ⇒ Object
Notifies the registered observers that some interesting event
has occurred. It will notify the interested parties by calling the block and passing it some context
108 109 110 111 112 |
# File 'lib/ironnails/observable.rb', line 108 def notify_observers(event, controller, sender, *args) @controller_observers. select {|evt| evt[:event] == event.to_sym && evt[:controller] == controller.to_sym }. each {|evt| evt[:observer].call sender, *args } end |