lib/openwfe/expressions/fe_do.rb in ruote-0.9.18 vs lib/openwfe/expressions/fe_do.rb in ruote-0.9.19
- old
+ new
@@ -1,34 +1,34 @@
#
#--
# Copyright (c) 2007-2008, John Mettraux, OpenWFE.org
# All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without
+#
+# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met:
-#
+#
# . Redistributions of source code must retain the above copyright notice, this
-# list of conditions and the following disclaimer.
-#
-# . Redistributions in binary form must reproduce the above copyright notice,
-# this list of conditions and the following disclaimer in the documentation
+# list of conditions and the following disclaimer.
+#
+# . Redistributions in binary form must reproduce the above copyright notice,
+# this list of conditions and the following disclaimer in the documentation
# and/or other materials provided with the distribution.
-#
+#
# . Neither the name of the "OpenWFE" nor the names of its contributors may be
# used to endorse or promote products derived from this software without
# specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
-# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
#++
#
#
@@ -45,124 +45,124 @@
# redo / undo (cancel)
#
module OpenWFE
- #
- # 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.
- #
- class UndoExpression < 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.
+ #
+ class UndoExpression < FlowExpression
- names :undo
+ names :undo
- def apply (workitem)
+ def apply (workitem)
- tag = lookup_tag(workitem)
+ tag = lookup_tag(workitem)
- undo_self = false
+ undo_self = false
- if tag
- #OpenWFE::call_in_thread(fei.expression_name, self) do
- process_tag tag
- #end
+ if tag
+ #OpenWFE::call_in_thread(fei.expression_name, self) do
+ process_tag tag
+ #end
- undo_self = tag.fei.ancestor_of?(@fei)
- end
+ undo_self = tag.fei.ancestor_of?(@fei)
+ end
- reply_to_parent(workitem) unless undo_self
- end
+ reply_to_parent(workitem) unless undo_self
+ end
- #
- # Calls the expression pool cancel() method upon the tagged
- # expression.
- #
- def process_tag (tag)
+ #
+ # Calls the expression pool cancel() method upon the tagged
+ # expression.
+ #
+ def process_tag (tag)
- ldebug do
- "process_tag() #{fei.to_debug_s} to undo #{tag.fei.to_debug_s}"
- end
+ ldebug do
+ "process_tag() #{fei.to_debug_s} to undo #{tag.fei.to_debug_s}"
+ end
- #get_expression_pool.cancel_and_reply_to_parent(
- # tag.raw_expression.fei, tag.workitem)
+ #get_expression_pool.cancel_and_reply_to_parent(
+ # tag.raw_expression.fei, tag.workitem)
- exp = get_expression_pool.fetch_expression(tag.raw_expression.fei)
+ exp = get_expression_pool.fetch_expression(tag.raw_expression.fei)
- get_expression_pool.cancel(tag.raw_expression.fei)
+ get_expression_pool.cancel(tag.raw_expression.fei)
- get_expression_pool.reply_to_parent(exp, tag.workitem, false)
- #
- # 'remove' is set to false, cancel already removed the
- # expression
- end
+ get_expression_pool.reply_to_parent(exp, tag.workitem, false)
+ #
+ # 'remove' is set to false, cancel already removed the
+ # expression
+ end
- #def reply (workitem)
- #end
+ #def reply (workitem)
+ #end
- protected
+ protected
- def lookup_tag (workitem)
+ def lookup_tag (workitem)
- tagname = lookup_attribute :ref, workitem
+ tagname = lookup_attribute :ref, workitem
- tag = lookup_variable tagname
+ tag = lookup_variable tagname
- lwarn { "lookup_tag() no tag named '#{tagname}' found" } \
- unless tag
+ lwarn { "lookup_tag() no tag named '#{tagname}' found" } \
+ unless tag
- tag
- end
- end
+ tag
+ end
+ end
- #
- # Every expression in OpenWFEru accepts a 'tag' attribute. This tag
- # can later be referenced by an 'undo' or 'redo' expression.
- #
- # Calling for the undo of a non-existent tag throws no error, the flow
- # simply resumes.
- #
- class RedoExpression < UndoExpression
+ #
+ # Every expression in OpenWFEru accepts a 'tag' attribute. This tag
+ # can later be referenced by an 'undo' or 'redo' expression.
+ #
+ # Calling for the undo of a non-existent tag throws no error, the flow
+ # simply resumes.
+ #
+ class RedoExpression < UndoExpression
- names :redo
+ names :redo
- def process_tag (tag)
+ def process_tag (tag)
- ldebug do
- "process_tag() #{fei.to_debug_s} to redo #{tag.fei.to_debug_s}"
- end
+ ldebug do
+ "process_tag() #{fei.to_debug_s} to redo #{tag.fei.to_debug_s}"
+ end
- #
- # cancel
+ #
+ # cancel
- get_expression_pool.cancel(tag.fei)
+ get_expression_pool.cancel(tag.fei)
- #
- # [re]apply
+ #
+ # [re]apply
- tag.raw_expression.application_context = @application_context
+ tag.raw_expression.application_context = @application_context
- get_expression_pool.apply tag.raw_expression, tag.workitem
- end
+ get_expression_pool.apply tag.raw_expression, tag.workitem
end
+ end
end