ion1-mischacks 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
data/History.txt CHANGED
@@ -1,3 +1,9 @@
1
+ === 0.0.3 / 2009-06-28
2
+
3
+ * Rename checking_exit_status as fork_and_check to make it clear it forks.
4
+ * Add catching_exit, which is now used by the do_and_exit methods.
5
+ * Pass a fallthrough exit status to do_and_exit.
6
+
1
7
  === 0.0.2 / 2009-06-28
2
8
 
3
9
  * Initial release
data/lib/mischacks.rb CHANGED
@@ -14,7 +14,7 @@
14
14
  # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
15
15
 
16
16
  module MiscHacks
17
- VERSION = '0.0.2'
17
+ VERSION = '0.0.3'
18
18
 
19
19
  class ChildError < RuntimeError
20
20
  attr_reader :status
@@ -25,7 +25,7 @@ module MiscHacks
25
25
  end
26
26
  end
27
27
 
28
- def self.checking_exit_status
28
+ def self.fork_and_check
29
29
  fork do
30
30
  yield
31
31
  end.tap do |pid|
@@ -36,27 +36,32 @@ module MiscHacks
36
36
  nil
37
37
  end
38
38
 
39
- def self.do_and_exit bang=false
40
- my_exit = if bang then method :exit! else method :exit end
39
+ def self.catching_exit final_proc, fallthrough_status
40
+ status = fallthrough_status
41
41
 
42
- status = 1
43
42
  begin
44
43
  yield
45
44
  rescue SystemExit => e
46
45
  status = e.status
47
46
  ensure
48
- my_exit.call status
47
+ final_proc.call status
49
48
  end
49
+
50
+ status
51
+ end
52
+
53
+ def self.do_and_exit status=1, &block
54
+ catching_exit method(:exit), status, &block
50
55
  end
51
56
 
52
- def self.do_and_exit! &block
53
- do_and_exit true, &block
57
+ def self.do_and_exit! status=1, &block
58
+ catching_exit method(:exit!), status, &block
54
59
  end
55
60
 
56
61
  def self.sh cmd, *args
57
62
  env = if args.last.is_a? Hash then args.pop else {} end
58
63
 
59
- checking_exit_status do
64
+ fork_and_check do
60
65
  do_and_exit! do
61
66
  begin
62
67
  env.each_pair do |k, v| ENV[k.to_s] = v.to_s end
data/mischacks.gemspec CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = %q{mischacks}
5
- s.version = "0.0.2"
5
+ s.version = "0.0.3"
6
6
 
7
7
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
8
8
  s.authors = ["Johan Kiviniemi"]
@@ -22,27 +22,65 @@ mh = MiscHacks
22
22
  ce = MiscHacks::ChildError
23
23
 
24
24
  describe mh do
25
- describe 'checking_exit_status' do
25
+ describe 'fork_and_check' do
26
26
  it 'should raise an error when child fails' do
27
- lambda do mh.checking_exit_status do exit 1 end end.should raise_error ce
28
- lambda do mh.checking_exit_status do exit! 1 end end.should raise_error ce
27
+ lambda do mh.fork_and_check do exit 1 end end.should raise_error ce
28
+ lambda do mh.fork_and_check do exit! 1 end end.should raise_error ce
29
29
 
30
- lambda do mh.checking_exit_status do exit 0 end end.should_not raise_error
31
- lambda do mh.checking_exit_status do exit! 0 end end.should_not raise_error
30
+ lambda do mh.fork_and_check do exit 0 end end.should_not raise_error
31
+ lambda do mh.fork_and_check do exit! 0 end end.should_not raise_error
32
32
  end
33
33
 
34
34
  it 'should handle exec' do
35
- lambda do mh.checking_exit_status do exec 'false' end end.should raise_error ce
36
- lambda do mh.checking_exit_status do exec 'true' end end.should_not raise_error
35
+ lambda do mh.fork_and_check do exec 'false' end end.should raise_error ce
36
+ lambda do mh.fork_and_check do exec 'true' end end.should_not raise_error
37
+ end
38
+ end
39
+
40
+ describe 'catching_exit' do
41
+ it 'should call final_proc with the fallthrough status when the block does not exit' do
42
+ [0, 1, 42, 255].each do |i|
43
+ foo = nil
44
+ mh.catching_exit(lambda {|status| foo = status }, 2) do end
45
+ foo.should == 2
46
+ end
47
+
48
+ end
49
+
50
+ it 'should call final_proc with the exit status when the block exits' do
51
+ [0, 1, 42, 255].each do |i|
52
+ foo = nil
53
+ mh.catching_exit(lambda {|status| foo = status }, 2) do exit i end
54
+ foo.should == i
55
+ end
37
56
  end
38
57
  end
39
58
 
40
59
  describe 'do_and_exit' do
41
- it 'should have an exit status of 1 when the block does not exit' do
60
+ it 'should have the proper exit status when the block does not exit' do
42
61
  lambda do
43
62
  mh.do_and_exit do end
44
63
  exit 2 # Should never reach this.
45
64
  end.should exit_with 1
65
+
66
+ lambda do
67
+ mh.do_and_exit! do end
68
+ exit! 2 # Should never reach this.
69
+ end.should exit_with 1
70
+
71
+ [0, 1, 42, 255].each do |i|
72
+ lambda do
73
+ mh.do_and_exit i do end
74
+ exit 2 # Should never reach this.
75
+ end.should exit_with i
76
+ end
77
+
78
+ [0, 1, 42, 255].each do |i|
79
+ lambda do
80
+ mh.do_and_exit! i do end
81
+ exit! 2 # Should never reach this.
82
+ end.should exit_with i
83
+ end
46
84
  end
47
85
 
48
86
  it 'should have the proper exit status when the block exits' do
@@ -52,13 +90,20 @@ describe mh do
52
90
  exit 2 # Should never reach this.
53
91
  end.should exit_with i
54
92
  end
93
+
94
+ [0, 1, 42, 255].each do |i|
95
+ lambda do
96
+ mh.do_and_exit! do exit! i end
97
+ exit! 2 # Should never reach this.
98
+ end.should exit_with i
99
+ end
55
100
  end
56
101
 
57
102
  it 'should handle exec' do
58
103
  [0, 1, 42, 255].each do |i|
59
104
  lambda do
60
- mh.do_and_exit do exec *%W{sh -c #{'exit "$1"'} sh #{i}} end
61
- exit 2 # Should never reach this.
105
+ mh.do_and_exit! do exec *%W{sh -c #{'exit "$1"'} sh #{i}} end
106
+ exit! 2 # Should never reach this.
62
107
  end.should exit_with i
63
108
  end
64
109
  end
@@ -72,14 +117,6 @@ describe mh do
72
117
  end
73
118
  end.should exit_with 2
74
119
 
75
- lambda do
76
- begin
77
- mh.do_and_exit true do end
78
- rescue SystemExit => e
79
- exit 2 # Should never reach this.
80
- end
81
- end.should exit_with 1
82
-
83
120
  lambda do
84
121
  begin
85
122
  mh.do_and_exit! do end
data/spec/spec_helper.rb CHANGED
@@ -22,7 +22,7 @@ Spec::Matchers.define :exit_with do |expected|
22
22
  @status = 0
23
23
 
24
24
  begin
25
- MiscHacks.checking_exit_status do
25
+ MiscHacks.fork_and_check do
26
26
  block.call
27
27
  end
28
28
  rescue MiscHacks::ChildError => e
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ion1-mischacks
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Johan Kiviniemi