Sha256: 93f7a0d2cdb0c5e36733c96868918404638a333b6d531e6e2a6bfaa59f7aa276

Contents?: true

Size: 1.09 KB

Versions: 3

Compression:

Stored size: 1.09 KB

Contents

class FakeServer

  def initialize(port)
    @port = port
    @handlers = {}
  end

  def add_handler(version, name, &block)
    @handlers["#{version}-#{name}"] = block
  end

  def run
    server = TCPServer.new("localhost", @port)
    socket = server.accept

    serve(socket)

    server.close rescue false
  end

  protected

  def serve(socket)
    connection = Sanford::Protocol::Connection.new(socket)
    request = Sanford::Protocol::Request.parse(connection.read)
    status, result = route(request)
    response = Sanford::Protocol::Response.new(status, result)
    connection.write(response.to_hash)
  end

  def route(request)
    handler = @handlers["#{request.version}-#{request.name}"]
    returned = handler.call(request.params)
  end

  module Helper

    def run_fake_server(server, &block)
      begin
        pid = fork do
          trap("TERM"){ exit }
          server.run
        end

        sleep 0.3 # Give time for the socket to start listening.
        yield
      ensure
        if pid
          Process.kill("TERM", pid)
          Process.wait(pid)
        end
      end
    end

  end

end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
and-son-0.2.1 test/support/fake_server.rb
and-son-0.1.1 test/support/fake_server.rb
and-son-0.1.0 test/support/fake_server.rb