scmd 2.1.2 → 2.2.0

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile CHANGED
@@ -3,5 +3,9 @@ source "https://rubygems.org"
3
3
  gemspec
4
4
 
5
5
  gem 'rake'
6
- gem 'pry'
7
- gem "whysoslow"
6
+ gem 'pry', "~> 0.9.0"
7
+ gem 'whysoslow'
8
+
9
+ platform :rbx do
10
+ gem 'rubysl'
11
+ end
data/lib/scmd/command.rb CHANGED
@@ -14,11 +14,12 @@ module Scmd
14
14
  READ_CHECK_TIMEOUT = 0.001 # seconds
15
15
  DEFAULT_STOP_TIMEOUT = 3 # seconds
16
16
 
17
- attr_reader :cmd_str
17
+ attr_reader :cmd_str, :env
18
18
  attr_reader :pid, :exitstatus, :stdout, :stderr
19
19
 
20
- def initialize(cmd_str)
20
+ def initialize(cmd_str, env = nil)
21
21
  @cmd_str = cmd_str
22
+ @env = stringify_hash(env || {})
22
23
  reset_attrs
23
24
  end
24
25
 
@@ -130,7 +131,7 @@ module Scmd
130
131
  reset_attrs
131
132
  @stop_r, @stop_w = IO.pipe
132
133
  @read_output_thread = nil
133
- @child_process = ChildProcess.new(@cmd_str)
134
+ @child_process = ChildProcess.new(@cmd_str, @env)
134
135
  end
135
136
 
136
137
  def teardown_run
@@ -154,12 +155,18 @@ module Scmd
154
155
  ::Process.kill sig, @child_process.pid
155
156
  end
156
157
 
158
+ def stringify_hash(hash)
159
+ hash.inject({}) do |h, (k, v)|
160
+ h.merge(k.to_s => v.to_s)
161
+ end
162
+ end
163
+
157
164
  class ChildProcess
158
165
 
159
166
  attr_reader :pid, :stdin, :stdout, :stderr
160
167
 
161
- def initialize(cmd_str)
162
- @pid, @stdin, @stdout, @stderr = *::POSIX::Spawn::popen4(cmd_str)
168
+ def initialize(cmd_str, env)
169
+ @pid, @stdin, @stdout, @stderr = *::POSIX::Spawn::popen4(env, cmd_str)
163
170
  @wait_pid, @wait_status = nil, nil
164
171
  end
165
172
 
data/lib/scmd/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Scmd
2
- VERSION = "2.1.2"
2
+ VERSION = "2.2.0"
3
3
  end
@@ -11,7 +11,8 @@ class Scmd::Command
11
11
  end
12
12
  subject { @success_cmd }
13
13
 
14
- should have_readers :cmd_str, :pid, :exitstatus, :stdout, :stderr
14
+ should have_readers :cmd_str, :env
15
+ should have_readers :pid, :exitstatus, :stdout, :stderr
15
16
  should have_imeths :run, :run!
16
17
  should have_imeths :start, :wait, :stop, :kill
17
18
  should have_imeths :running?, :success?
@@ -21,6 +22,18 @@ class Scmd::Command
21
22
  assert_equal "echo hi", subject.to_s
22
23
  end
23
24
 
25
+ should "default its env to an empty hash" do
26
+ assert_equal({}, subject.env)
27
+ end
28
+
29
+ should "stringify its env hash" do
30
+ cmd = Scmd::Command.new("echo $SCMD_TEST_VAR", {
31
+ :SCMD_TEST_VAR => 1
32
+ })
33
+ expected = { 'SCMD_TEST_VAR' => '1' }
34
+ assert_equal expected, cmd.env
35
+ end
36
+
24
37
  should "default its result values" do
25
38
  assert_nil subject.pid
26
39
  assert_nil subject.exitstatus
@@ -190,4 +203,19 @@ class Scmd::Command
190
203
 
191
204
  end
192
205
 
206
+ class WithEnvVarTests < UnitTests
207
+ desc "with environment variables"
208
+ setup do
209
+ @cmd = Scmd::Command.new("echo $SCMD_TEST_VAR", {
210
+ 'SCMD_TEST_VAR' => 'test'
211
+ })
212
+ end
213
+
214
+ should "use them when running the command" do
215
+ @cmd.run
216
+ assert_equal "test\n", @cmd.stdout
217
+ end
218
+
219
+ end
220
+
193
221
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: scmd
3
3
  version: !ruby/object:Gem::Version
4
- hash: 15
4
+ hash: 7
5
5
  prerelease:
6
6
  segments:
7
7
  - 2
8
- - 1
9
8
  - 2
10
- version: 2.1.2
9
+ - 0
10
+ version: 2.2.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Kelly Redding
@@ -16,11 +16,9 @@ autorequire:
16
16
  bindir: bin
17
17
  cert_chain: []
18
18
 
19
- date: 2013-11-11 00:00:00 Z
19
+ date: 2014-06-13 00:00:00 Z
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
22
- name: assert
23
- prerelease: false
24
22
  requirement: &id001 !ruby/object:Gem::Requirement
25
23
  none: false
26
24
  requirements:
@@ -31,11 +29,11 @@ dependencies:
31
29
  - 2
32
30
  - 3
33
31
  version: "2.3"
34
- type: :development
35
32
  version_requirements: *id001
36
- - !ruby/object:Gem::Dependency
37
- name: posix-spawn
33
+ type: :development
34
+ name: assert
38
35
  prerelease: false
36
+ - !ruby/object:Gem::Dependency
39
37
  requirement: &id002 !ruby/object:Gem::Requirement
40
38
  none: false
41
39
  requirements:
@@ -45,8 +43,10 @@ dependencies:
45
43
  segments:
46
44
  - 0
47
45
  version: "0"
48
- type: :runtime
49
46
  version_requirements: *id002
47
+ type: :runtime
48
+ name: posix-spawn
49
+ prerelease: false
50
50
  description: Build and run system commands.
51
51
  email:
52
52
  - kelly@kellyredding.com
@@ -106,7 +106,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
106
106
  requirements: []
107
107
 
108
108
  rubyforge_project:
109
- rubygems_version: 1.8.24
109
+ rubygems_version: 1.8.29
110
110
  signing_key:
111
111
  specification_version: 3
112
112
  summary: Build and run system commands.