allow to set optional response body on redirects (#561)

This commit is contained in:
Anton Maminov 2020-04-04 21:25:35 +03:00 committed by GitHub
parent 4d6fb0614f
commit b7506f6fab
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 14 additions and 1 deletions

View file

@ -118,6 +118,18 @@ describe "Kemal::RouteHandler" do
request = HTTP::Request.new("GET", "/") request = HTTP::Request.new("GET", "/")
client_response = call_request_on_app(request) client_response = call_request_on_app(request)
client_response.status_code.should eq(302) client_response.status_code.should eq(302)
client_response.body.should eq("")
client_response.headers.has_key?("Location").should eq(true)
end
it "redirects with body" do
get "/" do |env|
env.redirect "/login", body: "Redirecting to /login"
end
request = HTTP::Request.new("GET", "/")
client_response = call_request_on_app(request)
client_response.status_code.should eq(302)
client_response.body.should eq("Redirecting to /login")
client_response.headers.has_key?("Location").should eq(true) client_response.headers.has_key?("Location").should eq(true)
end end
end end

View file

@ -17,9 +17,10 @@ class HTTP::Server
@params ||= Kemal::ParamParser.new(@request, route_lookup.params) @params ||= Kemal::ParamParser.new(@request, route_lookup.params)
end end
def redirect(url : String, status_code : Int32 = 302) def redirect(url : String, status_code : Int32 = 302, *, body : String? = nil)
@response.headers.add "Location", url @response.headers.add "Location", url
@response.status_code = status_code @response.status_code = status_code
@response.print(body) if body
end end
def route def route