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