kemal/src/kemal/config.cr

85 lines
1.7 KiB
Crystal
Raw Normal View History

2015-10-23 18:33:26 +00:00
module Kemal
2014-07-30 22:17:53 +00:00
class Config
INSTANCE = Config.new
2015-11-12 20:48:22 +00:00
HANDLERS = [] of HTTP::Handler
2016-04-13 08:00:02 +00:00
@ssl : OpenSSL::SSL::Context?
2016-04-16 21:04:53 +00:00
@server : HTTP::Server?
2016-04-09 14:20:39 +00:00
2016-03-19 13:15:25 +00:00
property host_binding, ssl, port, env, public_folder, logging,
2016-04-16 21:04:53 +00:00
always_rescue, serve_static, server
2014-07-30 22:17:53 +00:00
def initialize
2016-02-15 07:01:41 +00:00
@host_binding = "0.0.0.0"
2014-07-30 22:17:53 +00:00
@port = 3000
2016-02-15 07:01:41 +00:00
@env = "development"
@serve_static = true
2015-12-12 18:27:46 +00:00
@public_folder = "./public"
2016-01-17 11:08:12 +00:00
@logging = true
2016-02-12 12:11:21 +00:00
@logger = nil
2016-02-14 10:43:25 +00:00
@error_handler = nil
@always_rescue = true
2016-03-19 13:15:25 +00:00
@run = false
2016-04-13 08:00:02 +00:00
@ssl = nil
2016-04-16 21:04:53 +00:00
@server = nil
2014-07-30 22:17:53 +00:00
end
2016-02-12 12:11:21 +00:00
def logger
@logger.not_nil!
2014-07-30 22:17:53 +00:00
end
2015-11-12 20:48:22 +00:00
2016-02-12 12:11:21 +00:00
def logger=(logger : Kemal::BaseLogHandler)
@logger = logger
2015-11-12 20:48:22 +00:00
end
2016-02-12 12:11:21 +00:00
def scheme
ssl ? "https" : "http"
2016-01-17 12:17:27 +00:00
end
2016-02-12 12:11:21 +00:00
def handlers
HANDLERS
2016-01-17 12:17:27 +00:00
end
2015-11-12 20:48:22 +00:00
def add_handler(handler : HTTP::Handler)
HANDLERS << handler
end
2015-12-12 18:27:46 +00:00
2015-12-15 21:11:21 +00:00
def add_ws_handler(handler : HTTP::WebSocketHandler)
HANDLERS << handler
end
2016-02-12 12:11:21 +00:00
2016-02-15 07:01:41 +00:00
def setup
2016-05-03 18:11:35 +00:00
setup_log_handler
2016-02-15 07:01:41 +00:00
setup_error_handler
2016-05-03 18:11:35 +00:00
setup_static_file_handler
2016-02-15 07:01:41 +00:00
end
2016-05-03 18:11:35 +00:00
def setup_log_handler
@logger ||= if @logging
2016-04-16 21:04:53 +00:00
Kemal::CommonLogHandler.new(@env)
else
Kemal::NullLogHandler.new(@env)
end
HANDLERS.insert(0, @logger.not_nil!)
2016-02-12 12:11:21 +00:00
end
2016-02-14 10:43:25 +00:00
2016-02-15 07:01:41 +00:00
private def setup_error_handler
2016-02-14 10:43:25 +00:00
if @always_rescue
2016-04-12 17:00:37 +00:00
@error_handler ||= Kemal::CommonExceptionHandler.new
HANDLERS.insert(1, @error_handler.not_nil!)
2016-02-14 10:43:25 +00:00
end
end
2016-02-15 07:01:41 +00:00
2016-05-03 18:11:35 +00:00
private def setup_static_file_handler
HANDLERS.insert(2, Kemal::StaticFileHandler.new(@public_folder)) if @serve_static
2016-02-15 07:01:41 +00:00
end
2014-07-30 22:17:53 +00:00
end
def self.config
yield Config::INSTANCE
end
def self.config
Config::INSTANCE
end
end