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

[View source]

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

[View source]

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

def reply(workitem)

  # never called
end