Allow config.server to be lazily initiliazed. Fixes #396

This commit is contained in:
Serdar Dogruyol 2017-10-04 19:42:41 +03:00
parent 61caa077b7
commit ad692357d4
2 changed files with 10 additions and 10 deletions

View file

@ -14,7 +14,7 @@ module Kemal
end end
end end
# Overload of self.run without port - fixex #399 # Overload of self.run without port - fixex #399
def self.run def self.run
self.run(nil) self.run(nil)
end end
@ -32,11 +32,6 @@ module Kemal
config.setup config.setup
config.port = port if port config.port = port if port
config.server = HTTP::Server.new(config.host_binding, config.port, config.handlers)
{% if !flag?(:without_openssl) %}
config.server.tls = config.ssl
{% end %}
unless Kemal.config.error_handlers.has_key?(404) unless Kemal.config.error_handlers.has_key?(404)
error 404 do |env| error 404 do |env|
render_404 render_404
@ -63,15 +58,21 @@ module Kemal
end end
end end
server = HTTP::Server.new(config.host_binding, config.port, config.handlers)
{% if !flag?(:without_openssl) %}
server.tls = config.ssl
{% end %}
config.server ||= server
config.running = true config.running = true
yield config yield config
config.server.listen if config.env != "test" config.server.not_nil!.listen if config.env != "test" && config.server
end end
def self.stop def self.stop
if config.running if config.running
if config.server if config.server
config.server.close config.server.not_nil!.close
config.running = false config.running = false
else else
raise "Kemal.config.server is not set. Please use Kemal.run to set the server." raise "Kemal.config.server is not set. Please use Kemal.run to set the server."

View file

@ -20,7 +20,7 @@ module Kemal
getter custom_handler_position getter custom_handler_position
property host_binding, ssl, port, env, public_folder, logging, running property host_binding, ssl, port, env, public_folder, logging, running
property always_rescue, server, extra_options, shutdown_message property always_rescue, server : HTTP::Server?, extra_options, shutdown_message
property serve_static : (Bool | Hash(String, Bool)) property serve_static : (Bool | Hash(String, Bool))
property static_headers : (HTTP::Server::Response, String, File::Stat -> Void)? property static_headers : (HTTP::Server::Response, String, File::Stat -> Void)?
@ -34,7 +34,6 @@ module Kemal
@logger = nil @logger = nil
@error_handler = nil @error_handler = nil
@always_rescue = true @always_rescue = true
@server = uninitialized HTTP::Server
@router_included = false @router_included = false
@default_handlers_setup = false @default_handlers_setup = false
@running = false @running = false