Module: WorkflowTemplate::Performer

Included in:
Definer::HasActions::Nested::Prepared, Workflow::ModuleMethods
Defined in:
lib/workflow_template/performer.rb

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.perform_action(action, state, *args) ⇒ Object



42
43
44
# File 'lib/workflow_template/performer.rb', line 42

def self.perform_action(action, state, *args)
  action.perform(state, *args)
end

.perform_actions(state, actions, receiver) ⇒ Object



32
33
34
35
36
37
38
39
40
# File 'lib/workflow_template/performer.rb', line 32

def self.perform_actions(state, actions, receiver)
  actions.simple.reduce(state) do |intermediate, action|
    intermediate = perform_action(action, intermediate, receiver)

    break intermediate unless intermediate.continue?

    intermediate
  end
end

.perform_wrapper_action(action, container, state, receiver) ⇒ Object



22
23
24
25
26
27
28
29
30
# File 'lib/workflow_template/performer.rb', line 22

def self.perform_wrapper_action(action, container, state, receiver)
  inner_state = state
  result = action.perform(state, receiver) do |yielded = {}|
    inner_state = state.process_bare_result(yielded, action, trace: true, validate: false)
    inner_state = perform_wrapper_actions(inner_state, container, receiver)
    inner_state.wrapped_state
  end
  inner_state.process_wrapped_result(result, action, trace: false, validate: true)
end

.perform_wrapper_actions(state, actions, receiver) ⇒ Object



13
14
15
16
17
18
19
20
# File 'lib/workflow_template/performer.rb', line 13

def self.perform_wrapper_actions(state, actions, receiver)
  if actions.wrapper.empty?
    perform_actions(state, actions, receiver)
  else
    action, container = actions.next_wrapper_action
    perform_wrapper_action(action, container, state, receiver)
  end
end

Instance Method Details

#perform(state, receiver) ⇒ Object



7
8
9
10
11
# File 'lib/workflow_template/performer.rb', line 7

def perform(state, receiver)
  raise WorkflowTemplate::Fatal, 'Workflow is not frozen' unless frozen?

  Performer.perform_wrapper_actions(state, actions, receiver)
end