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.
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ntl-orchestra
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.2
4
+ version: 0.9.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - ntl
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2014-12-04 00:00:00 Z
12
+ date: 2015-01-08 00:00:00 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  requirement: &id001 !ruby/object:Gem::Requirement
@@ -18,8 +18,8 @@ dependencies:
18
18
  - ">="
19
19
  - !ruby/object:Gem::Version
20
20
  version: "0"
21
- prerelease: false
22
21
  name: invokr
22
+ prerelease: false
23
23
  version_requirements: *id001
24
24
  type: :runtime
25
25
  - !ruby/object:Gem::Dependency
@@ -28,16 +28,16 @@ dependencies:
28
28
  - - ~>
29
29
  - !ruby/object:Gem::Version
30
30
  version: "1.6"
31
- prerelease: false
32
31
  name: bundler
32
+ prerelease: false
33
33
  version_requirements: *id002
34
34
  type: :development
35
35
  - !ruby/object:Gem::Dependency
36
36
  requirement: &id004 !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - *id003
39
- prerelease: false
40
39
  name: pry
40
+ prerelease: false
41
41
  version_requirements: *id004
42
42
  type: :development
43
43
  - !ruby/object:Gem::Dependency
@@ -46,8 +46,8 @@ dependencies:
46
46
  - - ~>
47
47
  - !ruby/object:Gem::Version
48
48
  version: "10.0"
49
- prerelease: false
50
49
  name: rake
50
+ prerelease: false
51
51
  version_requirements: *id005
52
52
  type: :development
53
53
  description: Orchestra is an orchestration framework for designing complex operations in an object oriented fashion.
@@ -61,6 +61,7 @@ extra_rdoc_files: []
61
61
 
62
62
  files:
63
63
  - .gitignore
64
+ - .travis.yml
64
65
  - Gemfile
65
66
  - LICENSE.txt
66
67
  - README.md
@@ -70,16 +71,17 @@ files:
70
71
  - lib/orchestra.rb
71
72
  - lib/orchestra/conductor.rb
72
73
  - lib/orchestra/configuration.rb
73
- - lib/orchestra/dsl/nodes.rb
74
74
  - lib/orchestra/dsl/object_adapter.rb
75
75
  - lib/orchestra/dsl/operations.rb
76
+ - lib/orchestra/dsl/steps.rb
76
77
  - lib/orchestra/errors.rb
77
- - lib/orchestra/node.rb
78
- - lib/orchestra/node/output.rb
78
+ - lib/orchestra/execution.rb
79
79
  - lib/orchestra/operation.rb
80
- - lib/orchestra/performance.rb
81
80
  - lib/orchestra/recording.rb
81
+ - lib/orchestra/recording/playback.rb
82
82
  - lib/orchestra/run_list.rb
83
+ - lib/orchestra/step.rb
84
+ - lib/orchestra/step/output.rb
83
85
  - lib/orchestra/thread_pool.rb
84
86
  - lib/orchestra/util.rb
85
87
  - lib/orchestra/version.rb
@@ -95,10 +97,10 @@ files:
95
97
  - test/test_helper.rb
96
98
  - test/unit/conductor_test.rb
97
99
  - test/unit/dsl_test.rb
98
- - test/unit/node_test.rb
99
100
  - test/unit/object_adapter_test.rb
100
101
  - test/unit/operation_test.rb
101
102
  - test/unit/run_list_test.rb
103
+ - test/unit/step_test.rb
102
104
  - test/unit/thread_pool_test.rb
103
105
  - test/unit/util_test.rb
104
106
  - tmp/.keep
@@ -121,7 +123,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
121
123
  requirements: []
122
124
 
123
125
  rubyforge_project:
124
- rubygems_version: 2.2.2
126
+ rubygems_version: 2.4.2
125
127
  signing_key:
126
128
  specification_version: 4
127
129
  summary: Orchestrate complex operations with ease.
@@ -137,9 +139,9 @@ test_files:
137
139
  - test/test_helper.rb
138
140
  - test/unit/conductor_test.rb
139
141
  - test/unit/dsl_test.rb
140
- - test/unit/node_test.rb
141
142
  - test/unit/object_adapter_test.rb
142
143
  - test/unit/operation_test.rb
143
144
  - test/unit/run_list_test.rb
145
+ - test/unit/step_test.rb
144
146
  - test/unit/thread_pool_test.rb
145
147
  - test/unit/util_test.rb
@@ -1,137 +0,0 @@
1
- module Orchestra
2
- class Performance
3
- include Observable
4
- extend Forwardable
5
-
6
- def_delegators :@run_list, :node_names, :provisions, :dependencies,
7
- :optional_dependencies, :required_dependencies
8
-
9
- attr :conductor, :input, :state, :registry, :run_list
10
-
11
- def initialize conductor, run_list, input
12
- @conductor = conductor
13
- @input = input.dup
14
- @run_list = run_list
15
- @registry = conductor.build_registry self
16
- @state = registry.merge input
17
- end
18
-
19
- def perform
20
- ensure_inputs_are_present!
21
- run_list.each do |name, node| process name, node end
22
- rescue => error
23
- publish :error_raised, error
24
- raise error
25
- end
26
-
27
- def process name, node
28
- input = input_for node
29
- publish :node_entered, name, input
30
- output = perform_node node
31
- publish :node_exited, name, output
32
- state.merge! output
33
- end
34
-
35
- def perform_node node
36
- Movement.perform node, self
37
- end
38
-
39
- def ensure_inputs_are_present!
40
- has_dep = state.method :[]
41
- missing_input = required_dependencies.reject &has_dep
42
- raise MissingInputError.new missing_input unless missing_input.empty?
43
- end
44
-
45
- def input_for node
46
- state.reject do |key, val|
47
- registry[key] == val or not node.dependencies.include? key
48
- end
49
- end
50
-
51
- def extract_result result
52
- state.fetch result
53
- end
54
-
55
- def publish event, *payload
56
- changed
57
- notify_observers event, *payload
58
- end
59
-
60
- def thread_pool
61
- conductor.thread_pool
62
- end
63
-
64
- class Movement
65
- def self.perform node, *args
66
- if node.is_a? Operation
67
- klass = EmbeddedOperation
68
- else
69
- klass = node.collection ? CollectionMovement : self
70
- end
71
- instance = klass.new node, *args
72
- node.process instance.perform
73
- end
74
-
75
- attr :context, :node, :performance
76
-
77
- def initialize node, performance
78
- @node = node
79
- @performance = performance
80
- @context = build_context performance
81
- end
82
-
83
- def perform
84
- context.perform
85
- end
86
-
87
- def build_context performance
88
- node.build_context performance.state
89
- end
90
- end
91
-
92
- class CollectionMovement < Movement
93
- def perform
94
- batch, output = prepare_collection
95
- jobs = enqueue_jobs batch do |result, index| output[index] = result end
96
- jobs.each &:wait
97
- output
98
- end
99
-
100
- def enqueue_jobs batch, &block
101
- batch.map.with_index do |element, index|
102
- enqueue_job element, index, &block
103
- end
104
- end
105
-
106
- def enqueue_job element, index
107
- performance.thread_pool.enqueue do
108
- result = context.perform element
109
- yield [result, index]
110
- end
111
- end
112
-
113
- def prepare_collection
114
- batch = context.fetch_collection
115
- output = [nil] * batch.size
116
- [batch, output]
117
- end
118
- end
119
-
120
- class EmbeddedOperation < Movement
121
- def perform
122
- super
123
- context.state.select do |k,_| k == node.result end
124
- end
125
-
126
- def build_context performance
127
- conductor = performance.registry[:conductor]
128
- copy_observers = conductor.method :copy_observers
129
- node.start_performance conductor, input, &copy_observers
130
- end
131
-
132
- def input
133
- performance.state
134
- end
135
- end
136
- end
137
- end
@@ -1,122 +0,0 @@
1
- class NodeTest < Minitest::Test
2
- def test_performing_a_node
3
- node = build_simple_node
4
-
5
- assert_equal(
6
- { :bar => 4 },
7
- node.perform(:foo => 2, :bar => 2),
8
- )
9
- end
10
-
11
- def test_providing_a_single_hash
12
- node = Orchestra::Node::InlineNode.new(
13
- :dependencies => [:foo],
14
- :provides => [:bar],
15
- :perform_block => lambda { { :bar => (foo * 2) } },
16
- )
17
-
18
- assert_equal(
19
- { :bar => 4 },
20
- node.perform(:foo => 2),
21
- )
22
- end
23
-
24
- def test_providing_a_single_hash_that_is_not_the_output
25
- node = Orchestra::Node::InlineNode.new(
26
- :dependencies => [:foo],
27
- :provides => [:bar],
28
- :perform_block => lambda { { :baz => (foo * 2) } },
29
- )
30
-
31
- assert_equal(
32
- { :bar => { :baz => 4 } },
33
- node.perform(:foo => 2),
34
- )
35
- end
36
-
37
- def test_performing_a_collection_node
38
- node = Orchestra::Node::InlineNode.new(
39
- :dependencies => [:foo],
40
- :provides => [:bar],
41
- :perform_block => lambda { |e| e * 2 },
42
- :collection => :foo,
43
- )
44
-
45
- assert_equal(
46
- { :bar => [2, 4, 6, 8] },
47
- node.perform(:foo => [1, 2, 3, 4]),
48
- )
49
- end
50
-
51
- def test_defaulting
52
- node = build_simple_node
53
-
54
- assert_equal(
55
- { :bar => 8 },
56
- node.perform(:foo => 2),
57
- )
58
- end
59
-
60
- def test_introspecting_dependencies
61
- node = build_simple_node
62
-
63
- assert_equal [:foo, :bar], node.dependencies
64
- end
65
-
66
- def test_introspecting_mandatory_dependencies
67
- node = build_simple_node
68
-
69
- assert_equal [:foo], node.required_dependencies
70
- end
71
-
72
- def test_node_fails_to_supply_provisions
73
- node = Orchestra::Node::InlineNode.new(
74
- :provides => [:foo, :bar, :baz],
75
- :perform_block => lambda { nil },
76
- )
77
-
78
- error = assert_raises Orchestra::MissingProvisionError do node.perform 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
- node = Orchestra::Node::InlineNode.new(
88
- :provides => [:foo],
89
- :perform_block => lambda do nil end
90
- )
91
-
92
- error = assert_raises Orchestra::MissingProvisionError do node.perform end
93
-
94
- assert_equal(
95
- "failed to supply output: :foo",
96
- error.message,
97
- )
98
- end
99
-
100
- def test_node_provides_extra_provisions
101
- node = Orchestra::Node::InlineNode.new(
102
- :provides => [:foo],
103
- :perform_block => lambda do { :foo => :bar, :baz => :qux } end,
104
- )
105
-
106
- assert_equal(
107
- { :foo => :bar },
108
- node.perform,
109
- )
110
- end
111
-
112
- private
113
-
114
- def build_simple_node
115
- Orchestra::Node::InlineNode.new(
116
- :defaults => { :bar => lambda { 4 } },
117
- :dependencies => [:foo, :bar],
118
- :provides => [:bar],
119
- :perform_block => lambda { foo * bar },
120
- )
121
- end
122
- end