buff-shell_out 0.1.1 → 0.2.0
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.
- data/lib/buff/shell_out.rb +21 -6
- data/lib/buff/shell_out/version.rb +1 -1
- data/spec/buff/shell_out_spec.rb +2 -2
- metadata +3 -3
data/lib/buff/shell_out.rb
CHANGED
@@ -14,10 +14,13 @@ module Buff
|
|
14
14
|
#
|
15
15
|
# @param [String] command
|
16
16
|
# The command to execute
|
17
|
+
# @param [Hash] env
|
18
|
+
# A hash of enviroment variables to set during execution
|
17
19
|
#
|
18
20
|
# @return [ShellOut::Response]
|
19
|
-
def shell_out(command)
|
20
|
-
|
21
|
+
def shell_out(command, env = {})
|
22
|
+
env = process_env_vars(env)
|
23
|
+
process_status, out, err = jruby? ? jruby_out(command, env) : mri_out(command, env)
|
21
24
|
Response.new(process_status, out, err)
|
22
25
|
end
|
23
26
|
|
@@ -25,11 +28,11 @@ module Buff
|
|
25
28
|
|
26
29
|
# @param [String] command
|
27
30
|
# The command to execute
|
28
|
-
def mri_out(command)
|
31
|
+
def mri_out(command, env = {})
|
29
32
|
out, err = Tempfile.new('mixin.shell_out.stdout'), Tempfile.new('mixin.shell_out.stderr')
|
30
33
|
|
31
34
|
begin
|
32
|
-
pid = Process.spawn(command, out: out.to_i, err: err.to_i)
|
35
|
+
pid = Process.spawn(env, command, out: out.to_i, err: err.to_i)
|
33
36
|
pid, status = Process.waitpid2(pid)
|
34
37
|
# Check if we're getting back a process status because win32-process 6.x was a fucking MURDERER.
|
35
38
|
# https://github.com/djberg96/win32-process/blob/master/lib/win32/process.rb#L494-L519
|
@@ -48,10 +51,10 @@ module Buff
|
|
48
51
|
|
49
52
|
# @param [String] command
|
50
53
|
# The command to execute
|
51
|
-
def jruby_out(command)
|
54
|
+
def jruby_out(command, env = {})
|
52
55
|
out, err = StringIO.new, StringIO.new
|
53
56
|
$stdout, $stderr = out, err
|
54
|
-
system(command)
|
57
|
+
system(env, command)
|
55
58
|
|
56
59
|
exitstatus = $?.exitstatus
|
57
60
|
out.rewind
|
@@ -61,5 +64,17 @@ module Buff
|
|
61
64
|
ensure
|
62
65
|
$stdout, $stderr = STDOUT, STDERR
|
63
66
|
end
|
67
|
+
|
68
|
+
# Builds a new hash from the given vars hash. The new hash's keys are all uppercase
|
69
|
+
# strings representing environment variables.
|
70
|
+
#
|
71
|
+
# @param [Hash] vars
|
72
|
+
# A hash of environment variables
|
73
|
+
def process_env_vars(vars)
|
74
|
+
vars.inject({}) do |acc, (key, val)|
|
75
|
+
acc[key.to_s.upcase] = val
|
76
|
+
acc
|
77
|
+
end
|
78
|
+
end
|
64
79
|
end
|
65
80
|
end
|
data/spec/buff/shell_out_spec.rb
CHANGED
@@ -20,7 +20,7 @@ describe Buff::ShellOut do
|
|
20
20
|
before { described_class.stub(jruby?: false) }
|
21
21
|
|
22
22
|
it "delegates to #mri_out" do
|
23
|
-
described_class.
|
23
|
+
expect(described_class).to receive(:mri_out).with(command, {})
|
24
24
|
result
|
25
25
|
end
|
26
26
|
|
@@ -37,7 +37,7 @@ describe Buff::ShellOut do
|
|
37
37
|
before { described_class.stub(jruby?: true) }
|
38
38
|
|
39
39
|
it "delegates to #jruby_out" do
|
40
|
-
described_class.
|
40
|
+
expect(described_class).to receive(:jruby_out).with(command, {})
|
41
41
|
result
|
42
42
|
end
|
43
43
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: buff-shell_out
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2014-08-11 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: buff-ruby_engine
|
@@ -216,7 +216,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
216
216
|
version: '0'
|
217
217
|
segments:
|
218
218
|
- 0
|
219
|
-
hash: -
|
219
|
+
hash: -1099429043491521833
|
220
220
|
requirements: []
|
221
221
|
rubyforge_project:
|
222
222
|
rubygems_version: 1.8.23
|