Exit_Zero 1.1.3 → 1.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/README.md +41 -11
- data/lib/Exit_Zero.rb +29 -2
- data/lib/Exit_Zero/version.rb +1 -1
- data/spec/tests/Child.rb +5 -4
- data/spec/tests/Exit_0.rb +9 -0
- data/spec/tests/Exit_Zero.rb +50 -4
- metadata +3 -2
data/README.md
CHANGED
@@ -5,33 +5,63 @@ Exit\_Zero
|
|
5
5
|
A simple method that raises Exit\_Zero::Non\_Zero
|
6
6
|
if $?.exitstatus is not zero.
|
7
7
|
|
8
|
-
|
9
|
-
|
10
|
-
[posix-spawn](https://github.com/rtomayko/posix-spawn).
|
8
|
+
Don't like Exit\_Zero? Try:
|
9
|
+
|
10
|
+
* [posix-spawn](https://github.com/rtomayko/posix-spawn).
|
11
11
|
That is the easiest way to handle child processes
|
12
|
-
(aka shelling out
|
13
|
-
[
|
12
|
+
(aka shelling out).
|
13
|
+
* [POpen4](https://github.com/shairontoledo/popen4) Don't confuse it with regular popen4.
|
14
|
+
* [Here are other alternatives](http://stackoverflow.com/questions/6338908/ruby-difference-between-exec-system-and-x-or-backticks).
|
15
|
+
|
16
|
+
Windows
|
17
|
+
------
|
18
|
+
|
19
|
+
Use something else. Check the previous list above
|
20
|
+
for other alternatives,
|
21
|
+
especialy [POpen4](https://github.com/shairontoledo/popen4),
|
22
|
+
which is Windows and POSIX compatible.
|
23
|
+
|
24
|
+
Implementation
|
25
|
+
----
|
14
26
|
|
27
|
+
Exit\_Zero runs your command through bash:
|
28
|
+
|
29
|
+
your command: uptime
|
30
|
+
Final result: POSIX::Spawn::Child.new "bash -lc #{cmd.inspect}"
|
31
|
+
|
32
|
+
Exit\_Zero lives in one file. So if you have any questions, [here
|
33
|
+
it is](https://github.com/da99/Exit\_Zero/blob/master/lib/Exit\_Zero.rb).
|
15
34
|
|
16
35
|
|
17
36
|
Installation
|
18
37
|
------------
|
19
38
|
|
20
|
-
gem
|
39
|
+
gem install Exit_Zero
|
21
40
|
|
22
|
-
|
41
|
+
Usage
|
23
42
|
------
|
24
43
|
|
25
44
|
require "Exit_Zero"
|
26
45
|
|
27
|
-
Exit_Zero
|
28
|
-
Exit_Zero
|
46
|
+
Exit_Zero 'uptime'
|
47
|
+
Exit_Zero 'ls', :input=>' /some/dir '
|
29
48
|
Exit_Zero { system "uptime" }
|
30
49
|
|
31
50
|
# The following raises an error.
|
32
|
-
Exit_Zero
|
33
|
-
Exit_Zero { `
|
51
|
+
Exit_Zero 'uptimeSS'
|
52
|
+
Exit_Zero { `uptimeSSS` }
|
53
|
+
|
54
|
+
# Exit_0 and Exit_Zero are the same.
|
55
|
+
Exit_0 'uptime'
|
56
|
+
Exit_0 'grep a', :input=>"a \n b \n c"
|
34
57
|
|
58
|
+
# Get results from standard output, standard error.
|
59
|
+
Exit_0('uptime').out # String is stripped.
|
60
|
+
Exit_0('uptimeSS').err # String is stripped.
|
61
|
+
|
62
|
+
Exit_0('uptime').raw_out # Raw string, no :strip used.
|
63
|
+
Exit_0('uptime').raw_err # Raw string, no :strip used.
|
64
|
+
|
35
65
|
Run Tests
|
36
66
|
---------
|
37
67
|
|
data/lib/Exit_Zero.rb
CHANGED
@@ -25,6 +25,10 @@ def Exit_Zero *cmd, &blok
|
|
25
25
|
p
|
26
26
|
end # === Exit_Zero
|
27
27
|
|
28
|
+
def Exit_0 *cmd, &blok
|
29
|
+
Exit_Zero *cmd, &blok
|
30
|
+
end
|
31
|
+
|
28
32
|
class Exit_Zero
|
29
33
|
|
30
34
|
Non_Zero = Class.new(RuntimeError)
|
@@ -40,6 +44,21 @@ class Exit_Zero
|
|
40
44
|
|
41
45
|
attr_reader :cmd, :child
|
42
46
|
def initialize *cmd
|
47
|
+
if cmd[0].is_a?(String)
|
48
|
+
|
49
|
+
if cmd[0]["\n"]
|
50
|
+
cmd[0] = begin
|
51
|
+
cmd[0]
|
52
|
+
.split("\n")
|
53
|
+
.map(&:strip)
|
54
|
+
.reject(&:empty?)
|
55
|
+
.join(" && ")
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
cmd[0] = "bash -lc #{cmd[0].inspect}"
|
60
|
+
|
61
|
+
end
|
43
62
|
@child = POSIX::Spawn::Child.new(*cmd)
|
44
63
|
@cmd = cmd.join(' ')
|
45
64
|
end
|
@@ -48,14 +67,22 @@ class Exit_Zero
|
|
48
67
|
Split_Lines(child.out)
|
49
68
|
end
|
50
69
|
|
51
|
-
%w{ out err
|
70
|
+
%w{ out err }.each { |m|
|
52
71
|
eval %~
|
53
|
-
def #{m}
|
72
|
+
def raw_#{m}
|
54
73
|
child.#{m}
|
55
74
|
end
|
75
|
+
|
76
|
+
def #{m}
|
77
|
+
child.#{m}.strip
|
78
|
+
end
|
56
79
|
~
|
57
80
|
}
|
58
81
|
|
82
|
+
def status
|
83
|
+
child.status
|
84
|
+
end
|
85
|
+
|
59
86
|
end # === Base
|
60
87
|
include Base
|
61
88
|
end # === Child
|
data/lib/Exit_Zero/version.rb
CHANGED
data/spec/tests/Child.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
describe "Child.new" do
|
2
2
|
|
3
3
|
it 'executes given string' do
|
4
|
-
Exit_Zero::Child.new("pwd").
|
4
|
+
Exit_Zero::Child.new("pwd").raw_out.should == `pwd`
|
5
5
|
end
|
6
6
|
|
7
7
|
end # === Exit_Zero::Child
|
@@ -17,12 +17,13 @@ end # === Child#split_lines
|
|
17
17
|
|
18
18
|
describe "Child delegate methods" do
|
19
19
|
|
20
|
-
%w{
|
21
|
-
|
20
|
+
%w{ raw_out raw_err status }.each { |m|
|
21
|
+
o_m = m.sub("raw_", '')
|
22
|
+
it "sets :#{m} equal to Child :#{o_m}" do
|
22
23
|
cmd = %q! ruby -e "puts 'a'; warn 'b'; exit(127);"!
|
23
24
|
target = POSIX::Spawn::Child.new(cmd)
|
24
25
|
Exit_Zero::Child.new(cmd)
|
25
|
-
.send(m).should == target.send(
|
26
|
+
.send(m).should == target.send(o_m)
|
26
27
|
end
|
27
28
|
}
|
28
29
|
|
data/spec/tests/Exit_Zero.rb
CHANGED
@@ -3,14 +3,14 @@ describe "Exit_Zero *cmd" do
|
|
3
3
|
|
4
4
|
it "accepts the same arguments as POSIX::Spawn::Child" do
|
5
5
|
Exit_Zero("dc", :input=>'4 4 + p').out
|
6
|
-
.should == "8
|
6
|
+
.should == "8"
|
7
7
|
end
|
8
|
-
|
8
|
+
|
9
9
|
it "raises Exit_Zero::Non_Zero if command exits with non-zero" do
|
10
10
|
lambda {
|
11
11
|
Exit_Zero 'uptimes'
|
12
12
|
}.should.raise(Exit_Zero::Non_Zero)
|
13
|
-
.message.should.match %r!127 => uptimes!
|
13
|
+
.message.should.match %r!127 => bash: uptimes: command not found!
|
14
14
|
end
|
15
15
|
|
16
16
|
it "returns a Exit_Zero::Child" do
|
@@ -18,7 +18,7 @@ describe "Exit_Zero *cmd" do
|
|
18
18
|
end
|
19
19
|
|
20
20
|
it "executes valid command" do
|
21
|
-
Exit_Zero('pwd').out.should == `pwd
|
21
|
+
Exit_Zero('pwd').out.should == `pwd`.strip
|
22
22
|
end
|
23
23
|
|
24
24
|
it "raises ArgumentError if both a cmd and block are given" do
|
@@ -27,6 +27,22 @@ describe "Exit_Zero *cmd" do
|
|
27
27
|
.message.should.match %r!are not allowed!i
|
28
28
|
end
|
29
29
|
|
30
|
+
it "combines a multi-line string into one string, joined by \"&&\"" do
|
31
|
+
Exit_Zero(%!
|
32
|
+
cd ~/
|
33
|
+
pwd
|
34
|
+
!)
|
35
|
+
.out.should == `cd ~/ && pwd`.strip
|
36
|
+
end
|
37
|
+
|
38
|
+
it "ignores empty lines in a multi-line string" do
|
39
|
+
Exit_Zero(%!
|
40
|
+
cd ~/
|
41
|
+
|
42
|
+
pwd
|
43
|
+
!).out.should == `cd ~/ && pwd`.strip
|
44
|
+
end
|
45
|
+
|
30
46
|
end # === Exit_Zero 'cmd'
|
31
47
|
|
32
48
|
describe "Exit_Zero { }" do
|
@@ -54,3 +70,33 @@ describe "Exit_Zero { }" do
|
|
54
70
|
|
55
71
|
end # === Exit_Zero { }
|
56
72
|
|
73
|
+
describe "Exit_Zero::Child" do
|
74
|
+
|
75
|
+
# ---- :out
|
76
|
+
|
77
|
+
it "returns stripped :out" do
|
78
|
+
Exit_Zero::Child.new("pwd").out
|
79
|
+
.should == `pwd`.strip
|
80
|
+
end
|
81
|
+
|
82
|
+
it "returns raw output for :raw_out" do
|
83
|
+
Exit_Zero::Child.new("pwd").raw_out
|
84
|
+
.should == `pwd`
|
85
|
+
end
|
86
|
+
|
87
|
+
# ---- :err
|
88
|
+
|
89
|
+
it "returns stripped :err" do
|
90
|
+
Exit_Zero::Child.new("pwdssssss").err
|
91
|
+
.should == `bash -lc "pwdssssss" 2>&1`.strip
|
92
|
+
end
|
93
|
+
|
94
|
+
it "returns raw output for :raw_out" do
|
95
|
+
Exit_Zero::Child.new("no_exist").err
|
96
|
+
.should.match %r!no_exist: command not found!
|
97
|
+
end
|
98
|
+
|
99
|
+
end # === Exit_Zero::Child
|
100
|
+
|
101
|
+
|
102
|
+
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: Exit_Zero
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.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: 2012-04-
|
12
|
+
date: 2012-04-17 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: bacon
|
@@ -125,6 +125,7 @@ files:
|
|
125
125
|
- spec/helper.rb
|
126
126
|
- spec/main.rb
|
127
127
|
- spec/tests/Child.rb
|
128
|
+
- spec/tests/Exit_0.rb
|
128
129
|
- spec/tests/Exit_Zero.rb
|
129
130
|
- spec/tests/bin.rb
|
130
131
|
homepage: https://github.com/da99/Exit_Zero
|