Refactor static file handler

This commit is contained in:
Sdogruyol 2015-12-10 21:15:28 +02:00
parent 21a3c6ad3c
commit e4da65f1f2
4 changed files with 12 additions and 34 deletions

View File

@ -17,7 +17,7 @@ at_exit do
config = Kemal.config
logger = Kemal::Logger.new
config.add_handler logger
config.add_handler Kemal::StaticHandler.new("./public")
config.add_handler Kemal::StaticFileHandler.new("./public")
config.add_handler Kemal::Handler::INSTANCE
server = HTTP::Server.new(config.port, config.handlers)

View File

@ -1,4 +1,4 @@
macro redirect(url)
env.response.headers.add "Location", {{url}}
env.response.status_code = 301
end
end

View File

@ -0,0 +1,10 @@
require "http/server"
require "ecr/macros"
class Kemal::StaticFileHandler < HTTP::Handler
def call(request)
request_path = request.path.not_nil!
return call_next(request) if request_path == "/"
super
end
end

View File

@ -1,32 +0,0 @@
require "http/server"
require "ecr/macros"
class Kemal::StaticHandler < HTTP::Handler
def initialize(@publicdir)
end
def call(request)
request_path = request.path.not_nil!
# Call next handler for processing
return call_next(request) unless request_path.starts_with? "/public"
file = request_path.split("/public/")[1] if request_path.starts_with?("/public")
file_path = File.expand_path("public/#{file}", Dir.working_directory)
if File.exists?(file_path)
HTTP::Response.new(200, File.read(file_path), HTTP::Headers{"Content-Type": mime_type(file_path)})
else
call_next(request)
end
end
private def mime_type(path)
case File.extname(path)
when ".txt" then "text/plain"
when ".htm", ".html" then "text/html"
when ".css" then "text/css"
when ".js" then "application/javascript"
else "application/octet-stream"
end
end
end