process_watcher 0.3 → 0.4
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.
@@ -31,6 +31,42 @@ module ProcessWatcher
|
|
31
31
|
include ::Windows::Synchronize
|
32
32
|
include ::Windows::Handle
|
33
33
|
|
34
|
+
# Quacks like Process::Status, which we cannot instantiate ourselves because
|
35
|
+
# has no public new method.
|
36
|
+
class Status
|
37
|
+
# Process ID
|
38
|
+
attr_reader :pid
|
39
|
+
|
40
|
+
# Process exit code
|
41
|
+
attr_reader :exitstatus
|
42
|
+
|
43
|
+
# === Parameters
|
44
|
+
# pid(Integer):: Process ID.
|
45
|
+
#
|
46
|
+
# exitstatus(Integer):: Process exit code
|
47
|
+
def initialize(pid, exitstatus)
|
48
|
+
@pid = pid
|
49
|
+
@exitstatus = exitstatus
|
50
|
+
end
|
51
|
+
|
52
|
+
# Simulates Process::Status.exited?
|
53
|
+
#
|
54
|
+
# === Returns
|
55
|
+
# true in all cases because this object cannot be returned until the
|
56
|
+
# process exits
|
57
|
+
def exited?
|
58
|
+
return true
|
59
|
+
end
|
60
|
+
|
61
|
+
# Simulates Process::Status.success?
|
62
|
+
#
|
63
|
+
# === Returns
|
64
|
+
# true if the process returned zero as its exit code
|
65
|
+
def success?
|
66
|
+
return @exitstatus ? (0 == @exitstatus) : true;
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
34
70
|
# Spawn given process and callback given block with output and exit code
|
35
71
|
#
|
36
72
|
# === Parameters
|
@@ -58,10 +94,12 @@ module ProcessWatcher
|
|
58
94
|
case @handle
|
59
95
|
when INVALID_HANDLE_VALUE
|
60
96
|
# Something bad happened
|
61
|
-
|
97
|
+
exit_code = 1
|
98
|
+
yield(:exit_code => exit_code, :exit_status => Status.new(@io.pid, exit_code))
|
62
99
|
when 0
|
63
100
|
# Process already finished
|
64
|
-
|
101
|
+
exit_code = 0
|
102
|
+
yield(:exit_code => exit_code, :exit_status => Status.new(@io.pid, exit_code))
|
65
103
|
else
|
66
104
|
# Start output read
|
67
105
|
@reader = Thread.new do
|
@@ -77,7 +115,7 @@ module ProcessWatcher
|
|
77
115
|
else
|
78
116
|
exit_code = 1
|
79
117
|
end
|
80
|
-
yield(:exit_code => exit_code)
|
118
|
+
yield(:exit_code => exit_code, :exit_status => Status.new(@io.pid, exit_code))
|
81
119
|
end
|
82
120
|
end
|
83
121
|
@io.pid
|
metadata
CHANGED
@@ -1,12 +1,12 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: process_watcher
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 3
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
|
-
-
|
9
|
-
version: "0.
|
8
|
+
- 4
|
9
|
+
version: "0.4"
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Graham Hughes
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2010-11-
|
18
|
+
date: 2010-11-29 00:00:00 -08:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|