ntl-orchestra 0.9.2 → 0.9.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,49 +1,49 @@
1
1
  class DSLTest < Minitest::Test
2
- def test_failing_to_supply_perform_block
2
+ def test_failing_to_supply_execute_block
3
3
  error = assert_raises ArgumentError do
4
- Orchestra::Node::InlineNode.build do
4
+ Orchestra::Step::InlineStep.build do
5
5
  provides :foo
6
6
  depends_on :bar
7
7
  end
8
8
  end
9
9
 
10
- assert_equal "expected inline node to define a perform block", error.message
10
+ assert_equal "expected inline step to define a execute block", error.message
11
11
  end
12
12
 
13
- def test_two_nodes_one_name
13
+ def test_two_steps_one_name
14
14
  error = assert_raises ArgumentError do
15
15
  Orchestra::Operation.new do
16
- node :foo do
16
+ step :foo do
17
17
  depends_on :bar
18
- perform do bar + bar end
18
+ execute do bar + bar end
19
19
  end
20
- node :foo do
20
+ step :foo do
21
21
  depends_on :qux
22
- perform do qux * qux end
22
+ execute do qux * qux end
23
23
  end
24
24
  end
25
25
  end
26
26
 
27
- assert_equal "There are duplicate nodes named :foo", error.message
27
+ assert_equal "There are duplicate steps named :foo", error.message
28
28
  end
29
29
 
30
- def test_result_node
30
+ def test_result_step
31
31
  operation = Orchestra::Operation.new do
32
- result :foo do perform do 'foo' end end
32
+ result :foo do execute do 'foo' end end
33
33
  end
34
34
  assert_equal :foo, operation.result
35
35
 
36
36
  error = assert_raises ArgumentError do
37
37
  operation = Orchestra::Operation.new do
38
- result do perform do 'foo' end end
38
+ result do execute do 'foo' end end
39
39
  end
40
40
  end
41
- assert_equal "Could not infer name for node from a provision", error.message
41
+ assert_equal "Could not infer name for step from a provision", error.message
42
42
 
43
43
  operation = Orchestra::Operation.new do
44
44
  result do
45
45
  provides :foo
46
- perform do 'foo' end
46
+ execute do 'foo' end
47
47
  end
48
48
  end
49
49
  assert_equal :foo, operation.result
@@ -51,20 +51,20 @@ class DSLTest < Minitest::Test
51
51
 
52
52
  def test_command_operations_using_finally
53
53
  operation = Orchestra::Operation.new do
54
- node :unnecessary do
54
+ step :unnecessary do
55
55
  provides :baz
56
- perform do raise "Can't get here" end
56
+ execute do raise "Can't get here" end
57
57
  end
58
58
 
59
- node :necessary do
59
+ step :necessary do
60
60
  depends_on :baz
61
61
  provides :bar
62
- perform do baz + 1 end
62
+ execute do baz + 1 end
63
63
  end
64
64
 
65
65
  finally do
66
66
  depends_on :bar
67
- perform do bar * 2 end
67
+ execute do bar * 2 end
68
68
  end
69
69
  end
70
70
 
@@ -80,7 +80,7 @@ class DSLTest < Minitest::Test
80
80
  conductor = Orchestra::Conductor.new
81
81
  conductor.add_observer test_observer
82
82
 
83
- assert_equal nil, conductor.perform(operation, :baz => 3)
83
+ assert_equal nil, conductor.execute(operation, :baz => 3)
84
84
  assert_equal 8, test_observer.result
85
85
  end
86
86
 
@@ -88,12 +88,12 @@ class DSLTest < Minitest::Test
88
88
  operation = Orchestra::Operation.new do
89
89
  result do
90
90
  modifies :list
91
- perform do list << :foo end
91
+ execute do list << :foo end
92
92
  end
93
93
  end
94
94
 
95
95
  ary = []
96
- Orchestra.perform operation, :list => ary
96
+ Orchestra.execute operation, :list => ary
97
97
 
98
98
  assert_equal [:foo], ary
99
99
  end
@@ -101,8 +101,8 @@ class DSLTest < Minitest::Test
101
101
  def test_must_supply_result
102
102
  error = assert_raises ArgumentError do
103
103
  Orchestra::Operation.new do
104
- node :foo do
105
- perform do 'foo' end
104
+ step :foo do
105
+ execute do 'foo' end
106
106
  end
107
107
  end
108
108
  end
@@ -110,13 +110,13 @@ class DSLTest < Minitest::Test
110
110
  assert_equal "Must supply a result", error.message
111
111
  end
112
112
 
113
- def test_must_contain_at_least_one_node
113
+ def test_must_contain_at_least_one_step
114
114
  error = assert_raises ArgumentError do
115
115
  Orchestra::Operation.new do
116
116
  self.result = :foo
117
117
  end
118
118
  end
119
119
 
120
- assert_equal "Must supply at least one node", error.message
120
+ assert_equal "Must supply at least one step", error.message
121
121
  end
122
122
  end
@@ -5,7 +5,7 @@ class ObjectAdapterTest < Minitest::Test
5
5
 
6
6
  def test_method_does_not_exist_on_singleton
7
7
  error = assert_raises NotImplementedError do
8
- @builder.add_node Splitter, :provides => :words, :method => :foo
8
+ @builder.add_step Splitter, :provides => :words, :method => :foo
9
9
  end
10
10
 
11
11
  assert_equal "ObjectAdapterTest::Splitter does not implement method `foo'", error.message
@@ -13,29 +13,29 @@ class ObjectAdapterTest < Minitest::Test
13
13
 
14
14
  def test_method_does_not_exist_on_object
15
15
  error = assert_raises NotImplementedError do
16
- @builder.add_node Upcaser, :provides => :words
16
+ @builder.add_step Upcaser, :provides => :words
17
17
  end
18
18
 
19
- assert_equal "ObjectAdapterTest::Upcaser does not implement instance method `perform'", error.message
19
+ assert_equal "ObjectAdapterTest::Upcaser does not implement instance method `execute'", error.message
20
20
  end
21
21
 
22
22
  def test_dependencies_inferred_from_method_defaults
23
- node = @builder.add_node Upcaser, :iterates_over => :words, :provides => :upcased_words, :method => :call
23
+ step = @builder.add_step Upcaser, :iterates_over => :words, :provides => :upcased_words, :method => :call
24
24
 
25
- assert_equal [:words, :transform], node.dependencies
26
- assert_equal [:words], node.required_dependencies
25
+ assert_equal [:words, :transform], step.dependencies
26
+ assert_equal [:words], step.required_dependencies
27
27
  end
28
28
 
29
- def test_performing_an_operation_with_integrated_objects
29
+ def test_executing_an_operation_with_integrated_objects
30
30
  operation = Orchestra::Operation.new do
31
- node Splitter, :provides => :words
32
- node Upcaser, :iterates_over => :words, :provides => :upcased_words, :method => :call
33
- node Bolder, :iterates_over => :upcased_words, :provides => :bolded_words, :method => :call
34
- node Joiner, :method => :join
31
+ step Splitter, :provides => :words
32
+ step Upcaser, :iterates_over => :words, :provides => :upcased_words, :method => :call
33
+ step Bolder, :iterates_over => :upcased_words, :provides => :bolded_words, :method => :call
34
+ step Joiner, :method => :join
35
35
  self.result = :joiner
36
36
  end
37
37
 
38
- result = Orchestra.perform(
38
+ result = Orchestra.execute(
39
39
  operation,
40
40
  :sentence => "the quick brown fox jumps over the lazy dog",
41
41
  :bold_text => "*",
@@ -50,7 +50,7 @@ class ObjectAdapterTest < Minitest::Test
50
50
  def test_provent_singleton_objects_from_handling_collections
51
51
  error = assert_raises ArgumentError do
52
52
  Orchestra::Operation.new do
53
- node Splitter, :iterates_over => :sentence
53
+ step Splitter, :iterates_over => :sentence
54
54
  end
55
55
  end
56
56
 
@@ -61,7 +61,7 @@ class ObjectAdapterTest < Minitest::Test
61
61
  end
62
62
 
63
63
  module Splitter
64
- def self.perform sentence
64
+ def self.execute sentence
65
65
  sentence.split %r{[[:space:]]+}
66
66
  end
67
67
  end
@@ -1,19 +1,19 @@
1
1
  module OperationTest
2
- class PerformTest < Minitest::Test
2
+ class ExecutionTest < Minitest::Test
3
3
  def test_simple_operation
4
4
  operation = build_simple_operation
5
5
 
6
6
  assert_equal(
7
7
  %(THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG),
8
- operation.perform(:sentence => %(the quick brown fox jumps over the lazy dog)),
8
+ operation.execute(:sentence => %(the quick brown fox jumps over the lazy dog)),
9
9
  )
10
10
  end
11
11
 
12
- def test_performing_operation_without_inputs
12
+ def test_executing_operation_without_inputs
13
13
  operation = build_simple_operation
14
14
 
15
15
  error = assert_raises Orchestra::MissingInputError do
16
- operation.perform
16
+ operation.execute
17
17
  end
18
18
 
19
19
  assert_equal %(Missing input :sentence), error.message
@@ -23,7 +23,7 @@ module OperationTest
23
23
  operation = build_mutator
24
24
 
25
25
  shopping_list = [%(1 clove garlic)]
26
- operation.perform :shopping_list => shopping_list
26
+ operation.execute :shopping_list => shopping_list
27
27
 
28
28
  assert_equal(
29
29
  [%(1 clove garlic), %(2 bunches of carrots), %(1 stalk of celery), %(3 yellow onions)],
@@ -36,41 +36,41 @@ module OperationTest
36
36
 
37
37
  assert_equal(
38
38
  %(THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG),
39
- operation.perform(:upcased_word_list => %w(THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG)),
39
+ operation.execute(:upcased_word_list => %w(THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG)),
40
40
  )
41
41
  end
42
42
 
43
- def test_passing_conductor_into_nodes
43
+ def test_passing_conductor_into_steps
44
44
  conductor = Orchestra::Conductor.new
45
45
 
46
- node = Orchestra::Node::InlineNode.build do
46
+ step = Orchestra::Step::InlineStep.build do
47
47
  depends_on :conductor
48
48
  provides :conductor_id
49
- perform do conductor.object_id end
49
+ execute do conductor.object_id end
50
50
  end
51
51
 
52
- assert_equal conductor.object_id, node.perform[:conductor_id]
52
+ assert_equal conductor.object_id, step.execute[:conductor_id]
53
53
  end
54
54
 
55
55
  def test_missing_input_errors
56
56
  operation = Orchestra::Operation.new do
57
- node :foo do
57
+ step :foo do
58
58
  depends_on :bar
59
- perform do bar + bar end
59
+ execute do bar + bar end
60
60
  end
61
- node :baz do
61
+ step :baz do
62
62
  depends_on :qux
63
- perform do qux * qux end
63
+ execute do qux * qux end
64
64
  end
65
- node :result do
65
+ step :result do
66
66
  depends_on :foo, :baz
67
- perform do baz - foo end
67
+ execute do baz - foo end
68
68
  end
69
69
  self.result = :result
70
70
  end
71
71
 
72
72
  error = assert_raises Orchestra::MissingInputError do
73
- Orchestra.perform operation, :bar => nil
73
+ Orchestra.execute operation, :bar => nil
74
74
  end
75
75
 
76
76
  assert_equal "Missing inputs :bar and :qux", error.message
@@ -80,21 +80,21 @@ module OperationTest
80
80
 
81
81
  def build_simple_operation
82
82
  Orchestra::Operation.new do
83
- node :split do
83
+ step :split do
84
84
  depends_on :sentence
85
85
  provides :word_list
86
- perform do sentence.split %r{[[:space:]]+} end
86
+ execute do sentence.split %r{[[:space:]]+} end
87
87
  end
88
88
 
89
- node :upcase do
89
+ step :upcase do
90
90
  depends_on :word_list
91
91
  provides :upcased_word_list
92
- perform do word_list.map &:upcase end
92
+ execute do word_list.map &:upcase end
93
93
  end
94
94
 
95
- node :join do
95
+ step :join do
96
96
  depends_on :upcased_word_list
97
- perform do upcased_word_list.join ' ' end
97
+ execute do upcased_word_list.join ' ' end
98
98
  end
99
99
 
100
100
  self.result = :join
@@ -103,22 +103,22 @@ module OperationTest
103
103
 
104
104
  def build_mutator
105
105
  Orchestra::Operation.new do
106
- node :carrots do
106
+ step :carrots do
107
107
  depends_on :shopping_list
108
108
  provides :shopping_list
109
- perform do shopping_list << "2 bunches of carrots" end
109
+ execute do shopping_list << "2 bunches of carrots" end
110
110
  end
111
111
 
112
- node :celery do
112
+ step :celery do
113
113
  depends_on :shopping_list
114
114
  provides :shopping_list
115
- perform do shopping_list << "1 stalk of celery" end
115
+ execute do shopping_list << "1 stalk of celery" end
116
116
  end
117
117
 
118
- node :onions do
118
+ step :onions do
119
119
  depends_on :shopping_list
120
120
  provides :shopping_list
121
- perform do shopping_list << "3 yellow onions" end
121
+ execute do shopping_list << "3 yellow onions" end
122
122
  end
123
123
 
124
124
  self.result = :shopping_list
@@ -129,33 +129,33 @@ module OperationTest
129
129
 
130
130
  class IntrospectionTest < Minitest::Test
131
131
  def test_introspecting_dependencies
132
- node = Orchestra::Node::InlineNode.build do
132
+ step = Orchestra::Step::InlineStep.build do
133
133
  depends_on :foo, :bar => :baz
134
134
  provides :baz
135
- perform do :noop end
135
+ execute do :noop end
136
136
  end
137
137
 
138
- assert_equal [:foo, :bar], node.dependencies
138
+ assert_equal [:foo, :bar], step.dependencies
139
139
  end
140
140
 
141
141
  def test_introspecting_optional_dependencies
142
- node = Orchestra::Node::InlineNode.build do
142
+ step = Orchestra::Step::InlineStep.build do
143
143
  depends_on :foo, :bar => :baz
144
144
  provides :qux
145
- perform do :noop end
145
+ execute do :noop end
146
146
  end
147
147
 
148
- assert_equal [:bar], node.optional_dependencies
148
+ assert_equal [:bar], step.optional_dependencies
149
149
  end
150
150
 
151
151
  def test_introspecting_mandatory_dependencies
152
- node = Orchestra::Node::InlineNode.build do
152
+ step = Orchestra::Step::InlineStep.build do
153
153
  depends_on :foo, :bar => :baz
154
154
  provides :baz
155
- perform do :noop end
155
+ execute do :noop end
156
156
  end
157
157
 
158
- assert_equal [:foo], node.required_dependencies
158
+ assert_equal [:foo], step.required_dependencies
159
159
  end
160
160
 
161
161
  end
@@ -163,24 +163,24 @@ module OperationTest
163
163
  class EmbeddingOperationsTest < Minitest::Test
164
164
  def test_embedding_operations
165
165
  inner = Orchestra::Operation.new do
166
- node :double do
166
+ step :double do
167
167
  depends_on :number
168
168
  provides :doubled
169
- perform do number * 2 end
169
+ execute do number * 2 end
170
170
  end
171
171
 
172
172
  result :plus_one do
173
173
  depends_on :doubled
174
- perform do doubled + 1 end
174
+ execute do doubled + 1 end
175
175
  end
176
176
  end
177
177
 
178
178
  outer = Orchestra::Operation.new do
179
- node inner
179
+ step inner
180
180
 
181
181
  result :squared do
182
182
  depends_on :plus_one
183
- perform do plus_one ** 2 end
183
+ execute do plus_one ** 2 end
184
184
  end
185
185
  end
186
186
 
@@ -189,7 +189,7 @@ module OperationTest
189
189
  conductor = Orchestra::Conductor.new
190
190
  conductor.add_observer TelemetryRecorder.new telemetry
191
191
 
192
- result = conductor.perform outer, :number => 4
192
+ result = conductor.execute outer, :number => 4
193
193
 
194
194
  assert_equal 81, result
195
195
 
@@ -216,7 +216,7 @@ module OperationTest
216
216
  },
217
217
  },
218
218
  :output => 81,
219
- :performance_name => nil,
219
+ :operation_name => nil,
220
220
  :service_calls => [],
221
221
  }
222
222
  end
@@ -4,16 +4,16 @@ class RunListTest < Minitest::Test
4
4
 
5
5
  run_list = builder.build
6
6
 
7
- assert_equal %w(foo⇒bar bar⇒baz baz⇒qux qux⇒res), run_list.node_names
7
+ assert_equal %w(foo⇒bar bar⇒baz baz⇒qux qux⇒res), run_list.step_names
8
8
  assert_includes run_list.dependencies, :foo
9
9
  end
10
10
 
11
- def test_discards_unnecessary_nodes
11
+ def test_discards_unnecessary_steps
12
12
  builder['aba⇒cab'] = OpenStruct.new :required_dependencies => [:aba], :optional_dependencies => [], :provisions => [:cab]
13
13
 
14
14
  run_list = builder.build
15
15
 
16
- assert_equal %w(foo⇒bar bar⇒baz baz⇒qux qux⇒res), run_list.node_names
16
+ assert_equal %w(foo⇒bar bar⇒baz baz⇒qux qux⇒res), run_list.step_names
17
17
  end
18
18
 
19
19
  def test_supplying_dependencies
@@ -21,16 +21,16 @@ class RunListTest < Minitest::Test
21
21
 
22
22
  run_list = builder.build
23
23
 
24
- assert_equal %w(baz⇒qux qux⇒res), run_list.node_names
24
+ assert_equal %w(baz⇒qux qux⇒res), run_list.step_names
25
25
  refute_includes run_list.dependencies, :foo
26
26
  end
27
27
 
28
- def test_nodes_that_modify
29
- assemble_builder modifying_nodes
28
+ def test_steps_that_modify
29
+ assemble_builder modifying_steps
30
30
 
31
31
  run_list = builder.build
32
32
 
33
- assert_equal %w(foo bar baz), run_list.node_names
33
+ assert_equal %w(foo bar baz), run_list.step_names
34
34
  end
35
35
 
36
36
  def test_reorders_optional_deps_before_mandatory_deps_when_possible
@@ -38,7 +38,7 @@ class RunListTest < Minitest::Test
38
38
 
39
39
  run_list = builder.build
40
40
 
41
- assert_equal %w(baz+foo bar+baz foo+bar final), run_list.node_names
41
+ assert_equal %w(baz+foo bar+baz foo+bar final), run_list.step_names
42
42
  assert_equal [], run_list.required_dependencies
43
43
  assert_equal [:bar, :baz, :foo], run_list.optional_dependencies
44
44
  end
@@ -58,16 +58,16 @@ class RunListTest < Minitest::Test
58
58
 
59
59
  private
60
60
 
61
- def assemble_builder nodes = default_nodes
61
+ def assemble_builder steps = default_steps
62
62
  @builder ||= begin
63
63
  builder = Orchestra::RunList::Builder.new :res
64
- builder.merge! nodes
64
+ builder.merge! steps
65
65
  builder
66
66
  end
67
67
  end
68
68
  alias_method :builder, :assemble_builder
69
69
 
70
- def default_nodes
70
+ def default_steps
71
71
  {
72
72
  'foo⇒bar' => OpenStruct.new(:required_dependencies => [:foo], :provisions => [:bar], optional_dependencies: []),
73
73
  'bar⇒baz' => OpenStruct.new(:required_dependencies => [:bar], :provisions => [:baz], optional_dependencies: []),
@@ -76,7 +76,7 @@ class RunListTest < Minitest::Test
76
76
  }
77
77
  end
78
78
 
79
- def modifying_nodes
79
+ def modifying_steps
80
80
  {
81
81
  'foo' => OpenStruct.new(:required_dependencies => [:shared], :provisions => [:shared], optional_dependencies: []),
82
82
  'bar' => OpenStruct.new(:required_dependencies => [:shared], :provisions => [:shared], optional_dependencies: []),
@@ -0,0 +1,122 @@
1
+ class StepTest < Minitest::Test
2
+ def test_invoking_a_step
3
+ step = build_simple_step
4
+
5
+ assert_equal(
6
+ { :bar => 4 },
7
+ step.execute(:foo => 2, :bar => 2),
8
+ )
9
+ end
10
+
11
+ def test_providing_a_single_hash
12
+ step = Orchestra::Step::InlineStep.new(
13
+ :dependencies => [:foo],
14
+ :provides => [:bar],
15
+ :execute_block => lambda { { :bar => (foo * 2) } },
16
+ )
17
+
18
+ assert_equal(
19
+ { :bar => 4 },
20
+ step.execute(:foo => 2),
21
+ )
22
+ end
23
+
24
+ def test_providing_a_single_hash_that_is_not_the_output
25
+ step = Orchestra::Step::InlineStep.new(
26
+ :dependencies => [:foo],
27
+ :provides => [:bar],
28
+ :execute_block => lambda { { :baz => (foo * 2) } },
29
+ )
30
+
31
+ assert_equal(
32
+ { :bar => { :baz => 4 } },
33
+ step.execute(:foo => 2),
34
+ )
35
+ end
36
+
37
+ def test_invoking_a_collection_step
38
+ step = Orchestra::Step::InlineStep.new(
39
+ :dependencies => [:foo],
40
+ :provides => [:bar],
41
+ :execute_block => lambda { |e| e * 2 },
42
+ :collection => :foo,
43
+ )
44
+
45
+ assert_equal(
46
+ { :bar => [2, 4, 6, 8] },
47
+ step.execute(:foo => [1, 2, 3, 4]),
48
+ )
49
+ end
50
+
51
+ def test_defaulting
52
+ step = build_simple_step
53
+
54
+ assert_equal(
55
+ { :bar => 8 },
56
+ step.execute(:foo => 2),
57
+ )
58
+ end
59
+
60
+ def test_introspecting_dependencies
61
+ step = build_simple_step
62
+
63
+ assert_equal [:foo, :bar], step.dependencies
64
+ end
65
+
66
+ def test_introspecting_mandatory_dependencies
67
+ step = build_simple_step
68
+
69
+ assert_equal [:foo], step.required_dependencies
70
+ end
71
+
72
+ def test_step_fails_to_supply_provisions
73
+ step = Orchestra::Step::InlineStep.new(
74
+ :provides => [:foo, :bar, :baz],
75
+ :execute_block => lambda { nil },
76
+ )
77
+
78
+ error = assert_raises Orchestra::MissingProvisionError do step.execute end
79
+
80
+ assert_equal(
81
+ "failed to supply output: :foo, :bar and :baz",
82
+ error.message,
83
+ )
84
+ end
85
+
86
+ def test_cannot_return_nil
87
+ step = Orchestra::Step::InlineStep.new(
88
+ :provides => [:foo],
89
+ :execute_block => lambda do nil end
90
+ )
91
+
92
+ error = assert_raises Orchestra::MissingProvisionError do step.execute end
93
+
94
+ assert_equal(
95
+ "failed to supply output: :foo",
96
+ error.message,
97
+ )
98
+ end
99
+
100
+ def test_step_provides_extra_provisions
101
+ step = Orchestra::Step::InlineStep.new(
102
+ :provides => [:foo],
103
+ :execute_block => lambda do { :foo => :bar, :baz => :qux } end,
104
+ )
105
+
106
+ assert_equal(
107
+ { :foo => :bar },
108
+ step.execute,
109
+ )
110
+ end
111
+
112
+ private
113
+
114
+ def build_simple_step
115
+ Orchestra::Step::InlineStep.new(
116
+ :defaults => { :bar => lambda { 4 } },
117
+ :dependencies => [:foo, :bar],
118
+ :provides => [:bar],
119
+ :execute_block => lambda { foo * bar },
120
+ )
121
+ end
122
+ end
@@ -49,7 +49,7 @@ class ThreadPoolTest < Minitest::Test
49
49
 
50
50
  def test_performing_work
51
51
  @iterations.times do
52
- result = @thread_pool.perform do :deadbeef end
52
+ result = @thread_pool.execute do :deadbeef end
53
53
 
54
54
  assert_equal :deadbeef, result
55
55
  end
@@ -77,7 +77,7 @@ class ThreadPoolTest < Minitest::Test
77
77
  10.times do
78
78
  assert_raises NoMethodError do
79
79
  input.each do |num|
80
- @thread_pool.perform do num * 2 end
80
+ @thread_pool.execute do num * 2 end
81
81
  end
82
82
  end
83
83
  end