Class: Ruote::Exp::RedoExpression

Inherits:
FlowExpression show all
Defined in:
lib/ruote/exp/fe_redo.rb

Overview

Undoes and the redoes (re-applies) an expression identified by a tag.

pdef = Ruote.process_definition do
  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.

(redo is escaped as _redo not to conflict with the “redo” Ruby keyword)

Maybe this case is better served by a cursor/rewind combination

pdef = Ruote.process_definition do
  cursor do
    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)

Constant Summary

Constants inherited from FlowExpression

FlowExpression::COMMON_ATT_KEYS

Instance Attribute Summary

Attributes inherited from FlowExpression

#context, #error, #h

Instance Method Summary collapse

Methods inherited from FlowExpression

#ancestor?, #att, #attribute, #attribute_text, #attributes, #cancel, #compile_atts, #compile_variables, do_action, #do_apply, #do_cancel, #do_fail, #do_pause, #do_persist, #do_reply, #do_resume, #do_unpersist, #expand_atts, #fei, fetch, from_h, #handle_on_error, #has_attribute, #initial_persist, #initialize, #iterative_var_lookup, #launch_sub, #lookup_on_error, #lookup_val, #lookup_val_prefix, #lookup_variable, #name, names, #parent, #parent_id, #persist_or_raise, #reply_to_parent, #set_variable, #to_h, #tree, #tree_children, #try_persist, #try_unpersist, #unpersist_or_raise, #unset_variable, #update_tree, #variables

Methods included from WithMeta

#class_def, included

Methods included from WithH

included

Constructor Details

This class inherits a constructor from Ruote::Exp::FlowExpression

Instance Method Details

#applyObject



59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
# File 'lib/ruote/exp/fe_redo.rb', line 59

def apply

  ref = attribute(:ref) || attribute_text
  tag = ref ? lookup_variable(ref) : nil

  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)

  else

    reply_to_parent(h.applied_workitem)
  end
end

#reply(workitem) ⇒ Object



76
77
78
79
# File 'lib/ruote/exp/fe_redo.rb', line 76

def reply(workitem)

  # never called
end