producer-core 0.2.14 → 0.2.15
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.
- checksums.yaml +4 -4
- data/lib/producer/core/cli.rb +7 -11
- data/lib/producer/core/version.rb +1 -1
- data/spec/fixtures/recipes/raise.rb +1 -0
- data/spec/producer/core/cli_spec.rb +28 -98
- metadata +3 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 875191e45bda2ff4554cafda7ebce7eca67887c6
|
4
|
+
data.tar.gz: fc971de1aedd2cef0d0187ab41e870091b507978
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e0d7b779cceb0281e01ea51fdabbf7da0e1a13a1c4d1016dfd321c5aedc63031e82d3195ae546c36a540f823c08682121e9eb4a33602d1f59229b52173f4045c
|
7
|
+
data.tar.gz: 7cfe40e211ec6dac6c0bf0d67b8f28fab98b8b600bcad20b62b319ba054ee7a0fb688d276c09d015d22856907510e21c0660a1dc64d7616fde1dd4dcee52dc05
|
data/lib/producer/core/cli.rb
CHANGED
@@ -25,7 +25,7 @@ module Producer
|
|
25
25
|
end
|
26
26
|
end
|
27
27
|
|
28
|
-
attr_reader :arguments, :
|
28
|
+
attr_reader :arguments, :env
|
29
29
|
|
30
30
|
def initialize(args, stdin: $stdin, stdout: $stdout, stderr: $stderr)
|
31
31
|
@arguments = args
|
@@ -49,20 +49,16 @@ module Producer
|
|
49
49
|
m
|
50
50
|
end
|
51
51
|
|
52
|
-
fail ArgumentError unless arguments.any?
|
52
|
+
fail ArgumentError unless @arguments.any?
|
53
53
|
end
|
54
54
|
|
55
|
-
def run
|
56
|
-
worker.process
|
57
|
-
env.cleanup
|
55
|
+
def run(worker: Worker.new(@env))
|
56
|
+
worker.process recipe.tasks
|
57
|
+
@env.cleanup
|
58
58
|
end
|
59
59
|
|
60
|
-
def
|
61
|
-
Recipe.evaluate_from_file(@arguments.first, env)
|
62
|
-
end
|
63
|
-
|
64
|
-
def worker
|
65
|
-
Worker.new(env)
|
60
|
+
def recipe
|
61
|
+
@recipe ||= Recipe.evaluate_from_file(@arguments.first, env)
|
66
62
|
end
|
67
63
|
end
|
68
64
|
end
|
@@ -0,0 +1 @@
|
|
1
|
+
fail Producer::Core::RemoteCommandExecutionError, 'false'
|
@@ -8,108 +8,53 @@ module Producer::Core
|
|
8
8
|
let(:recipe_file) { fixture_path_for 'recipes/some_recipe.rb' }
|
9
9
|
let(:options) { [] }
|
10
10
|
let(:arguments) { [*options, recipe_file] }
|
11
|
-
let(:stdin) { StringIO.new}
|
12
|
-
let(:stdout) { StringIO.new }
|
13
|
-
let(:stderr) { StringIO.new }
|
14
11
|
|
15
|
-
subject(:cli) { described_class.new(
|
16
|
-
arguments,
|
17
|
-
stdin: stdin, stdout: stdout, stderr: stderr) }
|
12
|
+
subject(:cli) { described_class.new(arguments) }
|
18
13
|
|
19
14
|
describe '.run!' do
|
20
|
-
let(:
|
15
|
+
let(:stderr) { StringIO.new }
|
16
|
+
subject(:run!) { described_class.run! arguments, stderr: stderr }
|
21
17
|
|
22
|
-
|
23
|
-
|
24
|
-
stdin: stdin,
|
25
|
-
stdout: stdout,
|
26
|
-
stderr: stderr
|
27
|
-
end
|
28
|
-
|
29
|
-
before { allow(described_class).to receive(:new) { cli } }
|
30
|
-
|
31
|
-
it 'builds a new CLI with given arguments and streams' do
|
32
|
-
expect(described_class).to receive(:new).with(arguments,
|
33
|
-
stdin: stdin,
|
34
|
-
stdout: stdout,
|
35
|
-
stderr: stderr
|
36
|
-
)
|
37
|
-
run
|
38
|
-
end
|
39
|
-
|
40
|
-
it 'runs the CLI' do
|
41
|
-
expect(cli).to receive :run
|
42
|
-
run
|
43
|
-
end
|
44
|
-
|
45
|
-
it 'parses CLI arguments' do
|
46
|
-
expect(cli).to receive :parse_arguments!
|
47
|
-
run
|
48
|
-
end
|
49
|
-
|
50
|
-
context 'when an argument error is raised' do
|
51
|
-
before do
|
52
|
-
allow(cli).to receive(:parse_arguments!)
|
53
|
-
.and_raise described_class::ArgumentError
|
54
|
-
end
|
18
|
+
context 'when given arguments are invalid' do
|
19
|
+
let(:arguments) { [] }
|
55
20
|
|
56
21
|
it 'exits with a return status of 64' do
|
57
|
-
expect { run }.to raise_error(SystemExit) do |e|
|
22
|
+
expect { run! }.to raise_error(SystemExit) do |e|
|
58
23
|
expect(e.status).to eq 64
|
59
24
|
end
|
60
25
|
end
|
61
26
|
|
62
27
|
it 'prints the usage on the error stream' do
|
63
|
-
trap_exit { run }
|
28
|
+
trap_exit { run! }
|
64
29
|
expect(stderr.string).to match /\AUsage: .+/
|
65
30
|
end
|
66
31
|
end
|
67
32
|
|
68
33
|
context 'when a runtime error is raised' do
|
69
|
-
|
70
|
-
allow(cli).to receive(:run)
|
71
|
-
.and_raise RuntimeError, 'some message'
|
72
|
-
end
|
34
|
+
let(:recipe_file) { fixture_path_for 'recipes/raise.rb' }
|
73
35
|
|
74
36
|
it 'exits with a return status of 70' do
|
75
|
-
expect { run }.to raise_error(SystemExit) do |e|
|
37
|
+
expect { run! }.to raise_error(SystemExit) do |e|
|
76
38
|
expect(e.status).to eq 70
|
77
39
|
end
|
78
40
|
end
|
79
41
|
|
80
42
|
it 'prints exception name and message and the error stream' do
|
81
|
-
trap_exit { run }
|
82
|
-
expect(stderr.string).to
|
43
|
+
trap_exit { run! }
|
44
|
+
expect(stderr.string).to eq "RemoteCommandExecutionError: false\n"
|
83
45
|
end
|
84
46
|
end
|
85
47
|
end
|
86
48
|
|
87
|
-
describe '#
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
expect(cli.stdin).to be $stdin
|
92
|
-
end
|
93
|
-
|
94
|
-
it 'assigns $stdout as the default standard output' do
|
95
|
-
expect(cli.stdout).to be $stdout
|
96
|
-
end
|
97
|
-
end
|
98
|
-
|
99
|
-
describe '#arguments' do
|
100
|
-
it 'returns the assigned arguments' do
|
101
|
-
expect(cli.arguments).to eq arguments
|
102
|
-
end
|
103
|
-
end
|
49
|
+
describe '#env' do
|
50
|
+
let(:stdin) { StringIO.new }
|
51
|
+
let(:stdout) { StringIO.new }
|
52
|
+
let(:stderr) { StringIO.new }
|
104
53
|
|
105
|
-
|
106
|
-
|
107
|
-
expect(cli.stdout).to be stdout
|
108
|
-
end
|
109
|
-
end
|
54
|
+
subject(:cli) { described_class.new(arguments,
|
55
|
+
stdin: stdin, stdout: stdout, stderr: stderr) }
|
110
56
|
|
111
|
-
|
112
|
-
it 'returns the assigned env' do
|
57
|
+
it 'returns an env' do
|
113
58
|
expect(cli.env).to be_an Env
|
114
59
|
end
|
115
60
|
|
@@ -171,12 +116,10 @@ module Producer::Core
|
|
171
116
|
end
|
172
117
|
|
173
118
|
describe '#run' do
|
174
|
-
it '
|
175
|
-
worker =
|
176
|
-
|
177
|
-
expect(worker).to
|
178
|
-
.with([an_instance_of(Task), an_instance_of(Task)])
|
179
|
-
cli.run
|
119
|
+
it 'processes recipe tasks with a worker' do
|
120
|
+
worker = instance_spy Worker
|
121
|
+
cli.run worker: worker
|
122
|
+
expect(worker).to have_received(:process).with cli.recipe.tasks
|
180
123
|
end
|
181
124
|
|
182
125
|
it 'cleans up the env' do
|
@@ -185,25 +128,12 @@ module Producer::Core
|
|
185
128
|
end
|
186
129
|
end
|
187
130
|
|
188
|
-
describe '#
|
189
|
-
it '
|
190
|
-
expect(
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
it 'returns the recipe' do
|
196
|
-
expect(cli.load_recipe).to be_a Recipe
|
197
|
-
end
|
198
|
-
end
|
199
|
-
|
200
|
-
describe '#worker' do
|
201
|
-
it 'returns a worker' do
|
202
|
-
expect(cli.worker).to be_a Worker
|
203
|
-
end
|
204
|
-
|
205
|
-
it 'assigns the CLI env' do
|
206
|
-
expect(cli.worker.env).to eq cli.env
|
131
|
+
describe '#recipe' do
|
132
|
+
it 'returns the evaluated recipe' do
|
133
|
+
expect(cli.recipe.tasks).to match [
|
134
|
+
an_object_having_attributes(name: :some_task),
|
135
|
+
an_object_having_attributes(name: :another_task)
|
136
|
+
]
|
207
137
|
end
|
208
138
|
end
|
209
139
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: producer-core
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.15
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Thibault Jouan
|
@@ -195,6 +195,7 @@ files:
|
|
195
195
|
- lib/producer/core/worker.rb
|
196
196
|
- producer-core.gemspec
|
197
197
|
- spec/fixtures/recipes/empty.rb
|
198
|
+
- spec/fixtures/recipes/raise.rb
|
198
199
|
- spec/fixtures/recipes/some_recipe.rb
|
199
200
|
- spec/fixtures/recipes/throw.rb
|
200
201
|
- spec/producer/core/action_spec.rb
|
@@ -296,6 +297,7 @@ test_files:
|
|
296
297
|
- features/test_negated_test.feature
|
297
298
|
- features/test_shell_command_status.feature
|
298
299
|
- spec/fixtures/recipes/empty.rb
|
300
|
+
- spec/fixtures/recipes/raise.rb
|
299
301
|
- spec/fixtures/recipes/some_recipe.rb
|
300
302
|
- spec/fixtures/recipes/throw.rb
|
301
303
|
- spec/producer/core/action_spec.rb
|