guard-spork 0.1.6 → 0.1.7
Sign up to get free protection for your applications and to get access to all the features.
- data/README.rdoc +20 -21
- data/lib/guard/spork/runner.rb +49 -4
- data/lib/guard/spork/version.rb +1 -1
- metadata +22 -37
data/README.rdoc
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
= Guard::Spork
|
2
2
|
|
3
|
-
Spork
|
3
|
+
Guard::Spork allows to automatically & intelligently start/reload your RSpec/Cucumber {Spork}[https://github.com/timcharper/spork] server(s).
|
4
4
|
|
5
|
-
- Compatible with Spork 0.8.4 & 0.9.0.rc3
|
5
|
+
- Compatible with Spork 0.8.4 & 0.9.0.rc3.
|
6
6
|
- Tested on Ruby 1.8.6, 1.8.7 & 1.9.2.
|
7
7
|
|
8
8
|
== Install
|
9
9
|
|
10
|
-
Please be sure to have {Guard}[
|
10
|
+
Please be sure to have {Guard}[https://github.com/guard/guard] installed before continue.
|
11
11
|
|
12
12
|
Install the gem:
|
13
13
|
|
@@ -23,14 +23,13 @@ Add guard definition to your Guardfile with:
|
|
23
23
|
|
24
24
|
== Usage
|
25
25
|
|
26
|
-
Please read {Guard usage doc}[
|
26
|
+
Please read {Guard usage doc}[https://github.com/guard/guard#readme].
|
27
27
|
|
28
28
|
== Guardfile
|
29
29
|
|
30
|
-
|
31
|
-
Please read {Guard doc}[http://github.com/guard/guard#readme] for more info about Guardfile DSL.
|
30
|
+
Please read {Guard doc}[https://github.com/guard/guard#readme] for more info about the Guardfile DSL.
|
32
31
|
|
33
|
-
|
32
|
+
<b>IMPORTANT: place Spork guard before RSpec/Cucumber guards!</b>
|
34
33
|
|
35
34
|
=== Rails app
|
36
35
|
|
@@ -44,19 +43,19 @@ Please read {Guard doc}[http://github.com/guard/guard#readme] for more info abou
|
|
44
43
|
|
45
44
|
=== Running specs over Spork
|
46
45
|
|
47
|
-
Pass the
|
46
|
+
Pass the <tt>:cli => "--drb"</tt> option to {Guard::RSpec}[https://github.com/guard/guard-rspec] and/or {Guard::Cucumber}[https://github.com/guard/guard-cucumber] to run them over the Spork DRb server:
|
48
47
|
|
49
|
-
guard 'rspec', :
|
48
|
+
guard 'rspec', :cli => "--drb" do
|
50
49
|
...
|
51
50
|
end
|
52
51
|
|
53
|
-
guard 'cucumber', :
|
52
|
+
guard 'cucumber', :cli => "--drb" do
|
54
53
|
...
|
55
54
|
end
|
56
55
|
|
57
56
|
== Options
|
58
57
|
|
59
|
-
Spork
|
58
|
+
Guard::Spork automatically detect RSpec/Cucumber/Bundler presence but you can disable any of them with the corresponding options:
|
60
59
|
|
61
60
|
guard 'spork', :cucumber => false, :bundler => false do
|
62
61
|
...
|
@@ -64,29 +63,29 @@ Spork guard automatically detect RSpec/Cucumber/Bundler presence but you can dis
|
|
64
63
|
|
65
64
|
Available options:
|
66
65
|
|
67
|
-
:wait => 30 # Seconds to wait server
|
66
|
+
:wait => 30 # Seconds to wait for the server to starts, default: 20
|
68
67
|
:cucumber => false
|
69
68
|
:rspec => false
|
70
|
-
:bundler => false #
|
71
|
-
:rspec_port =>
|
72
|
-
:cucumber_port =>
|
69
|
+
:bundler => false # Don't use "bundle exec"
|
70
|
+
:rspec_port => 1234 # Default: 8989
|
71
|
+
:cucumber_port => 4321 # Default: 8990
|
73
72
|
|
74
73
|
== Common troubleshooting
|
75
74
|
|
76
|
-
If you can start Spork manually but get the following error message when using Spork
|
75
|
+
If you can start Spork manually but get the following error message when using Guard::Spork:
|
77
76
|
|
78
|
-
Starting Spork for RSpec ERROR: Could not start Spork for RSpec. Make sure you can use it manually first.
|
77
|
+
Starting Spork for RSpec ERROR: Could not start Spork for RSpec/Cucumber. Make sure you can use it manually first.
|
79
78
|
|
80
|
-
Try to increase the value of the
|
79
|
+
Try to increase the value of the <tt>:wait</tt> option before any further investigation.
|
81
80
|
|
82
81
|
== Development
|
83
82
|
|
84
|
-
- Source hosted at {GitHub}[
|
85
|
-
- Report issues/Questions/Feature requests on {GitHub Issues}[
|
83
|
+
- Source hosted at {GitHub}[https://github.com/guard/guard-spork]
|
84
|
+
- Report issues/Questions/Feature requests on {GitHub Issues}[https://github.com/guard/guard-spork/issues]
|
86
85
|
|
87
86
|
Pull requests are very welcome! Make sure your patches are well tested. Please create a topic branch for every separate change
|
88
87
|
you make.
|
89
88
|
|
90
89
|
== Authors
|
91
90
|
|
92
|
-
{Thibaud Guillaume-Gentil}[
|
91
|
+
{Thibaud Guillaume-Gentil}[https://github.com/thibaudgg]
|
data/lib/guard/spork/runner.rb
CHANGED
@@ -1,5 +1,4 @@
|
|
1
1
|
require 'socket'
|
2
|
-
require 'sfl'
|
3
2
|
|
4
3
|
module Guard
|
5
4
|
class Spork
|
@@ -11,20 +10,66 @@ module Guard
|
|
11
10
|
options[:rspec_port] ||= 8989
|
12
11
|
options[:cucumber_port] ||= 8990
|
13
12
|
@options = options
|
13
|
+
@children = {}
|
14
|
+
|
15
|
+
Signal.trap('CHLD', self.method(:reap_children))
|
14
16
|
end
|
15
17
|
|
16
18
|
def launch_sporks(action)
|
17
19
|
UI.info "#{action.capitalize}ing Spork for #{sporked_gems} ", :reset => true
|
18
|
-
|
19
|
-
|
20
|
+
spawn_child(spork_command("rspec")) if rspec?
|
21
|
+
spawn_child(spork_command("cucumber")) if cucumber?
|
20
22
|
verify_launches(action)
|
21
23
|
end
|
22
24
|
|
23
25
|
def kill_sporks
|
26
|
+
UI.debug "Killing sporks #{spork_pids.join(', ')}"
|
24
27
|
spork_pids.each { |pid| Process.kill("KILL", pid) }
|
25
28
|
end
|
26
29
|
|
27
30
|
private
|
31
|
+
def spawn_child(cmd)
|
32
|
+
pid = fork
|
33
|
+
raise "Fork failed." if pid == -1
|
34
|
+
|
35
|
+
unless pid
|
36
|
+
ignore_control_signals
|
37
|
+
exec(cmd)
|
38
|
+
end
|
39
|
+
|
40
|
+
UI.debug "Spawned spork #{pid} ('#{cmd}')"
|
41
|
+
@children[pid] = cmd
|
42
|
+
pid
|
43
|
+
end
|
44
|
+
|
45
|
+
def ignore_control_signals
|
46
|
+
Signal.trap('QUIT', 'IGNORE')
|
47
|
+
Signal.trap('INT', 'IGNORE')
|
48
|
+
Signal.trap('TSTP', 'IGNORE')
|
49
|
+
end
|
50
|
+
|
51
|
+
def reap_children(sig)
|
52
|
+
terminated_children.each do |stat|
|
53
|
+
pid = stat.pid
|
54
|
+
if cmd = @children.delete(pid)
|
55
|
+
UI.debug "Reaping spork #{pid}"
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
def terminated_children
|
61
|
+
stats = []
|
62
|
+
loop do
|
63
|
+
begin
|
64
|
+
pid, stat = Process.wait2(-1, Process::WNOHANG)
|
65
|
+
break if pid.nil?
|
66
|
+
stats << stat
|
67
|
+
rescue Errno::ECHILD
|
68
|
+
break
|
69
|
+
end
|
70
|
+
end
|
71
|
+
stats
|
72
|
+
end
|
28
73
|
|
29
74
|
def spork_command(type)
|
30
75
|
cmd_parts = []
|
@@ -61,7 +106,7 @@ module Guard
|
|
61
106
|
end
|
62
107
|
|
63
108
|
def spork_pids
|
64
|
-
|
109
|
+
@children.keys
|
65
110
|
end
|
66
111
|
|
67
112
|
def sporked_gems
|
data/lib/guard/spork/version.rb
CHANGED
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: guard-spork
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
5
|
-
prerelease:
|
4
|
+
hash: 21
|
5
|
+
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 1
|
9
|
-
-
|
10
|
-
version: 0.1.
|
9
|
+
- 7
|
10
|
+
version: 0.1.7
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Thibaud Guillaume-Gentil
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-
|
18
|
+
date: 2011-04-14 00:00:00 +02:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
@@ -50,69 +50,54 @@ dependencies:
|
|
50
50
|
version: 0.8.4
|
51
51
|
type: :runtime
|
52
52
|
version_requirements: *id002
|
53
|
-
- !ruby/object:Gem::Dependency
|
54
|
-
name: sfl
|
55
|
-
prerelease: false
|
56
|
-
requirement: &id003 !ruby/object:Gem::Requirement
|
57
|
-
none: false
|
58
|
-
requirements:
|
59
|
-
- - "="
|
60
|
-
- !ruby/object:Gem::Version
|
61
|
-
hash: 11
|
62
|
-
segments:
|
63
|
-
- 1
|
64
|
-
- 2
|
65
|
-
version: "1.2"
|
66
|
-
type: :runtime
|
67
|
-
version_requirements: *id003
|
68
53
|
- !ruby/object:Gem::Dependency
|
69
54
|
name: bundler
|
70
55
|
prerelease: false
|
71
|
-
requirement: &
|
56
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
72
57
|
none: false
|
73
58
|
requirements:
|
74
59
|
- - ~>
|
75
60
|
- !ruby/object:Gem::Version
|
76
|
-
hash:
|
61
|
+
hash: 15
|
77
62
|
segments:
|
78
63
|
- 1
|
79
64
|
- 0
|
80
|
-
-
|
81
|
-
version: 1.0.
|
65
|
+
- 12
|
66
|
+
version: 1.0.12
|
82
67
|
type: :development
|
83
|
-
version_requirements: *
|
68
|
+
version_requirements: *id003
|
84
69
|
- !ruby/object:Gem::Dependency
|
85
70
|
name: rspec
|
86
71
|
prerelease: false
|
87
|
-
requirement: &
|
72
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
88
73
|
none: false
|
89
74
|
requirements:
|
90
75
|
- - ~>
|
91
76
|
- !ruby/object:Gem::Version
|
92
|
-
hash:
|
77
|
+
hash: 27
|
93
78
|
segments:
|
94
79
|
- 2
|
95
|
-
-
|
80
|
+
- 5
|
96
81
|
- 0
|
97
|
-
version: 2.
|
82
|
+
version: 2.5.0
|
98
83
|
type: :development
|
99
|
-
version_requirements: *
|
84
|
+
version_requirements: *id004
|
100
85
|
- !ruby/object:Gem::Dependency
|
101
86
|
name: guard-rspec
|
102
87
|
prerelease: false
|
103
|
-
requirement: &
|
88
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
104
89
|
none: false
|
105
90
|
requirements:
|
106
91
|
- - ~>
|
107
92
|
- !ruby/object:Gem::Version
|
108
|
-
hash:
|
93
|
+
hash: 23
|
109
94
|
segments:
|
110
95
|
- 0
|
111
|
-
-
|
112
|
-
-
|
113
|
-
version: 0.
|
96
|
+
- 2
|
97
|
+
- 0
|
98
|
+
version: 0.2.0
|
114
99
|
type: :development
|
115
|
-
version_requirements: *
|
100
|
+
version_requirements: *id005
|
116
101
|
description: Guard::Spork automatically manage Spork DRb servers
|
117
102
|
email:
|
118
103
|
- thibaud@thibaud.me
|
@@ -161,7 +146,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
161
146
|
requirements: []
|
162
147
|
|
163
148
|
rubyforge_project: guard-spork
|
164
|
-
rubygems_version: 1.
|
149
|
+
rubygems_version: 1.3.7
|
165
150
|
signing_key:
|
166
151
|
specification_version: 3
|
167
152
|
summary: Guard gem for Spork
|