dynflow 0.4.0 → 0.4.1

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -28,13 +28,19 @@ implementations as well).
28
28
  * [Related projects](#related-projects)
29
29
 
30
30
  Current status
31
- -------------
31
+ --------------
32
32
 
33
33
  Dynflow has been under heavy development for several months to be able
34
34
  to support the services orchestration in the
35
35
  [Katello](http://katello.org) and [Foreman](http://theforeman.org/)
36
36
  projects, getting to production-ready state in couple of weeks.
37
37
 
38
+ Requirements
39
+ ------------
40
+
41
+ - Ruby MRI 1.9.3, 2.0, or 2.1.
42
+ - It does not work on JRuby nor Rubinius yet.
43
+
38
44
  How it works
39
45
  ------------
40
46
 
@@ -64,6 +64,12 @@ module Dynflow
64
64
  end
65
65
  end
66
66
 
67
+ module Phase
68
+ def to_s_humanized
69
+ to_s.split('::').last
70
+ end
71
+ end
72
+
67
73
  def self.constantize(action_name)
68
74
  super action_name
69
75
  rescue NameError
@@ -159,7 +165,7 @@ module Dynflow
159
165
  end
160
166
 
161
167
  def steps
162
- [plan_step, run_step, finalize_step_id]
168
+ [plan_step, run_step, finalize_step]
163
169
  end
164
170
 
165
171
  def to_hash
@@ -215,7 +221,10 @@ module Dynflow
215
221
 
216
222
  def state=(state)
217
223
  phase! Executable
218
- @world.logger.debug "step #{execution_plan_id}:#{@step.id} #{self.state} >> #{state}"
224
+ @world.logger.debug format('%13s %s:%2d %9s >> %9s in phase %8s %s',
225
+ 'Step', execution_plan_id, @step.id,
226
+ self.state, state,
227
+ phase.to_s_humanized, self.class)
219
228
  @step.state = state
220
229
  end
221
230
 
@@ -276,7 +285,8 @@ module Dynflow
276
285
 
277
286
  def plan_self(input)
278
287
  phase! Plan
279
- self.input = input
288
+ self.input.update input
289
+
280
290
  if self.respond_to?(:run)
281
291
  run_step = @execution_plan.add_run_step(self)
282
292
  @run_step_id = run_step.id
@@ -367,7 +377,8 @@ module Dynflow
367
377
 
368
378
  def execute_run(event)
369
379
  phase! Run
370
- @world.logger.debug "step #{execution_plan_id}:#{@step.id} got event #{event}" if event
380
+ @world.logger.debug format('%13s %s:%2d got event %s',
381
+ 'Step', execution_plan_id, @step.id, event) if event
371
382
  @input = OutputReference.dereference @input, world.persistence
372
383
 
373
384
  case
@@ -73,7 +73,8 @@ module Dynflow
73
73
  else
74
74
  # ignore
75
75
  end
76
- logger.debug "execution plan #{id} #{original} >> #{state}"
76
+ logger.debug format('%13s %s %9s >> %9s',
77
+ 'ExecutionPlan', id, original, state)
77
78
  self.save
78
79
  end
79
80
 
@@ -62,7 +62,7 @@ module Dynflow
62
62
  end
63
63
 
64
64
  def to_s
65
- "[#{self.class.name}:#{execution_plan_id}:#{id}]"
65
+ "#<#{self.class.name}:#{execution_plan_id}:#{id}>"
66
66
  end
67
67
 
68
68
  def to_hash
@@ -86,6 +86,12 @@ module Dynflow
86
86
  raise NotImplementedError, "Expected to be implemented in RunStep and FinalizeStep"
87
87
  end
88
88
 
89
+ def action(execution_plan)
90
+ attributes = world.persistence.adapter.load_action(execution_plan_id, action_id)
91
+ Action.from_hash(attributes.update(phase: Action::Present, execution_plan: execution_plan),
92
+ world)
93
+ end
94
+
89
95
  protected
90
96
 
91
97
  def self.new_from_hash(hash, execution_plan_id, world)
@@ -14,7 +14,8 @@ module Dynflow
14
14
  end
15
15
 
16
16
  assert(!found.empty?,
17
- "Action #{planned_action_class} with plan_input #{plan_input} was not planned, there were only #{found_classes.map(&:plan_input)}")
17
+ "Action #{planned_action_class} with plan_input #{plan_input} was not planned, " +
18
+ "there were only #{found_classes.map(&:plan_input)}")
18
19
  found
19
20
  end
20
21
 
@@ -63,7 +63,7 @@ module Dynflow
63
63
 
64
64
  # @return [Action::FinalizePhase]
65
65
  def finalize_action(run_action, &stubbing)
66
- Match! run_action.phase, Action::Run
66
+ Match! run_action.phase, Action::Plan, Action::Run
67
67
  step = DummyStep.new
68
68
  finalize_action = run_action.class.new(
69
69
  { step: step,
@@ -1,3 +1,3 @@
1
1
  module Dynflow
2
- VERSION = '0.4.0'
2
+ VERSION = '0.4.1'
3
3
  end
@@ -1,25 +1,30 @@
1
- (function($) {
2
- $.fn.extend({
3
- postlink: function(options) {
4
- return this.each(function() {
5
- $(this).click(function(e) {
6
- var frm = $("<form>");
7
- frm.attr({'action':$(this).attr('href'), 'method': 'post'});
8
- frm.appendTo("body");
9
- frm.submit();
10
- e.preventDefault();
11
- });
12
- });
13
- }
14
- });
1
+ (function ($) {
2
+ $.fn.extend({
3
+ postlink: function (options) {
4
+ return this.each(function () {
5
+ $(this).click(function (e) {
6
+ var frm = $("<form>");
7
+ frm.attr({'action': $(this).attr('href'), 'method': 'post'});
8
+ frm.appendTo("body");
9
+ frm.submit();
10
+ e.preventDefault();
11
+ });
12
+ });
13
+ }
14
+ });
15
15
 
16
- $(function() {
17
- $('.postlink').postlink();
16
+ $(function () {
17
+ $('.postlink').postlink();
18
18
 
19
- $('table.flow span.step-label').click(function (e) {
20
- var stepData = $(this).siblings('div.action');
21
- stepData.slideToggle();
22
- });
19
+ $('table.flow span.step-label').click(function (e) {
20
+ var stepData = $(this).siblings('div.action');
21
+ stepData.slideToggle();
22
+ });
23
+
24
+ $('.plan-step .step-label').click(function (e) {
25
+ var stepData = $(this).siblings('div.action');
26
+ stepData.slideToggle();
23
27
  });
28
+ });
24
29
 
25
30
  })(jQuery);
@@ -1,9 +1,9 @@
1
1
  body {
2
- margin: 1em;
2
+ margin: 1em;
3
3
  }
4
4
 
5
5
  pre {
6
- white-space: pre;
6
+ white-space: pre;
7
7
  }
8
8
 
9
9
  div.tab-pane {
@@ -25,77 +25,81 @@ ul.plan-step span.error {
25
25
  table.flow td.flow.sequence,
26
26
  table.flow td.flow.concurrence,
27
27
  table.flow-hint td.border {
28
- border-style: solid;
29
- border-width: 4px;
28
+ border-style: solid;
29
+ border-width: 4px;
30
30
  }
31
31
 
32
32
  table.flow-hint td {
33
- width: 6em;
34
- padding: 0.3em;
33
+ width: 6em;
34
+ padding: 0.3em;
35
35
  }
36
36
 
37
37
  table.flow-hint {
38
- margin: 1em 0 1em 0;
38
+ margin: 1em 0 1em 0;
39
39
  }
40
40
 
41
41
  table.flow td.sequence, table.flow-hint td.sequence {
42
- border-color: #FF6600;
42
+ border-color: #FF6600;
43
43
  }
44
44
 
45
45
  table.flow td.concurrence, table.flow-hint td.concurrence {
46
- border-color: #005CE6;
46
+ border-color: #005CE6;
47
47
  }
48
48
 
49
49
  td.atom {
50
- padding: 0;
50
+ padding: 0;
51
51
  }
52
52
 
53
53
  table.flow div.atom {
54
- margin-bottom: -1.6em;
55
- position: relative;
56
- height: 2.1em;
57
- top: 0;
58
- left: 0;
59
- z-index:-1;
54
+ margin-bottom: -1.6em;
55
+ position: relative;
56
+ height: 2.1em;
57
+ top: 0;
58
+ left: 0;
59
+ z-index: -1;
60
60
  }
61
61
 
62
62
  table.flow table {
63
- width: 100%;
63
+ width: 100%;
64
64
  }
65
65
 
66
66
  table.flow td.success span.step-label {
67
- color: #468847;
67
+ color: #468847;
68
68
  }
69
69
 
70
70
  table.flow div.success {
71
- background-color: #DFF0D8;
71
+ background-color: #DFF0D8;
72
72
  }
73
73
 
74
74
  table.flow div.error {
75
- background-color: #FF9D9D;
75
+ background-color: #FF9D9D;
76
76
  }
77
77
 
78
78
  table.flow td.skipped span.step-label {
79
- color: #C09853;
79
+ color: #C09853;
80
80
  }
81
81
 
82
82
  table.flow div.skipped {
83
- background-color: #FCF8E3;
83
+ background-color: #FCF8E3;
84
84
  }
85
85
 
86
86
  table.flow span.step-label {
87
- cursor: pointer;
88
- margin-left: 4px;
89
- display: inline-block;
90
- height: 1.5em;
87
+ cursor: pointer;
88
+ margin-left: 4px;
89
+ display: inline-block;
90
+ height: 1.5em;
91
+ }
92
+
93
+ .plan-step div.action {
94
+ display: none;
91
95
  }
92
96
 
93
97
  table.flow div.action {
94
- background-color: white;
95
- padding: 10px;
96
- display: none;
98
+ background-color: white;
99
+ padding: 10px;
100
+ display: none;
97
101
  }
98
102
 
99
103
  table.flow td.error div.step-data {
100
- display: block;
104
+ display: block;
101
105
  }
@@ -1,9 +1,13 @@
1
1
  <ul class="plan-step">
2
2
  <li>
3
- <p>
3
+ <p class="step-label">
4
4
  <span class="label label-<%= step_css_class(step) %>"><%= h("#{step.action_class}") %></span>
5
5
  </p>
6
- <%= step_error(step) %>
6
+ <div class="action">
7
+ <% action = step.action @plan %>
8
+ <%= show_action_data("Input:", action.input) %>
9
+ <%= step_error(step) %>
10
+ </div>
7
11
  <% step.children.each do |sub_step_id| %>
8
12
  <%= erb :plan_step, locals: { step: @plan.steps[sub_step_id] } %>
9
13
  <% end %>
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dynflow
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.4.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2014-02-17 00:00:00.000000000 Z
12
+ date: 2014-02-18 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activesupport