Skip to content

Commit

Permalink
fix process request when a response already closed (#550)
Browse files Browse the repository at this point in the history
  • Loading branch information
mamantoha authored and Serdar Dogruyol committed Aug 5, 2019
1 parent ff3b28c commit e99129a
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 0 deletions.
18 changes: 18 additions & 0 deletions spec/helpers_spec.cr
Expand Up @@ -63,6 +63,24 @@ describe "Macros" do
end
end

describe "#callbacks" do
it "can break block with halt macro from before_* callback" do
filter_middleware = Kemal::FilterHandler.new
filter_middleware._add_route_filter("GET", "/", :before) do |env|
halt env, status_code: 400, response: "Missing origin."
end

get "/" do |env|
"Hello world"
end

request = HTTP::Request.new("GET", "/")
client_response = call_request_on_app(request)
client_response.status_code.should eq(400)
client_response.body.should eq("Missing origin.")
end
end

describe "#headers" do
it "can add headers" do
get "/headers" do |env|
Expand Down
1 change: 1 addition & 0 deletions src/kemal/route_handler.cr
Expand Up @@ -45,6 +45,7 @@ module Kemal
# Processes the route if it's a match. Otherwise renders 404.
private def process_request(context)
raise Kemal::Exceptions::RouteNotFound.new(context) unless context.route_found?
return if context.response.closed?
content = context.route.handler.call(context)

if !Kemal.config.error_handlers.empty? && Kemal.config.error_handlers.has_key?(context.response.status_code)
Expand Down

0 comments on commit e99129a

Please sign in to comment.