Module: IronNails::Core::ControllerObservable

Included in:
NailsEngine
Defined in:
lib/ironnails/observable.rb

Instance Method Summary collapse

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_observersObject

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_observersObject

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