Code fixes reported by static code analysis (#450)

This commit is contained in:
V. Elenhaupt 2018-05-17 11:07:40 +03:00 committed by Serdar Dogruyol
parent f3f7e319ae
commit c2236acf3a
14 changed files with 60 additions and 65 deletions

View File

@ -2,7 +2,7 @@ require "./spec_helper"
describe "Kemal::ExceptionHandler" do describe "Kemal::ExceptionHandler" do
it "renders 404 on route not found" do it "renders 404 on route not found" do
get "/" do |env| get "/" do
"Hello" "Hello"
end end
@ -39,7 +39,7 @@ describe "Kemal::ExceptionHandler" do
end end
it "renders custom 500 error" do it "renders custom 500 error" do
error 500 do |env| error 500 do
"Something happened" "Something happened"
end end
get "/" do |env| get "/" do |env|
@ -60,7 +60,7 @@ describe "Kemal::ExceptionHandler" do
end end
it "keeps the specified error Content-Type" do it "keeps the specified error Content-Type" do
error 500 do |env| error 500 do
"Something happened" "Something happened"
end end
get "/" do |env| get "/" do |env|
@ -82,7 +82,7 @@ describe "Kemal::ExceptionHandler" do
end end
it "renders custom error with env and error" do it "renders custom error with env and error" do
error 500 do |env, err| error 500 do |_, err|
err.message err.message
end end
get "/" do |env| get "/" do |env|

View File

@ -79,7 +79,7 @@ describe "Handler" do
end end
add_handler CustomTestHandler.new add_handler CustomTestHandler.new
get "/" do |env| get "/" do
" Great" " Great"
end end
request = HTTP::Request.new("GET", "/") request = HTTP::Request.new("GET", "/")
@ -89,7 +89,7 @@ describe "Handler" do
end end
it "runs specified only_routes in middleware" do it "runs specified only_routes in middleware" do
get "/only" do |env| get "/only" do
"Get" "Get"
end end
add_handler OnlyHandler.new add_handler OnlyHandler.new
@ -99,7 +99,7 @@ describe "Handler" do
end end
it "doesn't run specified exclude_routes in middleware" do it "doesn't run specified exclude_routes in middleware" do
get "/" do |env| get "/" do
"Get" "Get"
end end
get "/exclude" do get "/exclude" do

View File

@ -31,7 +31,7 @@ describe "Macros" do
describe "#halt" do describe "#halt" do
it "can break block with halt macro" do it "can break block with halt macro" do
get "/non-breaking" do |env| get "/non-breaking" do
"hello" "hello"
"world" "world"
end end

View File

@ -6,7 +6,7 @@ describe "Kemal::InitHandler" do
io = IO::Memory.new io = IO::Memory.new
response = HTTP::Server::Response.new(io) response = HTTP::Server::Response.new(io)
context = HTTP::Server::Context.new(request, response) context = HTTP::Server::Context.new(request, response)
Kemal::InitHandler::INSTANCE.next = ->(context : HTTP::Server::Context) {} Kemal::InitHandler::INSTANCE.next = ->(_context : HTTP::Server::Context) {}
Kemal::InitHandler::INSTANCE.call(context) Kemal::InitHandler::INSTANCE.call(context)
context.response.headers["Content-Type"].should eq "text/html" context.response.headers["Content-Type"].should eq "text/html"
end end

View File

@ -2,7 +2,6 @@ require "./spec_helper"
describe "Kemal::LogHandler" do describe "Kemal::LogHandler" do
it "logs to the given IO" do it "logs to the given IO" do
config = Kemal.config
io = IO::Memory.new io = IO::Memory.new
logger = Kemal::LogHandler.new io logger = Kemal::LogHandler.new io
logger.write "Something" logger.write "Something"

View File

@ -2,7 +2,7 @@ require "./spec_helper"
describe "ParamParser" do describe "ParamParser" do
it "parses query params" do it "parses query params" do
route = Route.new "POST", "/" do |env| Route.new "POST", "/" do |env|
hasan = env.params.query["hasan"] hasan = env.params.query["hasan"]
"Hello #{hasan}" "Hello #{hasan}"
end end
@ -12,7 +12,7 @@ describe "ParamParser" do
end end
it "parses multiple values for query params" do it "parses multiple values for query params" do
route = Route.new "POST", "/" do |env| Route.new "POST", "/" do |env|
hasan = env.params.query["hasan"] hasan = env.params.query["hasan"]
"Hello #{hasan}" "Hello #{hasan}"
end end
@ -28,7 +28,7 @@ describe "ParamParser" do
end end
request = HTTP::Request.new("POST", "/hello/cemal") request = HTTP::Request.new("POST", "/hello/cemal")
# Radix tree MUST be run to parse url params. # Radix tree MUST be run to parse url params.
io_with_context = create_request_and_return_io(kemal, request) create_request_and_return_io(kemal, request)
url_params = Kemal::ParamParser.new(request).url url_params = Kemal::ParamParser.new(request).url
url_params["hasan"].should eq "cemal" url_params["hasan"].should eq "cemal"
end end
@ -43,7 +43,7 @@ describe "ParamParser" do
end end
request = HTTP::Request.new("POST", "/hello/sam%2Bspec%40gmail.com/%2419.99/a%C3%B1o") request = HTTP::Request.new("POST", "/hello/sam%2Bspec%40gmail.com/%2419.99/a%C3%B1o")
# Radix tree MUST be run to parse url params. # Radix tree MUST be run to parse url params.
io_with_context = create_request_and_return_io(kemal, request) create_request_and_return_io(kemal, request)
url_params = Kemal::ParamParser.new(request).url url_params = Kemal::ParamParser.new(request).url
url_params["email"].should eq "sam+spec@gmail.com" url_params["email"].should eq "sam+spec@gmail.com"
url_params["money"].should eq "$19.99" url_params["money"].should eq "$19.99"
@ -51,7 +51,7 @@ describe "ParamParser" do
end end
it "parses request body" do it "parses request body" do
route = Route.new "POST", "/" do |env| Route.new "POST", "/" do |env|
name = env.params.query["name"] name = env.params.query["name"]
age = env.params.query["age"] age = env.params.query["age"]
hasan = env.params.body["hasan"] hasan = env.params.body["hasan"]
@ -77,7 +77,7 @@ describe "ParamParser" do
end end
it "parses multiple values in request body" do it "parses multiple values in request body" do
route = Route.new "POST", "/" do |env| Route.new "POST", "/" do |env|
hasan = env.params.body["hasan"] hasan = env.params.body["hasan"]
"Hello #{hasan}" "Hello #{hasan}"
end end
@ -95,7 +95,7 @@ describe "ParamParser" do
context "when content type is application/json" do context "when content type is application/json" do
it "parses request body" do it "parses request body" do
route = Route.new "POST", "/" { } Route.new "POST", "/" { }
request = HTTP::Request.new( request = HTTP::Request.new(
"POST", "POST",
@ -109,7 +109,7 @@ describe "ParamParser" do
end end
it "parses request body when passed charset" do it "parses request body when passed charset" do
route = Route.new "POST", "/" { } Route.new "POST", "/" { }
request = HTTP::Request.new( request = HTTP::Request.new(
"POST", "POST",
@ -123,7 +123,7 @@ describe "ParamParser" do
end end
it "parses request body for array" do it "parses request body for array" do
route = Route.new "POST", "/" { } Route.new "POST", "/" { }
request = HTTP::Request.new( request = HTTP::Request.new(
"POST", "POST",
@ -137,7 +137,7 @@ describe "ParamParser" do
end end
it "parses request body and query params" do it "parses request body and query params" do
route = Route.new "POST", "/" { } Route.new "POST", "/" { }
request = HTTP::Request.new( request = HTTP::Request.new(
"POST", "POST",
@ -156,7 +156,7 @@ describe "ParamParser" do
end end
it "handles no request body" do it "handles no request body" do
route = Route.new "GET", "/" { } Route.new "GET", "/" { }
request = HTTP::Request.new( request = HTTP::Request.new(
"GET", "GET",
@ -180,7 +180,7 @@ describe "ParamParser" do
context "when content type is incorrect" do context "when content type is incorrect" do
it "does not parse request body" do it "does not parse request body" do
route = Route.new "POST", "/" do |env| Route.new "POST", "/" do |env|
name = env.params.body["name"] name = env.params.body["name"]
age = env.params.body["age"] age = env.params.body["age"]
hasan = env.params.query["hasan"] hasan = env.params.query["hasan"]

View File

@ -104,7 +104,7 @@ describe "Kemal::RouteHandler" do
end end
it "checks for _method param in POST request to simulate PUT" do it "checks for _method param in POST request to simulate PUT" do
put "/" do |env| put "/" do
"Hello World from PUT" "Hello World from PUT"
end end
request = HTTP::Request.new( request = HTTP::Request.new(
@ -118,7 +118,7 @@ describe "Kemal::RouteHandler" do
end end
it "checks for _method param in POST request to simulate PATCH" do it "checks for _method param in POST request to simulate PATCH" do
patch "/" do |env| patch "/" do
"Hello World from PATCH" "Hello World from PATCH"
end end
request = HTTP::Request.new( request = HTTP::Request.new(
@ -132,10 +132,9 @@ describe "Kemal::RouteHandler" do
end end
it "checks for _method param in POST request to simulate DELETE" do it "checks for _method param in POST request to simulate DELETE" do
delete "/" do |env| delete "/" do
"Hello World from DELETE" "Hello World from DELETE"
end end
json_payload = {"_method": "DELETE"}
request = HTTP::Request.new( request = HTTP::Request.new(
"POST", "POST",
"/", "/",
@ -147,7 +146,7 @@ describe "Kemal::RouteHandler" do
end end
it "can process HTTP HEAD requests for defined GET routes" do it "can process HTTP HEAD requests for defined GET routes" do
get "/" do |env| get "/" do
"Hello World from GET" "Hello World from GET"
end end
request = HTTP::Request.new("HEAD", "/") request = HTTP::Request.new("HEAD", "/")

View File

@ -3,10 +3,10 @@ require "./spec_helper"
describe "Route" do describe "Route" do
describe "match?" do describe "match?" do
it "matches the correct route" do it "matches the correct route" do
get "/route1" do |env| get "/route1" do
"Route 1" "Route 1"
end end
get "/route2" do |env| get "/route2" do
"Route 2" "Route 2"
end end
request = HTTP::Request.new("GET", "/route2") request = HTTP::Request.new("GET", "/route2")
@ -16,7 +16,7 @@ describe "Route" do
it "doesn't allow a route declaration start without /" do it "doesn't allow a route declaration start without /" do
expect_raises Kemal::Exceptions::InvalidPathStartException, "Route declaration get \"route\" needs to start with '/', should be get \"/route\"" do expect_raises Kemal::Exceptions::InvalidPathStartException, "Route declaration get \"route\" needs to start with '/', should be get \"/route\"" do
get "route" do |env| get "route" do
"Route 1" "Route 1"
end end
end end

View File

@ -66,7 +66,7 @@ def build_main_handler
Kemal.config.setup Kemal.config.setup
main_handler = Kemal.config.handlers.first main_handler = Kemal.config.handlers.first
current_handler = main_handler current_handler = main_handler
Kemal.config.handlers.each_with_index do |handler, index| Kemal.config.handlers.each do |handler|
current_handler.next = handler current_handler.next = handler
current_handler = handler current_handler = handler
end end

View File

@ -14,7 +14,6 @@ end
describe Kemal::StaticFileHandler do describe Kemal::StaticFileHandler do
file = File.open "#{__DIR__}/static/dir/test.txt" file = File.open "#{__DIR__}/static/dir/test.txt"
file_size = file.size file_size = file.size
file_text = file.to_s
it "should serve a file with content type and etag" do it "should serve a file with content type and etag" do
response = handle HTTP::Request.new("GET", "/dir/test.txt") response = handle HTTP::Request.new("GET", "/dir/test.txt")

View File

@ -22,8 +22,8 @@ describe "Kemal::WebSocketHandler" do
it "matches on given route" do it "matches on given route" do
handler = Kemal::WebSocketHandler::INSTANCE handler = Kemal::WebSocketHandler::INSTANCE
ws "/" { |socket, context| socket.send("Match") } ws "/" { |socket| socket.send("Match") }
ws "/no_match" { |socket, context| socket.send "No Match" } ws "/no_match" { |socket| socket.send "No Match" }
headers = HTTP::Headers{ headers = HTTP::Headers{
"Upgrade" => "websocket", "Upgrade" => "websocket",
"Connection" => "Upgrade", "Connection" => "Upgrade",
@ -37,7 +37,7 @@ describe "Kemal::WebSocketHandler" do
it "fetches named url parameters" do it "fetches named url parameters" do
handler = Kemal::WebSocketHandler::INSTANCE handler = Kemal::WebSocketHandler::INSTANCE
ws "/:id" { |s, c| c.params.url["id"] } ws "/:id" { |_, c| c.params.url["id"] }
headers = HTTP::Headers{ headers = HTTP::Headers{
"Upgrade" => "websocket", "Upgrade" => "websocket",
"Connection" => "Upgrade", "Connection" => "Upgrade",

View File

@ -34,7 +34,7 @@ module Kemal
config.port = port if port config.port = port if port
unless Kemal.config.error_handlers.has_key?(404) unless Kemal.config.error_handlers.has_key?(404)
error 404 do |env| error 404 do
render_404 render_404
end end
end end
@ -50,7 +50,7 @@ module Kemal
# This route serves the built-in images for not_found and exceptions. # This route serves the built-in images for not_found and exceptions.
get "/__kemal__/404.png" do |env| get "/__kemal__/404.png" do |env|
file_path = File.expand_path("lib/kemal/images/404.png", Dir.current) file_path = File.expand_path("lib/kemal/images/404.png", Dir.current)
if File.exists? file_path if File.exists? file_path
send_file env, file_path send_file env, file_path
else else

View File

@ -5,18 +5,16 @@ module Kemal
INSTANCE = new INSTANCE = new
def call(context : HTTP::Server::Context) def call(context : HTTP::Server::Context)
begin call_next(context)
call_next(context) rescue ex : Kemal::Exceptions::RouteNotFound
rescue ex : Kemal::Exceptions::RouteNotFound call_exception_with_status_code(context, ex, 404)
call_exception_with_status_code(context, ex, 404) rescue ex : Kemal::Exceptions::CustomException
rescue ex : Kemal::Exceptions::CustomException call_exception_with_status_code(context, ex, context.response.status_code)
call_exception_with_status_code(context, ex, context.response.status_code) rescue ex : Exception
rescue ex : Exception log("Exception: #{ex.inspect_with_backtrace}")
log("Exception: #{ex.inspect_with_backtrace}") return call_exception_with_status_code(context, ex, 500) if Kemal.config.error_handlers.has_key?(500)
return call_exception_with_status_code(context, ex, 500) if Kemal.config.error_handlers.has_key?(500) verbosity = Kemal.config.env == "production" ? false : true
verbosity = Kemal.config.env == "production" ? false : true return render_500(context, ex.inspect_with_backtrace, verbosity)
return render_500(context, ex.inspect_with_backtrace, verbosity)
end
end end
private def call_exception_with_status_code(context : HTTP::Server::Context, exception : Exception, status_code : Int32) private def call_exception_with_status_code(context : HTTP::Server::Context, exception : Exception, status_code : Int32)

View File

@ -2,22 +2,22 @@
# Currently it contains templates for 404 and 500 error codes. # Currently it contains templates for 404 and 500 error codes.
def render_404 def render_404
template = <<-HTML <<-HTML
<!DOCTYPE html> <!DOCTYPE html>
<html> <html>
<head> <head>
<style type="text/css"> <style type="text/css">
body { text-align:center;font-family:helvetica,arial;font-size:22px; body { text-align:center;font-family:helvetica,arial;font-size:22px;
color:#888;margin:20px} color:#888;margin:20px}
img { max-width: 579px; width: 100%; } img { max-width: 579px; width: 100%; }
#c {margin:0 auto;width:500px;text-align:left} #c {margin:0 auto;width:500px;text-align:left}
</style> </style>
</head> </head>
<body> <body>
<h2>Kemal doesn't know this way.</h2> <h2>Kemal doesn't know this way.</h2>
<img src="/__kemal__/404.png"> <img src="/__kemal__/404.png">
</body> </body>
</html> </html>
HTML HTML
end end