class SequenceServer::Server

Simple wrapper around WEBrick and Rack::Handler::WEBrick to host SequenceServer standalone.

Attributes

app[R]

Public Class Methods

new(app) click to toggle source
# File lib/sequenceserver/server.rb, line 13
def initialize(app)
  @app = app
end
run(*args) click to toggle source
# File lib/sequenceserver/server.rb, line 8
def run(*args)
  new(*args).start
end

Public Instance Methods

options() click to toggle source

Options Hash passed to WEBrick::HTTPServer. rubocop:disable Metrics/AbcSize

# File lib/sequenceserver/server.rb, line 36
def options
  @options ||= {
    BindAddress:      app.config[:host],
    Port:             app.config[:port],
    StartCallback:    proc { app.on_start },
    StopCallback:     proc { app.on_stop  },
    OutputBufferSize: 5,
    AccessLog:        [[logdev, WEBrick::AccessLog::COMMON_LOG_FORMAT]],
    Logger:           WEBrick::Log.new(logdev)
  }
end
start() click to toggle source

Start server. Raises Errno::EADDRINUSE if port is in use by another process. Raises Errno::EACCES if binding to the port requires root privilege.

# File lib/sequenceserver/server.rb, line 22
def start
  setup_signal_handlers
  @server = WEBrick::HTTPServer.new(options)
  @server.mount '/', Rack::Handler::WEBrick, app
  @server.start
end
stop() click to toggle source

Stop server.

# File lib/sequenceserver/server.rb, line 30
def stop
  @server.shutdown
end

Private Instance Methods

logdev() click to toggle source
# File lib/sequenceserver/server.rb, line 59
def logdev
  @logdev ||= app.verbose? ? STDERR : '/dev/null'
end
setup_signal_handlers() click to toggle source

rubocop:enable Metrics/AbcSize

# File lib/sequenceserver/server.rb, line 51
def setup_signal_handlers
  %i[INT TERM].each do |sig|
    trap sig do
      stop
    end
  end
end