module Reactor::Publishable
Public Instance Methods
publish(name, data = {})
click to toggle source
# File lib/reactor/models/concerns/publishable.rb, line 9 def publish(name, data = {}) Reactor::Event.publish(name, data.merge(actor: self) ) end
reschedule_events()
click to toggle source
# File lib/reactor/models/concerns/publishable.rb, line 13 def reschedule_events self.class.events.each do |name, data| reschedule(name, data) end end
Private Instance Methods
event_data_for_signature(signature)
click to toggle source
# File lib/reactor/models/concerns/publishable.rb, line 68 def event_data_for_signature(signature) signature.merge( actor: (signature[:actor] ? send(signature[:actor]) : self), target: (signature[:target] ? self : nil), at: (signature[:at] ? send(signature[:at]) : nil) ).except(:watch, :enqueue_if) end
reschedule(name, data)
click to toggle source
# File lib/reactor/models/concerns/publishable.rb, line 40 def reschedule(name, data) if data[:at] event = event_data_for_signature(data).merge( was: previous_changes[data[:at]].try(:first) || send("#{data[:at]}_was") ) Reactor::Event.reschedule(name, event) if should_fire_reactor_event?(data) end end
reschedule_events_on_update()
click to toggle source
# File lib/reactor/models/concerns/publishable.rb, line 31 def reschedule_events_on_update self.class.events.each do |name, data| attr_changed_method = data[:watch] || data[:at] if previous_changes[attr_changed_method] reschedule(name, data) end end end
schedule_events()
click to toggle source
# File lib/reactor/models/concerns/publishable.rb, line 49 def schedule_events self.class.events.each do |name, data| event = event_data_for_signature(data) Reactor::Event.publish(name, event) if should_fire_reactor_event?(data) end end
should_fire_reactor_event?(data, handler_name = :enqueue_if)
click to toggle source
# File lib/reactor/models/concerns/publishable.rb, line 56 def should_fire_reactor_event?(data, handler_name = :enqueue_if) handler = data[handler_name] case handler when Proc instance_exec(&handler) when Symbol send(handler) when NilClass true end end