Class | OpenWFE::UndoExpression |
In: |
lib/openwfe/expressions/fe_do.rb
|
Parent: | FlowExpression |
Every expression in OpenWFEru accepts a ‘tag’ attribute. This tag can later be referenced by an ‘undo’ or ‘redo’ expression. Tags are active as soon as an expression is applied and they vanish when the expression replies to its parent expression or is cancelled.
Calling for the undo of a non-existent tag throws no error, the flow simply resumes.
concurrence do sequence :tag => "side_job" do participant "alice" participant "bob" end sequence do participant "charly" undo :ref => "side_job" end end
In this example, as soon as the participant charly is over, the sequence ‘side_job’ gets undone (cancelled). If the sequence ‘side_job’ was already over, the "undo" will have no effect.
# File lib/openwfe/expressions/fe_do.rb, line 78 78: def apply (workitem) 79: 80: tag = lookup_tag(workitem) 81: 82: undo_self = false 83: 84: if tag 85: #OpenWFE::call_in_thread(fei.expression_name, self) do 86: process_tag tag 87: #end 88: 89: undo_self = tag.fei.ancestor_of?(@fei) 90: end 91: 92: reply_to_parent(workitem) unless undo_self 93: end
Calls the expression pool cancel() method upon the tagged expression.
# File lib/openwfe/expressions/fe_do.rb, line 99 99: def process_tag (tag) 100: 101: ldebug do 102: "process_tag() #{fei.to_debug_s} to undo #{tag.fei.to_debug_s}" 103: end 104: 105: #get_expression_pool.cancel_and_reply_to_parent( 106: # tag.raw_expression.fei, tag.workitem) 107: 108: exp = get_expression_pool.fetch_expression(tag.raw_expression.fei) 109: 110: get_expression_pool.cancel(tag.raw_expression.fei) 111: 112: get_expression_pool.reply_to_parent(exp, tag.workitem, false) 113: # 114: # 'remove' is set to false, cancel already removed the 115: # expression 116: end
def reply (workitem) end
# File lib/openwfe/expressions/fe_do.rb, line 123 123: def lookup_tag (workitem) 124: 125: tagname = lookup_attribute :ref, workitem 126: 127: tag = lookup_variable tagname 128: 129: lwarn { "lookup_tag() no tag named '#{tagname}' found" } \ 130: unless tag 131: 132: tag 133: end