ntl-orchestra 0.9.3 → 0.9.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -7
- data/README.md +8 -8
- data/lib/orchestra/dsl/object_adapter.rb +8 -0
- data/lib/orchestra/dsl/operations.rb +5 -4
- data/lib/orchestra/execution.rb +25 -13
- data/lib/orchestra/node.rb +52 -0
- data/lib/orchestra/operation.rb +7 -11
- data/lib/orchestra/run_list.rb +5 -2
- data/lib/orchestra/version.rb +1 -1
- data/test/support/telemetry_recorder.rb +7 -7
- data/test/unit/node_test.rb +10 -0
- data/test/unit/object_adapter_test.rb +28 -8
- metadata +77 -59
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
|
-
---
|
2
|
-
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
5
|
-
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: e96984bfe46ae0b8f9769e7d2a63fcfc2d3efc04
|
4
|
+
data.tar.gz: 35665deb648f6be6360f566d4d504b7e609e28d0
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 9af68198925832621e1a08a4fb34c2da7881a44aab59f350485c2a4e6845ecdbd2631e089315e392bf5047453ae67a20eaf07bdf5ce3535bf148c4445cfaf646
|
7
|
+
data.tar.gz: 99e4ed20368788e954eab33f8bd79ddc7c329cf0fec6ef13fc7fec550fe06b78df1b9362c7f7d5093d21a2b0422bd6c139d49b72a435b871798ca5a000db5f6a
|
data/README.md
CHANGED
@@ -466,14 +466,14 @@ end
|
|
466
466
|
|
467
467
|
The arguments passed to `update` will vary based on the event:
|
468
468
|
|
469
|
-
| Event | First argument
|
470
|
-
| ------------------------ |
|
471
|
-
| `:operation_entered` | The
|
472
|
-
| `:operation_exited` | The
|
473
|
-
| `:step_entered` | The
|
474
|
-
| `:step_exited` | The
|
475
|
-
| `:error_raised` | The error itself
|
476
|
-
| `:service_accessed` | The name of the service
|
469
|
+
| Event | First argument | Second argument |
|
470
|
+
| ------------------------ | ----------------------- | --------------------------------- |
|
471
|
+
| `:operation_entered` | The Operation starting | Input going into the operation |
|
472
|
+
| `:operation_exited` | The Operation finishing | Output of the operation |
|
473
|
+
| `:step_entered` | The Step | Input going into the step |
|
474
|
+
| `:step_exited` | The Step | Output of the step |
|
475
|
+
| `:error_raised` | The error itself | `nil` |
|
476
|
+
| `:service_accessed` | The name of the service | Recording of the service call |
|
477
477
|
|
478
478
|
All observers attached to the execution of the outer operation will also attach to the inner operation.
|
479
479
|
|
@@ -42,6 +42,14 @@ module Orchestra
|
|
42
42
|
def dependencies
|
43
43
|
[collection, *object_method.dependencies].compact
|
44
44
|
end
|
45
|
+
|
46
|
+
def name
|
47
|
+
if method_name == :execute
|
48
|
+
object.name
|
49
|
+
else
|
50
|
+
"#{object.name}##{method_name}"
|
51
|
+
end
|
52
|
+
end
|
45
53
|
end
|
46
54
|
|
47
55
|
class SingletonAdapter < ObjectAdapter
|
@@ -57,15 +57,15 @@ module Orchestra
|
|
57
57
|
end
|
58
58
|
|
59
59
|
def build_object_step object, args
|
60
|
-
name = object_name object
|
61
60
|
step = ObjectAdapter.build_step object, args
|
61
|
+
name = object_name step.adapter
|
62
62
|
[name, step]
|
63
63
|
end
|
64
64
|
|
65
65
|
private
|
66
66
|
|
67
67
|
def object_name object
|
68
|
-
object.name and Util.to_snake_case
|
68
|
+
object.name and Util.to_snake_case object.name
|
69
69
|
end
|
70
70
|
end
|
71
71
|
|
@@ -91,8 +91,9 @@ module Orchestra
|
|
91
91
|
nil
|
92
92
|
end
|
93
93
|
|
94
|
-
def result
|
95
|
-
|
94
|
+
def result *args, &block
|
95
|
+
args << nil if args.empty?
|
96
|
+
step = @builder.add_step *args, &block
|
96
97
|
name ||= step.provisions.fetch 0
|
97
98
|
self.result = name
|
98
99
|
end
|
data/lib/orchestra/execution.rb
CHANGED
@@ -2,13 +2,16 @@ module Orchestra
|
|
2
2
|
module Execution
|
3
3
|
extend self
|
4
4
|
|
5
|
-
def
|
6
|
-
|
5
|
+
def build operation, conductor, input = {}
|
6
|
+
run_list = RunList.build operation.steps, operation.result, input.keys
|
7
|
+
node = Node.new run_list, operation.name, input
|
8
|
+
Operation.new conductor, run_list, input, node
|
7
9
|
end
|
8
10
|
|
9
11
|
def execute_step step, input
|
10
|
-
|
11
|
-
|
12
|
+
node = Node.new step, 'anonymous', input
|
13
|
+
operation_execution = Operation.new Conductor.new, {}, input, node
|
14
|
+
Step.execute step, node.name, operation_execution
|
12
15
|
end
|
13
16
|
|
14
17
|
class Operation
|
@@ -18,24 +21,32 @@ module Orchestra
|
|
18
21
|
def_delegators :@run_list, :provisions, :dependencies,
|
19
22
|
:optional_dependencies, :required_dependencies
|
20
23
|
|
21
|
-
attr :conductor, :input, :
|
24
|
+
attr :conductor, :input, :node, :registry, :run_list, :state
|
22
25
|
|
23
|
-
def initialize conductor, run_list, input
|
26
|
+
def initialize conductor, run_list, input, node
|
24
27
|
@conductor = conductor
|
25
28
|
@input = input.dup
|
29
|
+
@node = node
|
26
30
|
@run_list = run_list
|
27
31
|
@registry = conductor.build_registry self
|
28
32
|
@state = registry.merge input
|
29
33
|
end
|
30
34
|
|
31
35
|
def execute
|
36
|
+
publish :operation_entered, node, node.input if node
|
32
37
|
ensure_inputs_are_present!
|
33
38
|
run_list.each do |name, step| process name, step end
|
39
|
+
publish :operation_exited, node, output if node
|
40
|
+
output
|
34
41
|
rescue => error
|
35
42
|
publish :error_raised, error
|
36
43
|
raise error
|
37
44
|
end
|
38
45
|
|
46
|
+
def output
|
47
|
+
state.fetch run_list.result
|
48
|
+
end
|
49
|
+
|
39
50
|
def process name, step
|
40
51
|
output = Step.execute step, name, self
|
41
52
|
state.merge! output
|
@@ -47,10 +58,6 @@ module Orchestra
|
|
47
58
|
raise MissingInputError.new missing_input unless missing_input.empty?
|
48
59
|
end
|
49
60
|
|
50
|
-
def extract_result result
|
51
|
-
state.fetch result
|
52
|
-
end
|
53
|
-
|
54
61
|
def publish event, *payload
|
55
62
|
changed
|
56
63
|
notify_observers event, *payload
|
@@ -78,7 +85,7 @@ module Orchestra
|
|
78
85
|
instance
|
79
86
|
end
|
80
87
|
|
81
|
-
attr :context, :name, :operation_execution, :step
|
88
|
+
attr :context, :name, :node, :operation_execution, :step
|
82
89
|
|
83
90
|
def initialize step, name, operation_execution
|
84
91
|
@name = name
|
@@ -88,9 +95,10 @@ module Orchestra
|
|
88
95
|
end
|
89
96
|
|
90
97
|
def execute
|
91
|
-
|
98
|
+
@node = Node.new step, name, input
|
99
|
+
operation_execution.publish :step_entered, node, node.input
|
92
100
|
output = step.process invoke
|
93
|
-
operation_execution.publish :step_exited,
|
101
|
+
operation_execution.publish :step_exited, node, output
|
94
102
|
output
|
95
103
|
end
|
96
104
|
|
@@ -108,6 +116,10 @@ module Orchestra
|
|
108
116
|
def build_context
|
109
117
|
step.build_context operation_execution.state
|
110
118
|
end
|
119
|
+
|
120
|
+
def to_node
|
121
|
+
Node.new step, name
|
122
|
+
end
|
111
123
|
end
|
112
124
|
|
113
125
|
class CollectionStep < Step
|
@@ -0,0 +1,52 @@
|
|
1
|
+
module Orchestra
|
2
|
+
# Reader object to expose operations and steps to the outside world
|
3
|
+
class Node
|
4
|
+
attr :input, :name
|
5
|
+
|
6
|
+
extend Forwardable
|
7
|
+
|
8
|
+
def_delegators :@node, :provisions, :dependencies, :optional_dependencies,
|
9
|
+
:required_dependencies
|
10
|
+
|
11
|
+
def initialize step_or_operation, name, input
|
12
|
+
@name = name
|
13
|
+
@node = step_or_operation
|
14
|
+
@input = format_input input
|
15
|
+
freeze
|
16
|
+
end
|
17
|
+
|
18
|
+
def to_h
|
19
|
+
{
|
20
|
+
dependencies: dependencies,
|
21
|
+
input: input,
|
22
|
+
name: name,
|
23
|
+
optional_dependencies: optional_dependencies,
|
24
|
+
provisions: provisions,
|
25
|
+
required_dependencies: required_dependencies,
|
26
|
+
}
|
27
|
+
end
|
28
|
+
|
29
|
+
def inspect
|
30
|
+
params = to_h.each_with_object [] do |(key, val), list|
|
31
|
+
list << "#{key}=#{val.inspect}"
|
32
|
+
end
|
33
|
+
"#<Orchestra::Node #{params.join ', '}>"
|
34
|
+
end
|
35
|
+
|
36
|
+
def operation?
|
37
|
+
@node.is_a? Operation
|
38
|
+
end
|
39
|
+
|
40
|
+
def step?
|
41
|
+
not operation?
|
42
|
+
end
|
43
|
+
|
44
|
+
private
|
45
|
+
|
46
|
+
def format_input input
|
47
|
+
@node.dependencies.each_with_object Hash.new do |dep, hsh|
|
48
|
+
hsh[dep] = input[dep] if input.has_key? dep
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
data/lib/orchestra/operation.rb
CHANGED
@@ -27,23 +27,19 @@ module Orchestra
|
|
27
27
|
output.select do |key, _| key = result end
|
28
28
|
end
|
29
29
|
|
30
|
+
def execute *args, &block
|
31
|
+
execution = start_execution *args, &block
|
32
|
+
output = execution.execute
|
33
|
+
@command ? nil : output
|
34
|
+
end
|
35
|
+
|
30
36
|
def start_execution *args
|
31
37
|
conductor, input = extract_args args
|
32
|
-
|
33
|
-
execution = Execution.start_operation conductor, run_list, input
|
38
|
+
execution = Execution.build self, conductor, input
|
34
39
|
yield execution if block_given?
|
35
|
-
execution.publish :operation_entered, name, input
|
36
40
|
execution
|
37
41
|
end
|
38
42
|
|
39
|
-
def execute *args, &block
|
40
|
-
execution = start_execution *args, &block
|
41
|
-
execution.execute
|
42
|
-
output = execution.extract_result result
|
43
|
-
execution.publish :operation_exited, name, output
|
44
|
-
@command ? nil : output
|
45
|
-
end
|
46
|
-
|
47
43
|
def command?
|
48
44
|
@command ? true : false
|
49
45
|
end
|
data/lib/orchestra/run_list.rb
CHANGED
@@ -6,9 +6,12 @@ module Orchestra
|
|
6
6
|
builder.build
|
7
7
|
end
|
8
8
|
|
9
|
+
attr :result
|
10
|
+
|
9
11
|
include Enumerable
|
10
12
|
|
11
|
-
def initialize steps
|
13
|
+
def initialize steps, result
|
14
|
+
@result = result
|
12
15
|
@steps = steps
|
13
16
|
@steps.freeze
|
14
17
|
freeze
|
@@ -84,7 +87,7 @@ module Orchestra
|
|
84
87
|
def build
|
85
88
|
sort!
|
86
89
|
prune!
|
87
|
-
RunList.new @steps_hash
|
90
|
+
RunList.new @steps_hash, @result
|
88
91
|
end
|
89
92
|
|
90
93
|
def sort!
|
data/lib/orchestra/version.rb
CHANGED
@@ -14,29 +14,29 @@ class TelemetryRecorder
|
|
14
14
|
@embedded
|
15
15
|
end
|
16
16
|
|
17
|
-
def handle_operation_entered
|
17
|
+
def handle_operation_entered operation, input
|
18
18
|
return if embedded?
|
19
19
|
@steps = Hash.new do |hsh, key| hsh[key] = {} end
|
20
20
|
@store.update(
|
21
21
|
:input => input,
|
22
22
|
:movements => @steps,
|
23
|
-
:operation_name =>
|
23
|
+
:operation_name => operation.name,
|
24
24
|
:service_calls => [],
|
25
25
|
)
|
26
26
|
@embedded = true
|
27
27
|
end
|
28
28
|
|
29
|
-
def handle_operation_exited
|
29
|
+
def handle_operation_exited operation, output
|
30
30
|
@store[:output] = output
|
31
31
|
@embedded = false
|
32
32
|
end
|
33
33
|
|
34
|
-
def handle_step_entered
|
35
|
-
@steps[name][:input] = input
|
34
|
+
def handle_step_entered step, input
|
35
|
+
@steps[step.name][:input] = input
|
36
36
|
end
|
37
37
|
|
38
|
-
def handle_step_exited
|
39
|
-
@steps[name][:output] = output
|
38
|
+
def handle_step_exited step, output
|
39
|
+
@steps[step.name][:output] = output
|
40
40
|
end
|
41
41
|
|
42
42
|
def handle_error_raised error
|
@@ -0,0 +1,10 @@
|
|
1
|
+
class NodeTest < Minitest::Test
|
2
|
+
def test_inspect
|
3
|
+
node = Orchestra::Node.new Examples::FizzBuzz, "Examples::FizzBuzz", {}
|
4
|
+
|
5
|
+
assert_equal(
|
6
|
+
"#<Orchestra::Node dependencies=[:array, :fizzbuzz, :io, :up_to], input={}, name=\"Examples::FizzBuzz\", optional_dependencies=[], provisions=[:array, :fizzbuzz, :print], required_dependencies=[:io, :up_to]>",
|
7
|
+
node.inspect,
|
8
|
+
)
|
9
|
+
end
|
10
|
+
end
|
@@ -27,13 +27,7 @@ class ObjectAdapterTest < Minitest::Test
|
|
27
27
|
end
|
28
28
|
|
29
29
|
def test_executing_an_operation_with_integrated_objects
|
30
|
-
operation =
|
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
|
-
self.result = :joiner
|
36
|
-
end
|
30
|
+
operation = integrated_objects_operation
|
37
31
|
|
38
32
|
result = Orchestra.execute(
|
39
33
|
operation,
|
@@ -60,10 +54,36 @@ class ObjectAdapterTest < Minitest::Test
|
|
60
54
|
)
|
61
55
|
end
|
62
56
|
|
57
|
+
def test_name_includes_method_when_not_using_execute
|
58
|
+
assert_equal(
|
59
|
+
%i(
|
60
|
+
object_adapter_test/splitter
|
61
|
+
object_adapter_test/upcaser#call
|
62
|
+
object_adapter_test/bolder#call
|
63
|
+
object_adapter_test/joiner#join
|
64
|
+
),
|
65
|
+
integrated_objects_operation.steps.keys,
|
66
|
+
)
|
67
|
+
end
|
68
|
+
|
69
|
+
private
|
70
|
+
|
71
|
+
def integrated_objects_operation
|
72
|
+
Orchestra::Operation.new do
|
73
|
+
step Splitter, :provides => :words
|
74
|
+
step Upcaser, :iterates_over => :words, :provides => :upcased_words, :method => :call
|
75
|
+
step Bolder, :iterates_over => :upcased_words, :provides => :bolded_words, :method => :call
|
76
|
+
result Joiner, :method => :join
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
63
80
|
module Splitter
|
64
|
-
|
81
|
+
extend self
|
82
|
+
|
83
|
+
def execute sentence
|
65
84
|
sentence.split %r{[[:space:]]+}
|
66
85
|
end
|
86
|
+
alias_method :call, :execute
|
67
87
|
end
|
68
88
|
|
69
89
|
class Upcaser
|
metadata
CHANGED
@@ -1,67 +1,81 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: ntl-orchestra
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.9.
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.9.4
|
5
5
|
platform: ruby
|
6
|
-
authors:
|
6
|
+
authors:
|
7
7
|
- ntl
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
- !ruby/object:Gem::Dependency
|
15
|
-
requirement: &id001 !ruby/object:Gem::Requirement
|
16
|
-
requirements:
|
17
|
-
- &id003
|
18
|
-
- ">="
|
19
|
-
- !ruby/object:Gem::Version
|
20
|
-
version: "0"
|
11
|
+
date: 2015-01-09 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
21
14
|
name: invokr
|
22
|
-
|
23
|
-
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
24
20
|
type: :runtime
|
25
|
-
- !ruby/object:Gem::Dependency
|
26
|
-
requirement: &id002 !ruby/object:Gem::Requirement
|
27
|
-
requirements:
|
28
|
-
- - ~>
|
29
|
-
- !ruby/object:Gem::Version
|
30
|
-
version: "1.6"
|
31
|
-
name: bundler
|
32
21
|
prerelease: false
|
33
|
-
version_requirements:
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: bundler
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '1.6'
|
34
34
|
type: :development
|
35
|
-
- !ruby/object:Gem::Dependency
|
36
|
-
requirement: &id004 !ruby/object:Gem::Requirement
|
37
|
-
requirements:
|
38
|
-
- *id003
|
39
|
-
name: pry
|
40
35
|
prerelease: false
|
41
|
-
version_requirements:
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '1.6'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: pry
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
42
48
|
type: :development
|
43
|
-
- !ruby/object:Gem::Dependency
|
44
|
-
requirement: &id005 !ruby/object:Gem::Requirement
|
45
|
-
requirements:
|
46
|
-
- - ~>
|
47
|
-
- !ruby/object:Gem::Version
|
48
|
-
version: "10.0"
|
49
|
-
name: rake
|
50
49
|
prerelease: false
|
51
|
-
version_requirements:
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rake
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '10.0'
|
52
62
|
type: :development
|
53
|
-
|
54
|
-
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '10.0'
|
69
|
+
description: Orchestra is an orchestration framework for designing complex operations
|
70
|
+
in an object oriented fashion.
|
71
|
+
email:
|
55
72
|
- nathanladd+github@gmail.com
|
56
73
|
executables: []
|
57
|
-
|
58
74
|
extensions: []
|
59
|
-
|
60
75
|
extra_rdoc_files: []
|
61
|
-
|
62
|
-
|
63
|
-
- .
|
64
|
-
- .travis.yml
|
76
|
+
files:
|
77
|
+
- ".gitignore"
|
78
|
+
- ".travis.yml"
|
65
79
|
- Gemfile
|
66
80
|
- LICENSE.txt
|
67
81
|
- README.md
|
@@ -76,6 +90,7 @@ files:
|
|
76
90
|
- lib/orchestra/dsl/steps.rb
|
77
91
|
- lib/orchestra/errors.rb
|
78
92
|
- lib/orchestra/execution.rb
|
93
|
+
- lib/orchestra/node.rb
|
79
94
|
- lib/orchestra/operation.rb
|
80
95
|
- lib/orchestra/recording.rb
|
81
96
|
- lib/orchestra/recording/playback.rb
|
@@ -97,6 +112,7 @@ files:
|
|
97
112
|
- test/test_helper.rb
|
98
113
|
- test/unit/conductor_test.rb
|
99
114
|
- test/unit/dsl_test.rb
|
115
|
+
- test/unit/node_test.rb
|
100
116
|
- test/unit/object_adapter_test.rb
|
101
117
|
- test/unit/operation_test.rb
|
102
118
|
- test/unit/run_list_test.rb
|
@@ -105,29 +121,30 @@ files:
|
|
105
121
|
- test/unit/util_test.rb
|
106
122
|
- tmp/.keep
|
107
123
|
homepage: https://github.com/ntl/orchestra
|
108
|
-
licenses:
|
124
|
+
licenses:
|
109
125
|
- MIT
|
110
126
|
metadata: {}
|
111
|
-
|
112
127
|
post_install_message:
|
113
128
|
rdoc_options: []
|
114
|
-
|
115
|
-
require_paths:
|
129
|
+
require_paths:
|
116
130
|
- lib
|
117
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
118
|
-
requirements:
|
119
|
-
-
|
120
|
-
|
121
|
-
|
122
|
-
|
131
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
132
|
+
requirements:
|
133
|
+
- - ">="
|
134
|
+
- !ruby/object:Gem::Version
|
135
|
+
version: '0'
|
136
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
137
|
+
requirements:
|
138
|
+
- - ">="
|
139
|
+
- !ruby/object:Gem::Version
|
140
|
+
version: '0'
|
123
141
|
requirements: []
|
124
|
-
|
125
142
|
rubyforge_project:
|
126
|
-
rubygems_version: 2.4.
|
143
|
+
rubygems_version: 2.4.5
|
127
144
|
signing_key:
|
128
145
|
specification_version: 4
|
129
146
|
summary: Orchestrate complex operations with ease.
|
130
|
-
test_files:
|
147
|
+
test_files:
|
131
148
|
- test/examples/fizz_buzz.rb
|
132
149
|
- test/examples/invitation_service.rb
|
133
150
|
- test/integration/multithreading_test.rb
|
@@ -139,6 +156,7 @@ test_files:
|
|
139
156
|
- test/test_helper.rb
|
140
157
|
- test/unit/conductor_test.rb
|
141
158
|
- test/unit/dsl_test.rb
|
159
|
+
- test/unit/node_test.rb
|
142
160
|
- test/unit/object_adapter_test.rb
|
143
161
|
- test/unit/operation_test.rb
|
144
162
|
- test/unit/run_list_test.rb
|