Sha256: c19888ea2efe078652f628ec987524fc8ba01a23fe1d24616345fe33df2d118d

Contents?: true

Size: 953 Bytes

Versions: 4

Compression:

Stored size: 953 Bytes

Contents

module Eye::Process::Trigger

  def add_triggers
    (self[:triggers] || {}).each { |_type, cfg| add_trigger(cfg) }
  end

  def remove_triggers
    self.triggers = []
  end

  def check_triggers(transition)
    self.triggers.each { |trigger| trigger.notify(transition, state_reason) }
  end

  # conditional start, used in triggers, to start only from unmonitored state, and only if special reason
  def conditional_start
    unless unmonitored?
      warn "skip, because in state #{state_name}"
      return
    end

    previous_reason = state_reason
    if last_scheduled_reason && previous_reason && last_scheduled_reason.class != previous_reason.class
      warn "skip, last_scheduled_reason(#{last_scheduled_reason.inspect}) != previous_reason(#{previous_reason})"
      return
    end

    start
  end

private

  def add_trigger(cfg = {})
    trigger = Eye::Trigger.create(current_actor, cfg)
    self.triggers << trigger if trigger
  end

end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
eye-0.8.1 lib/eye/process/trigger.rb
eye-0.8.celluloid15 lib/eye/process/trigger.rb
eye-0.8 lib/eye/process/trigger.rb
eye-0.8.rc lib/eye/process/trigger.rb