Class Spork::Server
In: lib/spork/server.rb
Parent: Object

An abstract class that is implemented to create a server

(This was originally based off of spec_server.rb from rspec-rails (David Chelimsky), which was based on Florian Weber‘s TDDMate)

Methods

abort   listen   new   run   run  

Included Modules

Spork::CustomIOStreams

Attributes

port  [RW] 
run_strategy  [R] 

Public Class methods

[Source]

# File lib/spork/server.rb, line 14
  def initialize(options = {})
    @run_strategy = options[:run_strategy]
    @port = options[:port]
  end

[Source]

# File lib/spork/server.rb, line 19
  def self.run(options = {})
    new(options).listen
  end

Public Instance methods

[Source]

# File lib/spork/server.rb, line 49
  def abort
    run_strategy.abort
  end

Sets up signals and starts the DRb service. If it‘s successful, it doesn‘t return. Not ever. You don‘t need to override this.

[Source]

# File lib/spork/server.rb, line 24
  def listen
    trap("SIGINT") { sig_int_received }
    trap("SIGTERM") { abort; exit!(0) }
    trap("USR2") { abort; restart } if Signal.list.has_key?("USR2")
    @drb_service = DRb.start_service("druby://127.0.0.1:#{port}", self)
    Spork.each_run { @drb_service.stop_service }
    stderr.puts "Spork is ready and listening on #{port}!"
    stderr.flush
    DRb.thread.join
  end

This is the public facing method that is served up by DRb. To use it from the client side (in a testing framework):

  DRb.start_service("druby://localhost:0") # this allows Ruby to do some magical stuff so you can pass an output stream over DRb.
                                           # see http://redmine.ruby-lang.org/issues/show/496 to see why localhost:0 is used.
  spec_server = DRbObject.new_with_uri("druby://127.0.0.1:8989")
  spec_server.run(options.argv, $stderr, $stdout)

When implementing a test server, don‘t override this method: override run_tests instead.

[Source]

# File lib/spork/server.rb, line 45
  def run(argv, stderr, stdout)
    run_strategy.run(argv, stderr, stdout)
  end

[Validate]