lib/ruote/exp/fe_undo.rb in ruote-2.2.0 vs lib/ruote/exp/fe_undo.rb in ruote-2.3.0
- old
+ new
@@ -1,7 +1,7 @@
#--
-# Copyright (c) 2005-2011, John Mettraux, jmettraux@gmail.com
+# Copyright (c) 2005-2012, John Mettraux, jmettraux@gmail.com
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
@@ -42,19 +42,55 @@
#
# This expression is aliased to 'cancel'
#
# cancel :ref => 'invoicing_stage'
#
+ # == a bit shorter
+ #
+ # It's OK to shorten
+ #
+ # cancel :ref => 'invoicing_stage'
+ #
+ # to
+ #
+ # cancel 'invoicing_stage'
+ #
+ # == kill
+ #
+ # kill :ref => 'invoicing stage'
+ #
+ # will cancel the target expression and bypass any on_cancel handler set for
+ # it.
+ #
+ # concurrence do
+ # sequence :tag => 'x', :on_cancel => 'y' do
+ # # ...
+ # end
+ # sequence do
+ # # ...
+ # kill 'x'
+ # end
+ # end
+ #
+ # In this example the :on_cancel => 'y' will get ignored if kill 'x' kicks
+ # in.
+ #
class UndoExpression < FlowExpression
- names :undo, :cancel
+ names :undo, :cancel, :kill
def apply
ref = attribute(:ref) || attribute_text
- tag = ref ? lookup_variable(ref) : nil
+ ref = ref.strip if ref
- @context.storage.put_msg('cancel', 'fei' => tag) if Ruote.is_a_fei?(tag)
+ tag = (ref && ref != '') ? lookup_variable(ref) : nil
+
+ @context.storage.put_msg(
+ 'cancel',
+ 'fei' => tag,
+ 'flavour' => self.name == 'kill' ? 'kill' : nil
+ ) if Ruote.is_a_fei?(tag)
reply_to_parent(h.applied_workitem)
end
def reply(workitem)