lib/ruote/exp/fe_redo.rb in ruote-2.1.11 vs lib/ruote/exp/fe_redo.rb in ruote-2.2.0
- old
+ new
@@ -1,7 +1,7 @@
#--
-# Copyright (c) 2005-2010, John Mettraux, jmettraux@gmail.com
+# Copyright (c) 2005-2011, 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
@@ -27,12 +27,12 @@
#
# Undoes and the redoes (re-applies) an expression identified by a tag.
#
# pdef = Ruote.process_definition do
- # sequence do
- # alpha :tag => 'kilroy'
+ # sequence :tag => 'kilroy' do
+ # alpha
# _redo :ref => 'kilroy', :unless => '${f:ok} == true'
# end
# end
#
# will redo at tag 'kilroy' if the field 'ok' is not set to true.
@@ -41,25 +41,29 @@
#
# Maybe this case is better served by a cursor/rewind combination
#
# pdef = Ruote.process_definition do
# cursor do
- # alpha :tag => 'kilroy'
+ # alpha
# rewind :unless => '${f:ok} == true'
# end
# end
#
+ # (There is a big difference though, a redo will restart with the workitem
+ # as it was when the workitem entered the tagged region, while the rewind
+ # keeps the workitem as is)
+ #
class RedoExpression < FlowExpression
names :redo
def apply
ref = attribute(:ref) || attribute_text
tag = ref ? lookup_variable(ref) : nil
- if tag
+ if tag && Ruote.is_a_fei?(tag)
@context.storage.put_msg('cancel', 'fei' => tag, 're_apply' => true)
reply_to_parent(h.applied_workitem) unless ancestor?(tag)
@@ -67,10 +71,10 @@
reply_to_parent(h.applied_workitem)
end
end
- def reply (workitem)
+ def reply(workitem)
# never called
end
end
end