Move some stuff to Utils
This commit is contained in:
parent
bc764b7af7
commit
23cd325def
3 changed files with 36 additions and 34 deletions
|
@ -1,7 +1,30 @@
|
|||
module Kemal
|
||||
class Utils
|
||||
module Utils
|
||||
def self.path_starts_with_backslash?(path)
|
||||
path.starts_with?("/")
|
||||
end
|
||||
|
||||
def self.zip_types(path) # https://github.com/h5bp/server-configs-nginx/blob/master/nginx.conf
|
||||
[".htm", ".html", ".txt", ".css", ".js", ".svg", ".json", ".xml", ".otf", ".ttf", ".woff", ".woff2"].includes? File.extname(path)
|
||||
end
|
||||
|
||||
def self.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"
|
||||
when ".png" then "image/png"
|
||||
when ".jpg", ".jpeg" then "image/jpeg"
|
||||
when ".gif" then "image/gif"
|
||||
when ".svg" then "image/svg+xml"
|
||||
when ".xml" then "application/xml"
|
||||
when ".json" then "application/json"
|
||||
when ".otf", ".ttf" then "application/font-sfnt"
|
||||
when ".woff" then "application/font-woff"
|
||||
when ".woff2" then "font/woff2"
|
||||
else "application/octet-stream"
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -7,6 +7,13 @@ class HTTP::Request
|
|||
@override_method ||= check_for_method_override!
|
||||
end
|
||||
|
||||
# Checks if method contained in _method param is valid one
|
||||
def self.override_method_valid?(override_method)
|
||||
return false unless override_method.is_a?(String)
|
||||
override_method = override_method.upcase
|
||||
override_method == "PUT" || override_method == "PATCH" || override_method == "DELETE"
|
||||
end
|
||||
|
||||
# Checks if request params contain _method param to override request incoming method
|
||||
private def check_for_method_override!
|
||||
@override_method = @method
|
||||
|
@ -18,11 +25,4 @@ class HTTP::Request
|
|||
end
|
||||
@override_method
|
||||
end
|
||||
|
||||
# Checks if method contained in _method param is valid one
|
||||
def self.override_method_valid?(override_method)
|
||||
return false unless override_method.is_a?(String)
|
||||
override_method = override_method.upcase
|
||||
override_method == "PUT" || override_method == "PATCH" || override_method == "DELETE"
|
||||
end
|
||||
end
|
||||
|
|
|
@ -2,6 +2,8 @@
|
|||
require "zlib"
|
||||
{% end %}
|
||||
|
||||
require "./helpers/utils"
|
||||
|
||||
module Kemal
|
||||
class StaticFileHandler < HTTP::StaticFileHandler
|
||||
def call(context)
|
||||
|
@ -52,16 +54,16 @@ module Kemal
|
|||
elsif File.exists?(file_path)
|
||||
return if self.etag(context, file_path)
|
||||
minsize = 860 # http://webmasters.stackexchange.com/questions/31750/what-is-recommended-minimum-object-size-for-gzip-performance-benefits ??
|
||||
context.response.content_type = mime_type(file_path)
|
||||
context.response.content_type = Utils.mime_type(file_path)
|
||||
request_headers = context.request.headers
|
||||
filesize = File.size(file_path)
|
||||
File.open(file_path) do |file|
|
||||
if request_headers.includes_word?("Accept-Encoding", "gzip") && config.is_a?(Hash) && config["gzip"] == true && filesize > minsize && self.zip_types(file_path)
|
||||
if request_headers.includes_word?("Accept-Encoding", "gzip") && config.is_a?(Hash) && config["gzip"] == true && filesize > minsize && Utils.zip_types(file_path)
|
||||
context.response.headers["Content-Encoding"] = "gzip"
|
||||
Zlib::Deflate.gzip(context.response) do |deflate|
|
||||
IO.copy(file, deflate)
|
||||
end
|
||||
elsif request_headers.includes_word?("Accept-Encoding", "deflate") && config.is_a?(Hash) && config["gzip"]? == true && filesize > minsize && self.zip_types(file_path)
|
||||
elsif request_headers.includes_word?("Accept-Encoding", "deflate") && config.is_a?(Hash) && config["gzip"]? == true && filesize > minsize && Utils.zip_types(file_path)
|
||||
context.response.headers["Content-Encoding"] = "deflate"
|
||||
Zlib::Deflate.new(context.response) do |deflate|
|
||||
IO.copy(file, deflate)
|
||||
|
@ -85,28 +87,5 @@ module Kemal
|
|||
context.response.status_code = 304 # not modified
|
||||
return true
|
||||
end
|
||||
|
||||
def zip_types(path) # https://github.com/h5bp/server-configs-nginx/blob/master/nginx.conf
|
||||
[".htm", ".html", ".txt", ".css", ".js", ".svg", ".json", ".xml", ".otf", ".ttf", ".woff", ".woff2"].includes? File.extname(path)
|
||||
end
|
||||
|
||||
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"
|
||||
when ".png" then "image/png"
|
||||
when ".jpg", ".jpeg" then "image/jpeg"
|
||||
when ".gif" then "image/gif"
|
||||
when ".svg" then "image/svg+xml"
|
||||
when ".xml" then "application/xml"
|
||||
when ".json" then "application/json"
|
||||
when ".otf", ".ttf" then "application/font-sfnt"
|
||||
when ".woff" then "application/font-woff"
|
||||
when ".woff2" then "font/woff2"
|
||||
else "application/octet-stream"
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Reference in a new issue