Modularize handlers

This commit is contained in:
sdogruyol 2017-05-12 16:18:50 -07:00
parent ce9e924d00
commit 62946fd987
3 changed files with 23 additions and 4 deletions

View file

@ -120,4 +120,17 @@ describe "Handler" do
client_response = call_request_on_app(request)
client_response.body.should eq "OnlyExcludePost"
end
it "adds a handler at given position" do
post_handler = PostOnlyHandler.new
add_handler post_handler, 1
Kemal.config.handlers[1].should eq post_handler
end
it "assigns custom handlers" do
post_only_handler = PostOnlyHandler.new
post_exclude_handler = PostExcludeHandler.new
Kemal.config.handlers = [post_only_handler, post_exclude_handler]
Kemal.config.handlers.should eq [post_only_handler, post_exclude_handler]
end
end

View file

@ -17,6 +17,7 @@ module Kemal
property host_binding, ssl, port, env, public_folder, logging, running,
always_rescue, serve_static : (Bool | Hash(String, Bool)), server, extra_options,
shutdown_message
getter custom_handler_position
def initialize
@host_binding = "0.0.0.0"
@ -59,9 +60,14 @@ module Kemal
HANDLERS
end
def add_handler(handler : HTTP::Handler | HTTP::WebSocketHandler)
def handlers=(handlers : Array(HTTP::Handler))
clear
handlers.each { |handler| HANDLERS << handler }
end
def add_handler(handler : HTTP::Handler | HTTP::WebSocketHandler, position = Kemal.config.custom_handler_position)
setup
HANDLERS.insert @custom_handler_position, handler
HANDLERS.insert position, handler
@custom_handler_position = @custom_handler_position + 1
end

View file

@ -8,8 +8,8 @@
# - Kemal::StaticFileHandler
# - Here goes custom handlers
# - Kemal::RouteHandler
def add_handler(handler)
Kemal.config.add_handler handler
def add_handler(handler, position = Kemal.config.custom_handler_position)
Kemal.config.add_handler handler, position
end
# Sets public folder from which the static assets will be served.