childprocess 0.0.2 → 0.0.3

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/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.2
1
+ 0.0.3
@@ -0,0 +1,76 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
4
+ # -*- encoding: utf-8 -*-
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = %q{childprocess}
8
+ s.version = "0.0.3"
9
+
10
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
+ s.authors = ["Jari Bakken"]
12
+ s.date = %q{2010-10-08}
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
+ s.email = %q{jari.bakken@gmail.com}
15
+ s.extra_rdoc_files = [
16
+ "LICENSE",
17
+ "README.rdoc"
18
+ ]
19
+ s.files = [
20
+ ".document",
21
+ ".gitignore",
22
+ "LICENSE",
23
+ "README.rdoc",
24
+ "Rakefile",
25
+ "VERSION",
26
+ "childprocess.gemspec",
27
+ "lib/childprocess.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/process.rb",
34
+ "lib/childprocess/unix.rb",
35
+ "lib/childprocess/unix/process.rb",
36
+ "lib/childprocess/windows.rb",
37
+ "lib/childprocess/windows/api.rb",
38
+ "lib/childprocess/windows/constants.rb",
39
+ "lib/childprocess/windows/functions.rb",
40
+ "lib/childprocess/windows/handle.rb",
41
+ "lib/childprocess/windows/process.rb",
42
+ "lib/childprocess/windows/structs.rb",
43
+ "spec/childprocess_spec.rb",
44
+ "spec/spec.opts",
45
+ "spec/spec_helper.rb"
46
+ ]
47
+ s.homepage = %q{http://github.com/jarib/childprocess}
48
+ s.rdoc_options = ["--charset=UTF-8"]
49
+ s.require_paths = ["lib"]
50
+ s.rubygems_version = %q{1.3.5}
51
+ s.summary = %q{Cross-platform ruby library for managing child processes.}
52
+ s.test_files = [
53
+ "spec/childprocess_spec.rb",
54
+ "spec/spec_helper.rb"
55
+ ]
56
+
57
+ if s.respond_to? :specification_version then
58
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
59
+ s.specification_version = 3
60
+
61
+ if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
62
+ s.add_development_dependency(%q<rspec>, [">= 1.2.9"])
63
+ s.add_development_dependency(%q<yard>, [">= 0"])
64
+ s.add_runtime_dependency(%q<ffi>, ["~> 0.6.3"])
65
+ else
66
+ s.add_dependency(%q<rspec>, [">= 1.2.9"])
67
+ s.add_dependency(%q<yard>, [">= 0"])
68
+ s.add_dependency(%q<ffi>, ["~> 0.6.3"])
69
+ end
70
+ else
71
+ s.add_dependency(%q<rspec>, [">= 1.2.9"])
72
+ s.add_dependency(%q<yard>, [">= 0"])
73
+ s.add_dependency(%q<ffi>, ["~> 0.6.3"])
74
+ end
75
+ end
76
+
@@ -50,7 +50,7 @@ module ChildProcess
50
50
  end
51
51
 
52
52
  def crashed?
53
- @exit_code && @exit_code != 0
53
+ exited? && @exit_code != 0
54
54
  end
55
55
 
56
56
  def poll_for_exit(timeout)
@@ -28,7 +28,6 @@ module ChildProcess
28
28
  def exited?
29
29
  return true if @exit_code
30
30
 
31
-
32
31
  assert_started
33
32
  pid, status = ::Process.waitpid2(@pid, ::Process::WNOHANG)
34
33
 
@@ -2,34 +2,59 @@ require File.expand_path('../spec_helper', __FILE__)
2
2
 
3
3
  describe ChildProcess do
4
4
 
5
- EXIT_TIMEOUT = ChildProcess.platform == :jruby ? 2 : 1
5
+ EXIT_TIMEOUT = 10
6
6
 
7
7
  it "returns self when started" do
8
8
  process = sleeping_ruby
9
+
9
10
  process.start.should == process
10
11
  process.should be_started
11
12
  end
12
13
 
13
- it "should know if the process crashed" do
14
+ it "knows if the process crashed" do
14
15
  process = exit_with(1).start
15
- process.poll_for_exit(EXIT_TIMEOUT)
16
16
 
17
- process.should be_exited
18
- process.should be_crashed
17
+ within(EXIT_TIMEOUT) {
18
+ process.should be_crashed
19
+ }
19
20
  end
20
21
 
21
- it "should know if the process didn't crash" do
22
+ it "knows if the process didn't crash" do
22
23
  process = exit_with(0).start
23
24
  process.poll_for_exit(EXIT_TIMEOUT)
24
25
 
25
- process.should be_exited
26
26
  process.should_not be_crashed
27
27
  end
28
28
 
29
- it "should escalate if TERM is ignored" do
29
+ it "escalates if TERM is ignored" do
30
30
  process = ignored('TERM').start
31
31
  process.stop
32
32
  process.should be_exited
33
33
  end
34
34
 
35
+ it "lets child process inherit the environment of the current process" do
36
+ Tempfile.open("env-spec") do |file|
37
+ with_env('env-spec' => 'yes') do
38
+ process = write_env(file.path).start
39
+ process.poll_for_exit(EXIT_TIMEOUT)
40
+ end
41
+
42
+ file.rewind
43
+ child_env = eval(file.read)
44
+ child_env['env-spec'].should == 'yes'
45
+ end
46
+ end
47
+
48
+ it "passes arguments to the child" do
49
+ args = ["foo", "bar"]
50
+
51
+ Tempfile.open("argv-spec") do |file|
52
+ process = write_argv(file.path, *args).start
53
+ process.poll_for_exit(EXIT_TIMEOUT)
54
+
55
+ file.rewind
56
+ file.read.should == args.inspect
57
+ end
58
+ end
59
+
35
60
  end
data/spec/spec_helper.rb CHANGED
@@ -6,9 +6,10 @@ require 'spec/autorun'
6
6
  require 'tempfile'
7
7
 
8
8
  module ChildProcessSpecHelper
9
+ RUBY = defined?(Gem) ? Gem.ruby : 'ruby'
9
10
 
10
11
  def ruby_process(*args)
11
- @process = ChildProcess.build("ruby" , *args)
12
+ @process = ChildProcess.build(RUBY , *args)
12
13
  end
13
14
 
14
15
  def sleeping_ruby
@@ -24,10 +25,35 @@ module ChildProcessSpecHelper
24
25
  ruby_process tmp_script(code)
25
26
  end
26
27
 
28
+ def write_env(path)
29
+ code = <<-RUBY
30
+ File.open(#{path.inspect}, "w") { |f| f << ENV.inspect }
31
+ RUBY
32
+
33
+ ruby_process tmp_script(code)
34
+ end
35
+
36
+ def write_argv(path, *args)
37
+ code = <<-RUBY
38
+ File.open(#{path.inspect}, "w") { |f| f << ARGV.inspect }
39
+ RUBY
40
+
41
+ ruby_process(tmp_script(code), *args)
42
+ end
43
+
27
44
  def exit_with(exit_code)
28
45
  ruby_process(tmp_script("exit(#{exit_code})"))
29
46
  end
30
47
 
48
+ def with_env(hash)
49
+ hash.each { |k,v| ENV[k] = v }
50
+ begin
51
+ yield
52
+ ensure
53
+ hash.each_key { |k| ENV[k] = nil }
54
+ end
55
+ end
56
+
31
57
  def tmp_script(code)
32
58
  tf = Tempfile.new("childprocess-temp")
33
59
  tf << code
@@ -37,7 +63,23 @@ module ChildProcessSpecHelper
37
63
 
38
64
  tf.path
39
65
  end
40
- end
66
+
67
+ def within(seconds, &blk)
68
+ end_time = Time.now + seconds
69
+ ok = false
70
+ last_error = nil
71
+
72
+ until ok || Time.now >= end_time
73
+ begin
74
+ ok = yield
75
+ rescue Spec::Expectations::ExpectationNotMetError => last_error
76
+ end
77
+ end
78
+
79
+ raise last_error unless ok
80
+ end
81
+
82
+ end # ChildProcessSpecHelper
41
83
 
42
84
 
43
85
  Spec::Runner.configure do |config|
metadata CHANGED
@@ -1,12 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: childprocess
3
3
  version: !ruby/object:Gem::Version
4
- prerelease: false
5
- segments:
6
- - 0
7
- - 0
8
- - 2
9
- version: 0.0.2
4
+ version: 0.0.3
10
5
  platform: ruby
11
6
  authors:
12
7
  - Jari Bakken
@@ -19,44 +14,34 @@ default_executable:
19
14
  dependencies:
20
15
  - !ruby/object:Gem::Dependency
21
16
  name: rspec
22
- prerelease: false
23
- requirement: &id001 !ruby/object:Gem::Requirement
17
+ type: :development
18
+ version_requirement:
19
+ version_requirements: !ruby/object:Gem::Requirement
24
20
  requirements:
25
21
  - - ">="
26
22
  - !ruby/object:Gem::Version
27
- segments:
28
- - 1
29
- - 2
30
- - 9
31
23
  version: 1.2.9
32
- type: :development
33
- version_requirements: *id001
24
+ version:
34
25
  - !ruby/object:Gem::Dependency
35
26
  name: yard
36
- prerelease: false
37
- requirement: &id002 !ruby/object:Gem::Requirement
27
+ type: :development
28
+ version_requirement:
29
+ version_requirements: !ruby/object:Gem::Requirement
38
30
  requirements:
39
31
  - - ">="
40
32
  - !ruby/object:Gem::Version
41
- segments:
42
- - 0
43
33
  version: "0"
44
- type: :development
45
- version_requirements: *id002
34
+ version:
46
35
  - !ruby/object:Gem::Dependency
47
36
  name: ffi
48
- prerelease: false
49
- requirement: &id003 !ruby/object:Gem::Requirement
37
+ type: :runtime
38
+ version_requirement:
39
+ version_requirements: !ruby/object:Gem::Requirement
50
40
  requirements:
51
41
  - - ~>
52
42
  - !ruby/object:Gem::Version
53
- segments:
54
- - 0
55
- - 6
56
- - 3
57
43
  version: 0.6.3
58
- type: :runtime
59
- version_requirements: *id003
44
+ version:
60
45
  description: This gem aims at being a simple and reliable solution for controlling external programs running in the background on any Ruby / OS combination.
61
46
  email: jari.bakken@gmail.com
62
47
  executables: []
@@ -73,6 +58,7 @@ files:
73
58
  - README.rdoc
74
59
  - Rakefile
75
60
  - VERSION
61
+ - childprocess.gemspec
76
62
  - lib/childprocess.rb
77
63
  - lib/childprocess/abstract_process.rb
78
64
  - lib/childprocess/errors.rb
@@ -105,20 +91,18 @@ required_ruby_version: !ruby/object:Gem::Requirement
105
91
  requirements:
106
92
  - - ">="
107
93
  - !ruby/object:Gem::Version
108
- segments:
109
- - 0
110
94
  version: "0"
95
+ version:
111
96
  required_rubygems_version: !ruby/object:Gem::Requirement
112
97
  requirements:
113
98
  - - ">="
114
99
  - !ruby/object:Gem::Version
115
- segments:
116
- - 0
117
100
  version: "0"
101
+ version:
118
102
  requirements: []
119
103
 
120
104
  rubyforge_project:
121
- rubygems_version: 1.3.6
105
+ rubygems_version: 1.3.5
122
106
  signing_key:
123
107
  specification_version: 3
124
108
  summary: Cross-platform ruby library for managing child processes.