scmd 1.0.0 → 1.1.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/README.md +22 -1
- data/lib/scmd/command.rb +7 -3
- data/lib/scmd/version.rb +1 -1
- data/scmd.gemspec +3 -3
- data/test/command_tests.rb +68 -40
- metadata +16 -16
data/README.md
CHANGED
@@ -51,7 +51,28 @@ cmd.stderr #=> ''
|
|
51
51
|
cmd.run.stdout #=> 'hi'
|
52
52
|
```
|
53
53
|
|
54
|
-
|
54
|
+
### Run with input on stdin
|
55
|
+
|
56
|
+
A single input line
|
57
|
+
|
58
|
+
```ruby
|
59
|
+
input = "echo hi"
|
60
|
+
cmd = Scmd.new("sh").run(input)
|
61
|
+
cmd.stdout #=> 'hi'
|
62
|
+
```
|
63
|
+
|
64
|
+
Multiple input lines:
|
65
|
+
|
66
|
+
```ruby
|
67
|
+
input = ["echo hi", "echo err 1>&2"]
|
68
|
+
cmd = Scmd.new("sh").run(input)
|
69
|
+
cmd.stdout #=> 'hi'
|
70
|
+
cmd.stderr #=> 'err'
|
71
|
+
```
|
72
|
+
|
73
|
+
### Some helpers
|
74
|
+
|
75
|
+
Ask if cmd was successful:
|
55
76
|
|
56
77
|
```ruby
|
57
78
|
puts cmd.stderr if !cmd.success?
|
data/lib/scmd/command.rb
CHANGED
@@ -32,14 +32,18 @@ module Scmd
|
|
32
32
|
"#<#{self.class}:0x#{self.object_id.to_s(16)} @cmd_str=#{self.cmd_str.inspect} @exitcode=#{@exitcode.inspect}>"
|
33
33
|
end
|
34
34
|
|
35
|
-
def run
|
36
|
-
run! rescue Failure
|
35
|
+
def run(input=nil)
|
36
|
+
run!(input) rescue Failure
|
37
37
|
self
|
38
38
|
end
|
39
39
|
|
40
|
-
def run!
|
40
|
+
def run!(input=nil)
|
41
41
|
begin
|
42
42
|
status = Open4::popen4(@cmd_str) do |pid, stdin, stdout, stderr|
|
43
|
+
if !input.nil?
|
44
|
+
[*input].each{|line| stdin.puts line.to_s}
|
45
|
+
stdin.close
|
46
|
+
end
|
43
47
|
@pid = pid.to_i
|
44
48
|
@stdout += stdout.read.strip
|
45
49
|
@stderr += stderr.read.strip
|
data/lib/scmd/version.rb
CHANGED
data/scmd.gemspec
CHANGED
@@ -7,9 +7,9 @@ Gem::Specification.new do |gem|
|
|
7
7
|
gem.description = %q{Wrapper to `open4` for running system commands.}
|
8
8
|
gem.summary = %q{Wrapper to `open4` for running system commands.}
|
9
9
|
|
10
|
-
gem.authors = ["Kelly Redding
|
11
|
-
gem.email = ["
|
12
|
-
gem.homepage = "http://github.com/
|
10
|
+
gem.authors = ["Kelly Redding"]
|
11
|
+
gem.email = ["kelly@kellyredding.com"]
|
12
|
+
gem.homepage = "http://github.com/redding/scmd"
|
13
13
|
|
14
14
|
gem.files = `git ls-files`.split("\n")
|
15
15
|
gem.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
data/test/command_tests.rb
CHANGED
@@ -1,57 +1,85 @@
|
|
1
1
|
require "assert"
|
2
2
|
require 'scmd/command'
|
3
3
|
|
4
|
-
|
5
|
-
desc "a command"
|
6
|
-
setup do
|
7
|
-
@success_cmd = Scmd::Command.new("echo hi")
|
8
|
-
@failure_cmd = Scmd::Command.new("cd /path/that/does/not/exist")
|
9
|
-
end
|
10
|
-
subject { @success_cmd }
|
4
|
+
module Scmd
|
11
5
|
|
12
|
-
|
13
|
-
|
6
|
+
class CommandTests < Assert::Context
|
7
|
+
desc "a command"
|
8
|
+
setup do
|
9
|
+
@success_cmd = Command.new("echo hi")
|
10
|
+
@failure_cmd = Command.new("cd /path/that/does/not/exist")
|
11
|
+
end
|
12
|
+
subject { @success_cmd }
|
14
13
|
|
15
|
-
|
16
|
-
|
17
|
-
assert_equal "echo hi", subject.to_s
|
18
|
-
end
|
14
|
+
should have_readers :cmd_str, :pid, :exitcode, :stdout, :stderr
|
15
|
+
should have_instance_methods :run, :run!
|
19
16
|
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
assert_equal '', subject.stderr
|
25
|
-
end
|
17
|
+
should "know and return its cmd string" do
|
18
|
+
assert_equal "echo hi", subject.cmd_str
|
19
|
+
assert_equal "echo hi", subject.to_s
|
20
|
+
end
|
26
21
|
|
27
|
-
|
28
|
-
|
22
|
+
should "default its result values" do
|
23
|
+
assert_nil subject.pid
|
24
|
+
assert_nil subject.exitcode
|
25
|
+
assert_equal '', subject.stdout
|
26
|
+
assert_equal '', subject.stderr
|
27
|
+
end
|
29
28
|
|
30
|
-
|
31
|
-
|
32
|
-
assert @success_cmd.success?
|
33
|
-
assert_equal 'hi', @success_cmd.stdout
|
34
|
-
assert_equal '', @success_cmd.stderr
|
29
|
+
should "run the command and set appropriate result data" do
|
30
|
+
@success_cmd.run
|
35
31
|
|
36
|
-
|
32
|
+
assert_not_nil @success_cmd.pid
|
33
|
+
assert_equal 0, @success_cmd.exitcode
|
34
|
+
assert @success_cmd.success?
|
35
|
+
assert_equal 'hi', @success_cmd.stdout
|
36
|
+
assert_equal '', @success_cmd.stderr
|
37
37
|
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
38
|
+
@failure_cmd.run
|
39
|
+
|
40
|
+
assert_not_nil @failure_cmd.pid
|
41
|
+
assert_not_equal 0, @failure_cmd.exitcode
|
42
|
+
assert_not @failure_cmd.success?
|
43
|
+
assert_equal '', @failure_cmd.stdout
|
44
|
+
assert_not_equal '', @failure_cmd.stderr
|
45
|
+
end
|
46
|
+
|
47
|
+
should "raise an exception on `run!` and a non-zero exitcode" do
|
48
|
+
assert_raises Scmd::Command::Failure do
|
49
|
+
@failure_cmd.run!
|
50
|
+
end
|
51
|
+
end
|
44
52
|
|
45
|
-
|
46
|
-
|
47
|
-
@
|
53
|
+
should "return itself on `run`, `run!`" do
|
54
|
+
assert_equal @success_cmd, @success_cmd.run
|
55
|
+
assert_equal @success_cmd, @success_cmd.run!
|
56
|
+
assert_equal @failure_cmd, @failure_cmd.run
|
48
57
|
end
|
58
|
+
|
49
59
|
end
|
50
60
|
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
61
|
+
class InputTests < CommandTests
|
62
|
+
desc "that takes input on stdin"
|
63
|
+
setup do
|
64
|
+
@cmd = Command.new("sh")
|
65
|
+
end
|
66
|
+
subject { @cmd }
|
67
|
+
|
68
|
+
should "run the command given a single line of input" do
|
69
|
+
subject.run "echo hi"
|
70
|
+
|
71
|
+
assert @cmd.success?
|
72
|
+
assert_equal 'hi', @cmd.stdout
|
73
|
+
end
|
74
|
+
|
75
|
+
should "run the command given multiple lines of input" do
|
76
|
+
subject.run ["echo hi", "echo err 1>&2"]
|
77
|
+
|
78
|
+
assert @cmd.success?
|
79
|
+
assert_equal 'hi', @cmd.stdout
|
80
|
+
assert_equal 'err', @cmd.stderr
|
81
|
+
end
|
82
|
+
|
55
83
|
end
|
56
84
|
|
57
85
|
end
|
metadata
CHANGED
@@ -1,25 +1,25 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: scmd
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 19
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 1
|
8
|
+
- 1
|
8
9
|
- 0
|
9
|
-
|
10
|
-
version: 1.0.0
|
10
|
+
version: 1.1.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
|
-
- Kelly Redding
|
13
|
+
- Kelly Redding
|
14
14
|
autorequire:
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2012-
|
18
|
+
date: 2012-10-16 00:00:00 Z
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
21
|
-
|
22
|
-
|
21
|
+
name: assert
|
22
|
+
version_requirements: &id001 !ruby/object:Gem::Requirement
|
23
23
|
none: false
|
24
24
|
requirements:
|
25
25
|
- - ">="
|
@@ -28,12 +28,12 @@ dependencies:
|
|
28
28
|
segments:
|
29
29
|
- 0
|
30
30
|
version: "0"
|
31
|
-
|
32
|
-
|
31
|
+
type: :development
|
32
|
+
requirement: *id001
|
33
33
|
prerelease: false
|
34
34
|
- !ruby/object:Gem::Dependency
|
35
|
-
|
36
|
-
|
35
|
+
name: open4
|
36
|
+
version_requirements: &id002 !ruby/object:Gem::Requirement
|
37
37
|
none: false
|
38
38
|
requirements:
|
39
39
|
- - ">="
|
@@ -42,12 +42,12 @@ dependencies:
|
|
42
42
|
segments:
|
43
43
|
- 0
|
44
44
|
version: "0"
|
45
|
-
|
46
|
-
|
45
|
+
type: :runtime
|
46
|
+
requirement: *id002
|
47
47
|
prerelease: false
|
48
48
|
description: Wrapper to `open4` for running system commands.
|
49
49
|
email:
|
50
|
-
-
|
50
|
+
- kelly@kellyredding.com
|
51
51
|
executables: []
|
52
52
|
|
53
53
|
extensions: []
|
@@ -68,7 +68,7 @@ files:
|
|
68
68
|
- test/helper.rb
|
69
69
|
- test/irb.rb
|
70
70
|
- test/scmd_tests.rb
|
71
|
-
homepage: http://github.com/
|
71
|
+
homepage: http://github.com/redding/scmd
|
72
72
|
licenses: []
|
73
73
|
|
74
74
|
post_install_message:
|
@@ -97,7 +97,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
97
97
|
requirements: []
|
98
98
|
|
99
99
|
rubyforge_project:
|
100
|
-
rubygems_version: 1.8.
|
100
|
+
rubygems_version: 1.8.24
|
101
101
|
signing_key:
|
102
102
|
specification_version: 3
|
103
103
|
summary: Wrapper to `open4` for running system commands.
|