-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy patharuba.rb
More file actions
56 lines (47 loc) · 1.7 KB
/
Copy patharuba.rb
File metadata and controls
56 lines (47 loc) · 1.7 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
require 'aruba/cucumber'
require 'aruba/processes/in_process'
require 'rascal/cli'
# https://github.com/erikhuda/thor/wiki/Integrating-with-Aruba-In-Process-Runs
class InProcessCliRunner
# Allow everything fun to be injected from the outside while defaulting to normal implementations.
def initialize(argv, stdin = STDIN, stdout = STDOUT, stderr = STDERR, kernel = Kernel)
@argv, @stdin, @stdout, @stderr, @kernel = argv, stdin, stdout, stderr, kernel
end
def execute!
exit_code = begin
# Thor accesses these streams directly rather than letting them be injected, so we replace them...
$stderr = @stderr
$stdin = @stdin
$stdout = @stdout
# Run our normal Thor app the way we know and love.
previous_program_name = $PROGRAM_NAME
$PROGRAM_NAME = 'rascal'
Rascal::CLI::Main.start(@argv)
# Thor::Base#start does not have a return value, assume success if no exception is raised.
0
rescue StandardError => e
# The ruby interpreter would pipe this to STDERR and exit 1 in the case of an unhandled exception
b = e.backtrace
@stderr.puts("#{b.shift}: #{e.message} (#{e.class})")
@stderr.puts(b.map{|s| "\tfrom #{s}"}.join("\n"))
1
rescue SystemExit => e
e.status
ensure
# add additional cleanup code here
$stderr = STDERR
$stdin = STDIN
$stdout = STDOUT
$PROGRAM_NAME = previous_program_name
end
# Proxy our exit code back to the injected kernel.
@kernel.exit(exit_code)
end
end
Aruba.configure do |config|
config.command_launcher = :in_process
config.main_class = InProcessCliRunner
end
Before('@separate-process') do
aruba.config.command_launcher = :spawn
end