Class: Spork::Server
Overview
This is based off of spec_server.rb from rspec-rails (David Chelimsky), which was based on Florian Weber’s TDDMate
Defined Under Namespace
Classes: Cucumber, RSpec
Constant Summary
collapse
- LOAD_PREFERENCE =
['RSpec', 'Cucumber']
- BOOTSTRAP_FILE =
File.dirname(__FILE__) + "/../../assets/bootstrap.rb"
- @@supported_servers =
[]
Class Method Summary
collapse
Instance Method Summary
collapse
included, #stderr, #stdout
Class Method Details
.available? ⇒ Boolean
44
45
46
|
# File 'lib/spork/server.rb', line 44
def self.available?
File.exist?(helper_file)
end
|
.available_servers ⇒ Object
32
33
34
|
# File 'lib/spork/server.rb', line 32
def self.available_servers
supported_servers.select { |s| s.available? }
end
|
.bootstrap ⇒ Object
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
|
# File 'lib/spork/server.rb', line 56
def self.bootstrap
if bootstrapped?
stderr.puts "Already bootstrapped!"
return
end
stderr.puts "Bootstrapping #{helper_file}."
contents = File.read(helper_file)
bootstrap_code = File.read(BOOTSTRAP_FILE)
File.open(helper_file, "wb") do |f|
f.puts bootstrap_code
f.puts contents
end
stderr.puts "Done. Edit #{helper_file} now with your favorite text editor and follow the instructions."
true
end
|
.bootstrapped? ⇒ Boolean
52
53
54
|
# File 'lib/spork/server.rb', line 52
def self.bootstrapped?
File.read(helper_file).include?("Spork.prefork")
end
|
.helper_file ⇒ Object
20
21
22
|
# File 'lib/spork/server.rb', line 20
def self.helper_file
raise NotImplemented
end
|
.inherited(subclass) ⇒ Object
28
29
30
|
# File 'lib/spork/server.rb', line 28
def self.inherited(subclass)
@@supported_servers << subclass
end
|
.load_preference_index ⇒ Object
.port ⇒ Object
16
17
18
|
# File 'lib/spork/server.rb', line 16
def self.port
raise NotImplemented
end
|
.run ⇒ Object
73
74
75
76
|
# File 'lib/spork/server.rb', line 73
def self.run
return unless available?
new.listen
end
|
.server_name ⇒ Object
24
25
26
|
# File 'lib/spork/server.rb', line 24
def self.server_name
self.name.gsub('Spork::Server::', '')
end
|
.supported_servers(starting_with = nil) ⇒ Object
36
37
38
39
40
41
42
|
# File 'lib/spork/server.rb', line 36
def self.supported_servers(starting_with = nil)
@@supported_servers.sort! { |a,b| a.load_preference_index <=> b.load_preference_index }
return @@supported_servers if starting_with.nil?
@@supported_servers.select do |s|
s.server_name.match(/^#{Regexp.escape(starting_with)}/i)
end
end
|
Instance Method Details
#helper_file ⇒ Object
92
93
94
|
# File 'lib/spork/server.rb', line 92
def helper_file
self.class.helper_file
end
|
#listen ⇒ Object
78
79
80
81
82
83
84
85
86
|
# File 'lib/spork/server.rb', line 78
def listen
trap("SIGINT") { sig_int_received }
trap("SIGTERM") { abort; exit!(0) }
trap("USR2") { abort; restart } if Signal.list.has_key?("USR2")
DRb.start_service("druby://127.0.0.1:#{port}", self)
stderr.puts "Spork is ready and listening on #{port}!"
stderr.flush
DRb.thread.join
end
|
#port ⇒ Object
88
89
90
|
# File 'lib/spork/server.rb', line 88
def port
self.class.port
end
|
#run(argv, stderr, stdout) ⇒ Object
96
97
98
99
100
101
102
103
104
105
|
# File 'lib/spork/server.rb', line 96
def run(argv, stderr, stdout)
return false if running?
@child = ::Spork::Forker.new do
$stdout, $stderr = stdout, stderr
Spork.exec_each_run { load helper_file }
run_tests(argv, stderr, stdout)
end
@child.result
end
|
#running? ⇒ Boolean
107
108
109
|
# File 'lib/spork/server.rb', line 107
def running?
@child && @child.running?
end
|