diff --git a/spec/helpers_spec.cr b/spec/helpers_spec.cr index 2df116e..3e73e6d 100644 --- a/spec/helpers_spec.cr +++ b/spec/helpers_spec.cr @@ -34,4 +34,37 @@ describe "Macros" do config.logger.should be_a(CustomLogHandler) end end + + describe "#return_with" do + it "can break block with return_with macro" do + get "/non-breaking" do |env| + "hello" + "world" + end + request = HTTP::Request.new("GET", "/non-breaking") + client_response = call_request_on_app(request) + client_response.status_code.should eq(200) + client_response.body.should eq("world") + + get "/breaking" do |env| + return_with env, 404, "hello" + "world" + end + request = HTTP::Request.new("GET", "/breaking") + client_response = call_request_on_app(request) + client_response.status_code.should eq(404) + client_response.body.should eq("hello") + end + + it "can break block with return_with macro using default values" do + get "/" do |env| + return_with env + "world" + end + request = HTTP::Request.new("GET", "/") + client_response = call_request_on_app(request) + client_response.status_code.should eq(200) + client_response.body.should eq("") + end + end end diff --git a/spec/route_handler_spec.cr b/spec/route_handler_spec.cr index e713934..2b89bb3 100644 --- a/spec/route_handler_spec.cr +++ b/spec/route_handler_spec.cr @@ -155,4 +155,5 @@ describe "Kemal::RouteHandler" do client_response.status_code.should eq(302) client_response.headers.has_key?("Location").should eq(true) end + end diff --git a/src/kemal/helpers.cr b/src/kemal/helpers.cr index 2c8c8b9..e0309dd 100644 --- a/src/kemal/helpers.cr +++ b/src/kemal/helpers.cr @@ -15,6 +15,12 @@ macro render(filename, *args) Kilt.render({{filename}}, {{*args}}) end +macro return_with(env, status_code = 200, response = "") + {{env}}.response.status_code = {{status_code}} + {{env}}.response.print {{response}} + next +end + def add_handler(handler) Kemal.config.add_handler handler end @@ -46,6 +52,7 @@ def logger(logger) Kemal.config.add_handler logger end + def serve_static(status) Kemal.config.serve_static = status end