def await(att, msg)

      action, condition =
        Ruote::Exp::AwaitExpression.extract_await_ac(:await => att)

      raise ::ArgumentError.new(
        ":await does not understand #{att.inspect}"
      ) if action == nil

      msg.merge!('flavour' => 'awaiting')

      h.state = 'awaiting'
      h.paused_apply = msg

      persist_or_raise

      @context.tracker.add_tracker(
        h.fei['wfid'],
        action,
        Ruote.to_storage_id(h.fei),
        condition,
        { '_auto_remove' => true,
          'action' => 'resume',
          'fei' => h.fei,
          'flavour' => 'awaiting' })
    end
def await(att, msg)

      action, condition =
        Ruote::Exp::AwaitExpression.extract_await_ac(:await => att)

      raise ::ArgumentError.new(
        ":await does not understand #{att.inspect}"
      ) if action == nil

      msg.merge!('flavour' => 'awaiting')

      h.state = 'awaiting'
      h.paused_apply = msg

      persist_or_raise

      @context.tracker.add_tracker(
        h.fei['wfid'],
        action,
        Ruote.to_storage_id(h.fei),
        condition,
        { '_auto_remove' => true,
          'action' => 'resume',
          'fei' => h.fei,
          'flavour' => 'awaiting' })
    end
If the expression has an :await attribute, the expression gets
 into a special "awaiting" state until the condition in the value
 of :await gets triggered and the trigger calls resume on the
 expression.