Class: Spork::Server
- Inherits:
-
Object
- Object
- Spork::Server
- Defined in:
- lib/spork/server.rb
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
Constant Summary collapse
- LOAD_PREFERENCE =
['RSpec', 'Cucumber']
- BOOTSTRAP_FILE =
File.dirname(__FILE__) + "/../../assets/bootstrap.rb"
- @@supported_servers =
[]
Class Method Summary collapse
- .available? ⇒ Boolean
- .available_servers ⇒ Object
- .bootstrap ⇒ Object
- .bootstrapped? ⇒ Boolean
- .helper_file ⇒ Object
- .inherited(subclass) ⇒ Object
- .load_preference_index ⇒ Object
- .port ⇒ Object
- .run ⇒ Object
- .server_name ⇒ Object
- .supported_servers(starting_with = nil) ⇒ Object
- .using_rails? ⇒ Boolean
Instance Method Summary collapse
- #helper_file ⇒ Object
- #listen ⇒ Object
- #port ⇒ Object
- #run(argv, stderr, stdout) ⇒ Object
- #running? ⇒ Boolean
Class Method Details
.available? ⇒ Boolean
39 40 41 |
# File 'lib/spork/server.rb', line 39 def self.available? File.exist?(helper_file) end |
.available_servers ⇒ Object
27 28 29 |
# File 'lib/spork/server.rb', line 27 def self.available_servers supported_servers.select { |s| s.available? } end |
.bootstrap ⇒ Object
55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 |
# File 'lib/spork/server.rb', line 55 def self.bootstrap if bootstrapped? puts "Already bootstrapped!" return end 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 puts "Done. Edit #{helper_file} now with your favorite text editor and follow the instructions." true end |
.bootstrapped? ⇒ Boolean
51 52 53 |
# File 'lib/spork/server.rb', line 51 def self.bootstrapped? File.read(helper_file).include?("Spork.prefork") end |
.helper_file ⇒ Object
15 16 17 |
# File 'lib/spork/server.rb', line 15 def self.helper_file raise NotImplemented end |
.inherited(subclass) ⇒ Object
23 24 25 |
# File 'lib/spork/server.rb', line 23 def self.inherited(subclass) @@supported_servers << subclass end |
.load_preference_index ⇒ Object
43 44 45 |
# File 'lib/spork/server.rb', line 43 def self.load_preference_index LOAD_PREFERENCE.index(server_name) || LOAD_PREFERENCE.length end |
.port ⇒ Object
11 12 13 |
# File 'lib/spork/server.rb', line 11 def self.port raise NotImplemented end |
.run ⇒ Object
72 73 74 75 |
# File 'lib/spork/server.rb', line 72 def self.run return unless available? new.listen end |
.server_name ⇒ Object
19 20 21 |
# File 'lib/spork/server.rb', line 19 def self.server_name self.name.gsub('Spork::Server::', '') end |
.supported_servers(starting_with = nil) ⇒ Object
31 32 33 34 35 36 37 |
# File 'lib/spork/server.rb', line 31 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 |
.using_rails? ⇒ Boolean
47 48 49 |
# File 'lib/spork/server.rb', line 47 def self.using_rails? File.exist?("config/environment.rb") end |
Instance Method Details
#helper_file ⇒ Object
90 91 92 |
# File 'lib/spork/server.rb', line 90 def helper_file self.class.helper_file end |
#listen ⇒ Object
77 78 79 80 81 82 83 84 |
# File 'lib/spork/server.rb', line 77 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) puts "Spork is ready and listening on #{port}!" DRb.thread.join end |
#port ⇒ Object
86 87 88 |
# File 'lib/spork/server.rb', line 86 def port self.class.port end |
#run(argv, stderr, stdout) ⇒ Object
94 95 96 97 98 99 100 101 102 103 104 105 |
# File 'lib/spork/server.rb', line 94 def run(argv, stderr, stdout) return false if running? $stdout = stdout $stderr = stderr @child_pid = Kernel.fork do Spork.exec_each_run(helper_file) run_tests(argv, stderr, stdout) end Process.wait(@child_pid) @child_pid = nil true end |
#running? ⇒ Boolean
107 108 109 |
# File 'lib/spork/server.rb', line 107 def running? !! @child_pid end |