Exit_Zero 0.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/.gitignore +8 -0
- data/Exit_Zero.gemspec +34 -0
- data/Gemfile +6 -0
- data/Rakefile +3 -0
- data/lib/Exit_Zero/version.rb +3 -0
- data/lib/Exit_Zero.rb +60 -0
- data/spec/helper.rb +15 -0
- data/spec/main.rb +15 -0
- data/spec/tests/Exit_Zero.rb +54 -0
- data/spec/tests/bin.rb +10 -0
- metadata +123 -0
data/.gitignore
ADDED
data/Exit_Zero.gemspec
ADDED
@@ -0,0 +1,34 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
|
3
|
+
$:.push File.expand_path("../lib", __FILE__)
|
4
|
+
require "Exit_Zero/version"
|
5
|
+
|
6
|
+
Gem::Specification.new do |s|
|
7
|
+
s.name = "Exit_Zero"
|
8
|
+
s.version = Exit_Zero::VERSION
|
9
|
+
s.authors = ["da99"]
|
10
|
+
s.email = ["i-hate-spam-45671204@mailinator.com"]
|
11
|
+
s.homepage = ""
|
12
|
+
s.summary = %q{Make sure your last process exited with 0.}
|
13
|
+
s.description = %q{
|
14
|
+
A simple method that raises Exit_Zero::Non_Zero
|
15
|
+
if $?.exitstatus is not zero.
|
16
|
+
Be sure to use the "posix-spawn" since almost everything
|
17
|
+
else is just plain wrong when handling child processes.
|
18
|
+
}
|
19
|
+
|
20
|
+
s.files = `git ls-files`.split("\n")
|
21
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
22
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
23
|
+
s.require_paths = ["lib"]
|
24
|
+
|
25
|
+
s.add_development_dependency "bacon"
|
26
|
+
s.add_development_dependency "rake"
|
27
|
+
s.add_development_dependency 'Bacon_Colored'
|
28
|
+
s.add_development_dependency 'pry'
|
29
|
+
|
30
|
+
# s.rubyforge_project = "Exit_Zero"
|
31
|
+
# specify any dependencies here; for example:
|
32
|
+
s.add_runtime_dependency "Split_Lines"
|
33
|
+
s.add_runtime_dependency "posix-spawn"
|
34
|
+
end
|
data/Gemfile
ADDED
data/Rakefile
ADDED
data/lib/Exit_Zero.rb
ADDED
@@ -0,0 +1,60 @@
|
|
1
|
+
require 'Exit_Zero/version'
|
2
|
+
require 'Split_Lines'
|
3
|
+
require 'posix/spawn'
|
4
|
+
|
5
|
+
def Exit_Zero cmd=:no_cmd, &blok
|
6
|
+
|
7
|
+
if cmd == :no_cmd
|
8
|
+
r = yield
|
9
|
+
Exit_Zero.check blok, r
|
10
|
+
r
|
11
|
+
else
|
12
|
+
raise ArgumentError, "Both command and block are not allowed." if block_given?
|
13
|
+
r = Exit_Zero::Result.new(POSIX::Spawn::Child.new(cmd))
|
14
|
+
Exit_Zero.check cmd, r.status
|
15
|
+
r
|
16
|
+
end
|
17
|
+
|
18
|
+
end # === Exit_Zero
|
19
|
+
|
20
|
+
class Exit_Zero
|
21
|
+
|
22
|
+
module Class_Methods
|
23
|
+
|
24
|
+
def check cmd, r = :no_status
|
25
|
+
r = $? if !r.respond_to?(:exitstatus)
|
26
|
+
raise(Exit_Zero::Non_Zero, cmd) if r.exitstatus != 0
|
27
|
+
end
|
28
|
+
|
29
|
+
end # === Class_Methods
|
30
|
+
|
31
|
+
extend Class_Methods
|
32
|
+
|
33
|
+
class Non_Zero < RuntimeError
|
34
|
+
end # === class Non_Zero
|
35
|
+
|
36
|
+
class Result
|
37
|
+
module Base
|
38
|
+
|
39
|
+
attr_reader :child
|
40
|
+
def initialize child
|
41
|
+
@child = child
|
42
|
+
end
|
43
|
+
|
44
|
+
def split_lines
|
45
|
+
Split_Lines(child.out)
|
46
|
+
end
|
47
|
+
|
48
|
+
%w{ out err status }.each { |m|
|
49
|
+
eval %~
|
50
|
+
def #{m}
|
51
|
+
child.#{m}
|
52
|
+
end
|
53
|
+
~
|
54
|
+
}
|
55
|
+
|
56
|
+
end # === Base
|
57
|
+
include Base
|
58
|
+
end # === Result
|
59
|
+
|
60
|
+
end # === class Exit_Zero
|
data/spec/helper.rb
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'bundler'
|
3
|
+
begin
|
4
|
+
Bundler.setup(:default, :development)
|
5
|
+
rescue Bundler::BundlerError => e
|
6
|
+
$stderr.print e.message, "\n"
|
7
|
+
$stderr.print "Run `bundle install` to install missing gems\n"
|
8
|
+
exit e.status_code
|
9
|
+
end
|
10
|
+
require 'bacon'
|
11
|
+
|
12
|
+
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
13
|
+
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
14
|
+
|
15
|
+
Bacon.summary_on_exit
|
data/spec/main.rb
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
|
2
|
+
require File.expand_path('spec/helper')
|
3
|
+
require 'Exit_Zero'
|
4
|
+
require 'Bacon_Colored'
|
5
|
+
require 'pry'
|
6
|
+
|
7
|
+
|
8
|
+
# ======== Include the tests.
|
9
|
+
if ARGV.size > 1 && ARGV[1, ARGV.size - 1].detect { |a| File.exists?(a) }
|
10
|
+
# Do nothing. Bacon grabs the file.
|
11
|
+
else
|
12
|
+
Dir.glob('spec/tests/*.rb').each { |file|
|
13
|
+
require File.expand_path(file.sub('.rb', '')) if File.file?(file)
|
14
|
+
}
|
15
|
+
end
|
@@ -0,0 +1,54 @@
|
|
1
|
+
describe "Exit_Zero::Result" do
|
2
|
+
|
3
|
+
it "provides split_lines" do
|
4
|
+
r = Exit_Zero::Result.new(POSIX::Spawn::Child.new('ls -Al'))
|
5
|
+
r.split_lines.should == `ls -Al`.strip.split("\n")
|
6
|
+
end
|
7
|
+
|
8
|
+
%w{ out err status }.each { |m|
|
9
|
+
it "sets :#{m} equal to Child##{m}" do
|
10
|
+
cmd = %q! ruby -e "puts 'a'; warn 'b'; exit(127);"!
|
11
|
+
target = POSIX::Spawn::Child.new(cmd)
|
12
|
+
Exit_Zero::Result.new(POSIX::Spawn::Child.new(cmd))
|
13
|
+
.send(m).should == target.send(m)
|
14
|
+
end
|
15
|
+
}
|
16
|
+
|
17
|
+
end # === Exit_Zero::Result
|
18
|
+
|
19
|
+
describe "Exit_Zero 'cmd'" do
|
20
|
+
|
21
|
+
it "raises Exit_Zero::Non_Zero if command exits with non-zero" do
|
22
|
+
lambda {
|
23
|
+
Exit_Zero 'uptimes'
|
24
|
+
}.should.raise(Exit_Zero::Non_Zero)
|
25
|
+
end
|
26
|
+
|
27
|
+
it "returns a Exit_Zero::Result" do
|
28
|
+
Exit_Zero('whoami').class.should.be == Exit_Zero::Result
|
29
|
+
end
|
30
|
+
|
31
|
+
it "executes valid command" do
|
32
|
+
Exit_Zero('pwd').out.should == `pwd`
|
33
|
+
end
|
34
|
+
|
35
|
+
it "raises ArgumentError if both a cmd and block are given" do
|
36
|
+
lambda { Exit_Zero('uptime') {} }
|
37
|
+
.should.raise(ArgumentError)
|
38
|
+
.message.should.match %r!are not allowed!i
|
39
|
+
end
|
40
|
+
|
41
|
+
end # === Exit_Zero 'cmd'
|
42
|
+
|
43
|
+
describe "Exit_Zero { }" do
|
44
|
+
|
45
|
+
it "raises Exit_Zero::Non_Zero if $?.exitstatus != 0" do
|
46
|
+
lambda {
|
47
|
+
Exit_Zero {
|
48
|
+
POSIX::Spawn::Child.new("uptimes")
|
49
|
+
}
|
50
|
+
}.should.raise(Exit_Zero::Non_Zero)
|
51
|
+
end
|
52
|
+
|
53
|
+
end # === Exit_Zero { }
|
54
|
+
|
data/spec/tests/bin.rb
ADDED
metadata
ADDED
@@ -0,0 +1,123 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: Exit_Zero
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- da99
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2012-02-20 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: bacon
|
16
|
+
requirement: &8271400 !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
22
|
+
type: :development
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: *8271400
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: rake
|
27
|
+
requirement: &8270660 !ruby/object:Gem::Requirement
|
28
|
+
none: false
|
29
|
+
requirements:
|
30
|
+
- - ! '>='
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '0'
|
33
|
+
type: :development
|
34
|
+
prerelease: false
|
35
|
+
version_requirements: *8270660
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
name: Bacon_Colored
|
38
|
+
requirement: &8270180 !ruby/object:Gem::Requirement
|
39
|
+
none: false
|
40
|
+
requirements:
|
41
|
+
- - ! '>='
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: '0'
|
44
|
+
type: :development
|
45
|
+
prerelease: false
|
46
|
+
version_requirements: *8270180
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: pry
|
49
|
+
requirement: &8269700 !ruby/object:Gem::Requirement
|
50
|
+
none: false
|
51
|
+
requirements:
|
52
|
+
- - ! '>='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
type: :development
|
56
|
+
prerelease: false
|
57
|
+
version_requirements: *8269700
|
58
|
+
- !ruby/object:Gem::Dependency
|
59
|
+
name: Split_Lines
|
60
|
+
requirement: &8269260 !ruby/object:Gem::Requirement
|
61
|
+
none: false
|
62
|
+
requirements:
|
63
|
+
- - ! '>='
|
64
|
+
- !ruby/object:Gem::Version
|
65
|
+
version: '0'
|
66
|
+
type: :runtime
|
67
|
+
prerelease: false
|
68
|
+
version_requirements: *8269260
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: posix-spawn
|
71
|
+
requirement: &8268760 !ruby/object:Gem::Requirement
|
72
|
+
none: false
|
73
|
+
requirements:
|
74
|
+
- - ! '>='
|
75
|
+
- !ruby/object:Gem::Version
|
76
|
+
version: '0'
|
77
|
+
type: :runtime
|
78
|
+
prerelease: false
|
79
|
+
version_requirements: *8268760
|
80
|
+
description: ! "\n A simple method that raises Exit_Zero::Non_Zero\n if $?.exitstatus
|
81
|
+
is not zero.\n Be sure to use the \"posix-spawn\" since almost everything \n
|
82
|
+
\ else is just plain wrong when handling child processes.\n "
|
83
|
+
email:
|
84
|
+
- i-hate-spam-45671204@mailinator.com
|
85
|
+
executables: []
|
86
|
+
extensions: []
|
87
|
+
extra_rdoc_files: []
|
88
|
+
files:
|
89
|
+
- .gitignore
|
90
|
+
- Exit_Zero.gemspec
|
91
|
+
- Gemfile
|
92
|
+
- Rakefile
|
93
|
+
- lib/Exit_Zero.rb
|
94
|
+
- lib/Exit_Zero/version.rb
|
95
|
+
- spec/helper.rb
|
96
|
+
- spec/main.rb
|
97
|
+
- spec/tests/Exit_Zero.rb
|
98
|
+
- spec/tests/bin.rb
|
99
|
+
homepage: ''
|
100
|
+
licenses: []
|
101
|
+
post_install_message:
|
102
|
+
rdoc_options: []
|
103
|
+
require_paths:
|
104
|
+
- lib
|
105
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
106
|
+
none: false
|
107
|
+
requirements:
|
108
|
+
- - ! '>='
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
111
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
112
|
+
none: false
|
113
|
+
requirements:
|
114
|
+
- - ! '>='
|
115
|
+
- !ruby/object:Gem::Version
|
116
|
+
version: '0'
|
117
|
+
requirements: []
|
118
|
+
rubyforge_project:
|
119
|
+
rubygems_version: 1.8.17
|
120
|
+
signing_key:
|
121
|
+
specification_version: 3
|
122
|
+
summary: Make sure your last process exited with 0.
|
123
|
+
test_files: []
|