childprocess 0.1.4 → 0.1.5
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.rdoc +9 -1
- data/Rakefile +11 -10
- data/VERSION +1 -1
- data/childprocess.gemspec +45 -47
- data/lib/childprocess.rb +16 -10
- data/spec/childprocess_spec.rb +2 -1
- data/spec/spec_helper.rb +5 -5
- metadata +8 -9
- data/.gitignore +0 -21
data/README.rdoc
CHANGED
@@ -8,7 +8,15 @@ a standalone library.
|
|
8
8
|
|
9
9
|
== Usage
|
10
10
|
|
11
|
-
process = ChildProcess.build("ruby", "-e", "sleep")
|
11
|
+
process = ChildProcess.build("ruby", "-e", "sleep")
|
12
|
+
|
13
|
+
# inherit stdout/stderr from parent
|
14
|
+
process.io.inherit!
|
15
|
+
|
16
|
+
# or pass an IO
|
17
|
+
process.io.stdout = Tempfile.new("child-output")
|
18
|
+
|
19
|
+
process.start
|
12
20
|
|
13
21
|
process.started? #=> true
|
14
22
|
process.alive? #=> true
|
data/Rakefile
CHANGED
@@ -11,7 +11,7 @@ begin
|
|
11
11
|
gem.email = "jari.bakken@gmail.com"
|
12
12
|
gem.homepage = "http://github.com/jarib/childprocess"
|
13
13
|
gem.authors = ["Jari Bakken"]
|
14
|
-
gem.add_development_dependency "rspec", ">=
|
14
|
+
gem.add_development_dependency "rspec", ">= 2.0.0"
|
15
15
|
gem.add_development_dependency "yard", ">= 0"
|
16
16
|
|
17
17
|
gem.add_dependency "ffi", "~> 0.6.3"
|
@@ -22,21 +22,22 @@ rescue LoadError
|
|
22
22
|
puts "Jeweler (or a dependency) not available. Install it with: gem install jeweler"
|
23
23
|
end
|
24
24
|
|
25
|
-
require '
|
26
|
-
|
27
|
-
spec.
|
28
|
-
spec.
|
25
|
+
require 'rspec/core/rake_task'
|
26
|
+
RSpec::Core::RakeTask.new(:spec) do |spec|
|
27
|
+
spec.ruby_opts = "-I lib:spec"
|
28
|
+
spec.pattern = 'spec/**/*_spec.rb'
|
29
|
+
spec.rcov_opts = %w[--exclude spec,ruby-debug,/Library/Ruby,.gem --include lib/childprocess]
|
29
30
|
end
|
30
31
|
|
31
|
-
|
32
|
-
|
33
|
-
spec.
|
34
|
-
spec.
|
32
|
+
desc 'Run specs for rcov'
|
33
|
+
RSpec::Core::RakeTask.new(:rcov) do |spec|
|
34
|
+
spec.ruby_opts = "-I lib:spec"
|
35
|
+
spec.pattern = 'spec/**/*_spec.rb'
|
36
|
+
spec.rcov = true
|
35
37
|
spec.rcov_opts = %w[--exclude spec,ruby-debug,/Library/Ruby,.gem --include lib/childprocess]
|
36
38
|
end
|
37
39
|
|
38
40
|
task :spec => :check_dependencies
|
39
|
-
|
40
41
|
task :default => :spec
|
41
42
|
|
42
43
|
begin
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.1.
|
1
|
+
0.1.5
|
data/childprocess.gemspec
CHANGED
@@ -1,70 +1,68 @@
|
|
1
1
|
# Generated by jeweler
|
2
2
|
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
-
# Instead, edit Jeweler::Tasks in Rakefile, and run
|
3
|
+
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
4
4
|
# -*- encoding: utf-8 -*-
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{childprocess}
|
8
|
-
s.version = "0.1.
|
8
|
+
s.version = "0.1.5"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Jari Bakken"]
|
12
|
-
s.date = %q{2010-
|
12
|
+
s.date = %q{2010-12-10}
|
13
13
|
s.description = %q{This gem aims at being a simple and reliable solution for controlling external programs running in the background on any Ruby / OS combination.}
|
14
14
|
s.email = %q{jari.bakken@gmail.com}
|
15
15
|
s.extra_rdoc_files = [
|
16
16
|
"LICENSE",
|
17
|
-
|
17
|
+
"README.rdoc"
|
18
18
|
]
|
19
19
|
s.files = [
|
20
20
|
".document",
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
"spec/windows_spec.rb"
|
21
|
+
"LICENSE",
|
22
|
+
"README.rdoc",
|
23
|
+
"Rakefile",
|
24
|
+
"VERSION",
|
25
|
+
"childprocess.gemspec",
|
26
|
+
"lib/childprocess.rb",
|
27
|
+
"lib/childprocess/abstract_io.rb",
|
28
|
+
"lib/childprocess/abstract_process.rb",
|
29
|
+
"lib/childprocess/errors.rb",
|
30
|
+
"lib/childprocess/ironruby.rb",
|
31
|
+
"lib/childprocess/ironruby/process.rb",
|
32
|
+
"lib/childprocess/jruby.rb",
|
33
|
+
"lib/childprocess/jruby/io.rb",
|
34
|
+
"lib/childprocess/jruby/process.rb",
|
35
|
+
"lib/childprocess/jruby/redirector.rb",
|
36
|
+
"lib/childprocess/unix.rb",
|
37
|
+
"lib/childprocess/unix/io.rb",
|
38
|
+
"lib/childprocess/unix/process.rb",
|
39
|
+
"lib/childprocess/windows.rb",
|
40
|
+
"lib/childprocess/windows/api.rb",
|
41
|
+
"lib/childprocess/windows/constants.rb",
|
42
|
+
"lib/childprocess/windows/functions.rb",
|
43
|
+
"lib/childprocess/windows/handle.rb",
|
44
|
+
"lib/childprocess/windows/io.rb",
|
45
|
+
"lib/childprocess/windows/process.rb",
|
46
|
+
"lib/childprocess/windows/structs.rb",
|
47
|
+
"spec/abstract_io_spec.rb",
|
48
|
+
"spec/childprocess_spec.rb",
|
49
|
+
"spec/jruby_spec.rb",
|
50
|
+
"spec/spec.opts",
|
51
|
+
"spec/spec_helper.rb",
|
52
|
+
"spec/unix_spec.rb",
|
53
|
+
"spec/windows_spec.rb"
|
55
54
|
]
|
56
55
|
s.homepage = %q{http://github.com/jarib/childprocess}
|
57
|
-
s.rdoc_options = ["--charset=UTF-8"]
|
58
56
|
s.require_paths = ["lib"]
|
59
57
|
s.rubygems_version = %q{1.3.7}
|
60
58
|
s.summary = %q{Cross-platform ruby library for managing child processes.}
|
61
59
|
s.test_files = [
|
62
60
|
"spec/abstract_io_spec.rb",
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
61
|
+
"spec/childprocess_spec.rb",
|
62
|
+
"spec/jruby_spec.rb",
|
63
|
+
"spec/spec_helper.rb",
|
64
|
+
"spec/unix_spec.rb",
|
65
|
+
"spec/windows_spec.rb"
|
68
66
|
]
|
69
67
|
|
70
68
|
if s.respond_to? :specification_version then
|
@@ -72,16 +70,16 @@ Gem::Specification.new do |s|
|
|
72
70
|
s.specification_version = 3
|
73
71
|
|
74
72
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
75
|
-
s.add_development_dependency(%q<rspec>, [">=
|
73
|
+
s.add_development_dependency(%q<rspec>, [">= 2.0.0"])
|
76
74
|
s.add_development_dependency(%q<yard>, [">= 0"])
|
77
75
|
s.add_runtime_dependency(%q<ffi>, ["~> 0.6.3"])
|
78
76
|
else
|
79
|
-
s.add_dependency(%q<rspec>, [">=
|
77
|
+
s.add_dependency(%q<rspec>, [">= 2.0.0"])
|
80
78
|
s.add_dependency(%q<yard>, [">= 0"])
|
81
79
|
s.add_dependency(%q<ffi>, ["~> 0.6.3"])
|
82
80
|
end
|
83
81
|
else
|
84
|
-
s.add_dependency(%q<rspec>, [">=
|
82
|
+
s.add_dependency(%q<rspec>, [">= 2.0.0"])
|
85
83
|
s.add_dependency(%q<yard>, [">= 0"])
|
86
84
|
s.add_dependency(%q<ffi>, ["~> 0.6.3"])
|
87
85
|
end
|
data/lib/childprocess.rb
CHANGED
@@ -19,8 +19,10 @@ module ChildProcess
|
|
19
19
|
IronRuby::Process.new(args)
|
20
20
|
when :windows
|
21
21
|
Windows::Process.new(args)
|
22
|
-
|
22
|
+
when :macosx, :linux, :unix, :cygwin
|
23
23
|
Unix::Process.new(args)
|
24
|
+
else
|
25
|
+
raise Error, "unsupported platform #{platform.inspect}"
|
24
26
|
end
|
25
27
|
end
|
26
28
|
alias_method :build, :new
|
@@ -32,6 +34,8 @@ module ChildProcess
|
|
32
34
|
:ironruby
|
33
35
|
elsif RUBY_PLATFORM =~ /mswin|msys|mingw32/
|
34
36
|
:windows
|
37
|
+
elsif RUBY_PLATFORM =~ /cygwin/
|
38
|
+
:cygwin
|
35
39
|
else
|
36
40
|
os
|
37
41
|
end
|
@@ -55,7 +59,7 @@ module ChildProcess
|
|
55
59
|
host_os = RbConfig::CONFIG['host_os']
|
56
60
|
|
57
61
|
case host_os
|
58
|
-
when /mswin|msys|mingw32/
|
62
|
+
when /mswin|msys|mingw32|cygwin/
|
59
63
|
:windows
|
60
64
|
when /darwin|mac os/
|
61
65
|
:macosx
|
@@ -68,21 +72,23 @@ module ChildProcess
|
|
68
72
|
end
|
69
73
|
)
|
70
74
|
end
|
71
|
-
|
75
|
+
|
76
|
+
#
|
77
|
+
# By default, a child process will inherit open file descriptors from the parent process.
|
78
|
+
# This helper provides a cross-platform way of making sure that doesn't happen for the given file/io.
|
72
79
|
#
|
73
|
-
# By default, a child process will inherit open files and sockets from the parent process.
|
74
|
-
# This helper provides a cross-platform way of making sure that doesn't happen for the given file.
|
75
|
-
#
|
76
80
|
|
77
81
|
def close_on_exec(file)
|
78
|
-
if
|
79
|
-
|
82
|
+
if file.respond_to?(:close_on_exec=)
|
83
|
+
file.close_on_exec = true
|
80
84
|
elsif file.respond_to?(:fcntl) && defined?(Fcntl::FD_CLOEXEC)
|
81
85
|
file.fcntl Fcntl::F_SETFD, Fcntl::FD_CLOEXEC
|
86
|
+
elsif windows?
|
87
|
+
Windows.dont_inherit file
|
82
88
|
else
|
83
|
-
raise Error, "not sure how to set close-on-exec for #{file.inspect} on #{platform}"
|
89
|
+
raise Error, "not sure how to set close-on-exec for #{file.inspect} on #{platform.inspect}"
|
84
90
|
end
|
85
91
|
end
|
86
92
|
|
87
93
|
end # class << self
|
88
|
-
end # ChildProcess
|
94
|
+
end # ChildProcess
|
data/spec/childprocess_spec.rb
CHANGED
@@ -104,8 +104,9 @@ describe ChildProcess do
|
|
104
104
|
process.io.inherit!
|
105
105
|
|
106
106
|
process.start
|
107
|
-
|
107
|
+
sleep 0.5 # give the forked process a chance to exec() (which closes the fd)
|
108
108
|
|
109
|
+
server.close
|
109
110
|
lambda { TCPServer.new("localhost", 4433).close }.should_not raise_error
|
110
111
|
end
|
111
112
|
|
data/spec/spec_helper.rb
CHANGED
@@ -2,10 +2,10 @@ $LOAD_PATH.unshift(File.dirname(__FILE__))
|
|
2
2
|
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
3
3
|
|
4
4
|
require 'childprocess'
|
5
|
-
require '
|
6
|
-
require 'spec/autorun'
|
5
|
+
require 'rspec'
|
7
6
|
require 'tempfile'
|
8
|
-
require
|
7
|
+
require 'socket'
|
8
|
+
require 'stringio'
|
9
9
|
|
10
10
|
module ChildProcessSpecHelper
|
11
11
|
RUBY = defined?(Gem) ? Gem.ruby : 'ruby'
|
@@ -74,7 +74,7 @@ module ChildProcessSpecHelper
|
|
74
74
|
until ok || Time.now >= end_time
|
75
75
|
begin
|
76
76
|
ok = yield
|
77
|
-
rescue
|
77
|
+
rescue RSpec::Expectations::ExpectationNotMetError => last_error
|
78
78
|
end
|
79
79
|
end
|
80
80
|
|
@@ -89,7 +89,7 @@ end # ChildProcessSpecHelper
|
|
89
89
|
|
90
90
|
Thread.abort_on_exception = true
|
91
91
|
|
92
|
-
|
92
|
+
RSpec.configure do |config|
|
93
93
|
config.include(ChildProcessSpecHelper)
|
94
94
|
config.after(:each) {
|
95
95
|
@process && @process.alive? && @process.stop
|
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 0
|
7
7
|
- 1
|
8
|
-
-
|
9
|
-
version: 0.1.
|
8
|
+
- 5
|
9
|
+
version: 0.1.5
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Jari Bakken
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2010-
|
17
|
+
date: 2010-12-10 00:00:00 +01:00
|
18
18
|
default_executable:
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
@@ -26,10 +26,10 @@ dependencies:
|
|
26
26
|
- - ">="
|
27
27
|
- !ruby/object:Gem::Version
|
28
28
|
segments:
|
29
|
-
- 1
|
30
29
|
- 2
|
31
|
-
-
|
32
|
-
|
30
|
+
- 0
|
31
|
+
- 0
|
32
|
+
version: 2.0.0
|
33
33
|
type: :development
|
34
34
|
version_requirements: *id001
|
35
35
|
- !ruby/object:Gem::Dependency
|
@@ -71,7 +71,6 @@ extra_rdoc_files:
|
|
71
71
|
- README.rdoc
|
72
72
|
files:
|
73
73
|
- .document
|
74
|
-
- .gitignore
|
75
74
|
- LICENSE
|
76
75
|
- README.rdoc
|
77
76
|
- Rakefile
|
@@ -110,8 +109,8 @@ homepage: http://github.com/jarib/childprocess
|
|
110
109
|
licenses: []
|
111
110
|
|
112
111
|
post_install_message:
|
113
|
-
rdoc_options:
|
114
|
-
|
112
|
+
rdoc_options: []
|
113
|
+
|
115
114
|
require_paths:
|
116
115
|
- lib
|
117
116
|
required_ruby_version: !ruby/object:Gem::Requirement
|