Merge pull request #136 from f/master

Added return_with macro to break response blocks.
This commit is contained in:
Serdar Dogruyol 2016-04-03 19:14:28 +03:00
commit de98236fc4
3 changed files with 41 additions and 0 deletions

View File

@ -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

View File

@ -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

View File

@ -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