Class: Dynflow::ExecutionPlan::Steps::PlanStep
  
  
  
  
  
    - Inherits:
 
    - 
      Abstract
      
        
        show all
      
    
 
  
  
  
  
  
  
  
  
  
  
    - Defined in:
 
    - lib/dynflow/execution_plan/steps/plan_step.rb
 
  
  
 
  Constant Summary
  
  Constants inherited
     from Serializable
  Serializable::LEGACY_TIME_FORMAT, Serializable::TIME_FORMAT
  Instance Attribute Summary collapse
  
  
  
  Attributes inherited from Abstract
  #action_class, #action_id, #delayed_events, #ended_at, #error, #execution_plan_id, #execution_time, #id, #progress_weight, #queue, #real_time, #started_at, #state, #world
  
  
  Attributes included from Stateful
  #state
  
    
      Class Method Summary
      collapse
    
    
  
    
      Instance Method Summary
      collapse
    
    
      
        - 
  
    
      #delay(delay_options, args)  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    
  
 
      
        - 
  
    
      #execute(execution_plan, trigger, from_subscription, *args)  ⇒ Action 
    
    
  
  
  
  
  
  
  
  
  
    
  
 
      
        - 
  
    
      #initialize(execution_plan_id, id, state, action_class, action_id, error, world, started_at = nil, ended_at = nil, execution_time = 0.0, real_time = 0.0, children = [])  ⇒ PlanStep 
    
    
  
  
  
    constructor
  
  
  
  
  
  
  
    
A new instance of PlanStep.
 
  
 
      
        - 
  
    
      #initialize_action(caller_action = nil)  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    
  
 
      
        - 
  
    
      #load_action  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    
  
 
      
        - 
  
    
      #phase  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    
  
 
      
        - 
  
    
      #planned_steps(execution_plan)  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    
  
 
      
        - 
  
    
      #to_hash  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    
  
 
      
    
  
  
  
  
  
  
  
  
  
  Methods inherited from Abstract
  #==, #action, #action_logger, #cancellable?, #default_progress_done, #mark_to_skip, #persistence, #progress_done, #save, #skippable?, states, #to_s, #with_sub_plans?
  
  
  
  
  
  
  
  
  Methods included from Stateful
  included, #set_state, #state_transitions, #states
  
  
  
  
  
  
  
  
  
  
  constantize, from_hash
  Constructor Details
  
    
  
  
    #initialize(execution_plan_id, id, state, action_class, action_id, error, world, started_at = nil, ended_at = nil, execution_time = 0.0, real_time = 0.0, children = [])  ⇒ PlanStep 
  
  
  
  
    
Returns a new instance of PlanStep.
   
 
  
    
      
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 
     | 
    
      # File 'lib/dynflow/execution_plan/steps/plan_step.rb', line 9
def initialize(execution_plan_id,
               id,
               state,
               action_class,
               action_id,
               error,
               world,
               started_at     = nil,
               ended_at       = nil,
               execution_time = 0.0,
               real_time      = 0.0,
               children       = [])
  super execution_plan_id, id, state, action_class, action_id, error, world, started_at,
        ended_at, execution_time, real_time
  children.all? { |child| Type! child, Integer }
  @children = children
end
     | 
  
 
  
 
  
    Instance Attribute Details
    
      
      
      
  
  
    #children  ⇒ Object  
  
  
  
  
    
Returns the value of attribute children.
   
 
  
  
    
      
6
7
8 
     | 
    
      # File 'lib/dynflow/execution_plan/steps/plan_step.rb', line 6
def children
  @children
end 
     | 
  
 
    
   
  
    Class Method Details
    
      
  
  
    .new_from_hash(hash, execution_plan_id, world)  ⇒ Object 
  
  
  
  
    
      
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88 
     | 
    
      # File 'lib/dynflow/execution_plan/steps/plan_step.rb', line 74
def self.new_from_hash(hash, execution_plan_id, world)
  check_class_matching hash
  new execution_plan_id,
    hash[:id],
    hash[:state],
    Action.constantize(hash[:action_class]),
    hash[:action_id],
    hash_to_error(hash[:error]),
    world,
    string_to_time(hash[:started_at]),
    string_to_time(hash[:ended_at]),
    hash[:execution_time],
    hash[:real_time],
    hash[:children]
end
     | 
  
 
    
      
  
  
    .state_transitions  ⇒ Object 
  
  
  
  
    
      
63
64
65
66
67
68
69
70
71
72 
     | 
    
      # File 'lib/dynflow/execution_plan/steps/plan_step.rb', line 63
def self.state_transitions
  @state_transitions ||= { scheduling: [:pending, :error, :cancelled],
                           pending:    [:running, :error, :cancelled],
                           running:    [:success, :error, :cancelled],
                           success:    [],
                           suspended:  [],
                           skipped:    [],
                           cancelled:  [],
                           error:      [] }
end
     | 
  
 
    
   
  
    Instance Method Details
    
      
  
  
    #delay(delay_options, args)  ⇒ Object 
  
  
  
  
    
      
40
41
42
43
44
45
46 
     | 
    
      # File 'lib/dynflow/execution_plan/steps/plan_step.rb', line 40
def delay(delay_options, args)
  @action.execute_delay(delay_options, *args)
  persistence.save_action(execution_plan_id, @action)
  @action.serializer
ensure
  save
end 
     | 
  
 
    
      
  
  
    #execute(execution_plan, trigger, from_subscription, *args)  ⇒ Action 
  
  
  
  
    
      
49
50
51
52
53
54
55
56
57
58
59
60
61 
     | 
    
      # File 'lib/dynflow/execution_plan/steps/plan_step.rb', line 49
def execute(execution_plan, trigger, from_subscription, *args)
  unless @action
    raise "The action was not initialized, you might forgot to call initialize_action method"
  end
  @action.set_plan_context(execution_plan, trigger, from_subscription)
  Type! execution_plan, ExecutionPlan
  with_meta_calculation(@action) do
    @action.execute(*args)
  end
  persistence.save_action(execution_plan_id, @action)
  return @action
end
     | 
  
 
    
      
  
  
    #initialize_action(caller_action = nil)  ⇒ Object 
  
  
  
  
    
      
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111 
     | 
    
      # File 'lib/dynflow/execution_plan/steps/plan_step.rb', line 94
def initialize_action(caller_action = nil)
  attributes = { execution_plan_id: execution_plan_id,
                 id:                action_id,
                 step:              self,
                 plan_step_id:      self.id,
                 run_step_id:       nil,
                 finalize_step_id:  nil,
                 phase:             phase }
  if caller_action
    if caller_action.execution_plan_id != execution_plan_id
      attributes.update(caller_execution_plan_id: caller_action.execution_plan_id)
    end
    attributes.update(caller_action_id: caller_action.id)
  end
  @action = action_class.new(attributes, world)
  persistence.save_action(execution_plan_id, @action)
  @action
end
     | 
  
 
    
      
  
  
    #load_action  ⇒ Object 
  
  
  
  
    
      
90
91
92 
     | 
    
      # File 'lib/dynflow/execution_plan/steps/plan_step.rb', line 90
def load_action
  @action = @world.persistence.load_action(self)
end 
     | 
  
 
    
      
  
  
    #phase  ⇒ Object 
  
  
  
  
    
      
32
33
34 
     | 
    
      # File 'lib/dynflow/execution_plan/steps/plan_step.rb', line 32
def phase
  Action::Plan
end 
     | 
  
 
    
      
  
  
    #planned_steps(execution_plan)  ⇒ Object 
  
  
  
  
    
      
28
29
30 
     | 
    
      # File 'lib/dynflow/execution_plan/steps/plan_step.rb', line 28
def planned_steps(execution_plan)
  @children.map { |id| execution_plan.steps.fetch(id) }
end
     | 
  
 
    
      
  
  
    #to_hash  ⇒ Object 
  
  
  
  
    
      
36
37
38 
     | 
    
      # File 'lib/dynflow/execution_plan/steps/plan_step.rb', line 36
def to_hash
  super.merge recursive_to_hash(:children => children)
end 
     |