mirror of
				https://gitea.invidious.io/iv-org/shard-kemal.git
				synced 2024-08-15 00:53:36 +00:00 
			
		
		
		
	Crystal 0.25.0 (#452)
This commit is contained in:
		
							parent
							
								
									c2236acf3a
								
							
						
					
					
						commit
						a5870e7d24
					
				
					 9 changed files with 23 additions and 22 deletions
				
			
		|  | @ -174,7 +174,7 @@ describe "ParamParser" do | ||||||
|       body_params.to_s.should eq("") |       body_params.to_s.should eq("") | ||||||
| 
 | 
 | ||||||
|       json_params = Kemal::ParamParser.new(request).json |       json_params = Kemal::ParamParser.new(request).json | ||||||
|       json_params.should eq({} of String => Nil | String | Int64 | Float64 | Bool | Hash(String, JSON::Type) | Array(JSON::Type)) |       json_params.should eq({} of String => Nil | String | Int64 | Float64 | Bool | Hash(String, JSON::Any) | Array(JSON::Any)) | ||||||
|     end |     end | ||||||
|   end |   end | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -85,7 +85,6 @@ describe "Kemal::RouteHandler" do | ||||||
|     post "/" do |env| |     post "/" do |env| | ||||||
|       skills = env.params.json["skills"].as(Array) |       skills = env.params.json["skills"].as(Array) | ||||||
|       skills_from_languages = skills.map do |skill| |       skills_from_languages = skills.map do |skill| | ||||||
|         skill = skill.as(Hash) |  | ||||||
|         skill["language"] |         skill["language"] | ||||||
|       end |       end | ||||||
|       "Skills #{skills_from_languages.each.join(',')}" |       "Skills #{skills_from_languages.each.join(',')}" | ||||||
|  |  | ||||||
|  | @ -131,7 +131,7 @@ describe Kemal::StaticFileHandler do | ||||||
|   end |   end | ||||||
| 
 | 
 | ||||||
|   it "should handle setting custom headers" do |   it "should handle setting custom headers" do | ||||||
|     headers = Proc(HTTP::Server::Response, String, File::Stat, Void).new do |response, path, stat| |     headers = Proc(HTTP::Server::Response, String, File::Info, Void).new do |response, path, stat| | ||||||
|       if path =~ /\.html$/ |       if path =~ /\.html$/ | ||||||
|         response.headers.add("Access-Control-Allow-Origin", "*") |         response.headers.add("Access-Control-Allow-Origin", "*") | ||||||
|       end |       end | ||||||
|  | @ -143,7 +143,7 @@ describe Kemal::StaticFileHandler do | ||||||
|     response = handle HTTP::Request.new("GET", "/dir/test.txt") |     response = handle HTTP::Request.new("GET", "/dir/test.txt") | ||||||
|     response.headers.has_key?("Access-Control-Allow-Origin").should be_false |     response.headers.has_key?("Access-Control-Allow-Origin").should be_false | ||||||
|     response.headers["Content-Size"].should eq( |     response.headers["Content-Size"].should eq( | ||||||
|       File.stat("#{__DIR__}/static/dir/test.txt").size.to_s |       File.info("#{__DIR__}/static/dir/test.txt").size.to_s | ||||||
|     ) |     ) | ||||||
| 
 | 
 | ||||||
|     response = handle HTTP::Request.new("GET", "/dir/index.html") |     response = handle HTTP::Request.new("GET", "/dir/index.html") | ||||||
|  |  | ||||||
|  | @ -25,27 +25,29 @@ describe "Kemal::WebSocketHandler" do | ||||||
|     ws "/" { |socket| socket.send("Match") } |     ws "/" { |socket| socket.send("Match") } | ||||||
|     ws "/no_match" { |socket| 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", | ||||||
|       "Sec-WebSocket-Key" => "dGhlIHNhbXBsZSBub25jZQ==", |       "Sec-WebSocket-Key"     => "dGhlIHNhbXBsZSBub25jZQ==", | ||||||
|  |       "Sec-WebSocket-Version" => "13", | ||||||
|     } |     } | ||||||
|     request = HTTP::Request.new("GET", "/", headers) |     request = HTTP::Request.new("GET", "/", headers) | ||||||
| 
 | 
 | ||||||
|     io_with_context = create_ws_request_and_return_io(handler, request) |     io_with_context = create_ws_request_and_return_io(handler, request) | ||||||
|     io_with_context.to_s.should eq("HTTP/1.1 101 Switching Protocols\r\nUpgrade: websocket\r\nConnection: Upgrade\r\nSec-Websocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=\r\n\r\n\x81\u0005Match") |     io_with_context.to_s.should eq("HTTP/1.1 101 Switching Protocols\r\nUpgrade: websocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=\r\n\r\n\x81\u0005Match") | ||||||
|   end |   end | ||||||
| 
 | 
 | ||||||
|   it "fetches named url parameters" do |   it "fetches named url parameters" do | ||||||
|     handler = Kemal::WebSocketHandler::INSTANCE |     handler = Kemal::WebSocketHandler::INSTANCE | ||||||
|     ws "/:id" { |_, 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", | ||||||
|       "Sec-WebSocket-Key" => "dGhlIHNhbXBsZSBub25jZQ==", |       "Sec-WebSocket-Key"     => "dGhlIHNhbXBsZSBub25jZQ==", | ||||||
|  |       "Sec-WebSocket-Version" => "13", | ||||||
|     } |     } | ||||||
|     request = HTTP::Request.new("GET", "/1234", headers) |     request = HTTP::Request.new("GET", "/1234", headers) | ||||||
|     io_with_context = create_ws_request_and_return_io(handler, request) |     io_with_context = create_ws_request_and_return_io(handler, request) | ||||||
|     io_with_context.to_s.should eq("HTTP/1.1 101 Switching Protocols\r\nUpgrade: websocket\r\nConnection: Upgrade\r\nSec-Websocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=\r\n\r\n") |     io_with_context.to_s.should eq("HTTP/1.1 101 Switching Protocols\r\nUpgrade: websocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=\r\n\r\n") | ||||||
|   end |   end | ||||||
| 
 | 
 | ||||||
|   it "matches correct verb" do |   it "matches correct verb" do | ||||||
|  |  | ||||||
|  | @ -59,7 +59,7 @@ module Kemal | ||||||
|       end |       end | ||||||
|     end |     end | ||||||
| 
 | 
 | ||||||
|     config.server ||= HTTP::Server.new(config.host_binding, config.port, config.handlers) |     server = config.server ||= HTTP::Server.new(config.handlers) | ||||||
| 
 | 
 | ||||||
|     {% if !flag?(:without_openssl) %} |     {% if !flag?(:without_openssl) %} | ||||||
|       config.server.not_nil!.tls = config.ssl |       config.server.not_nil!.tls = config.ssl | ||||||
|  | @ -68,13 +68,13 @@ module Kemal | ||||||
|     config.running = true |     config.running = true | ||||||
| 
 | 
 | ||||||
|     yield config |     yield config | ||||||
|     config.server.not_nil!.listen if config.env != "test" && config.server |     server.listen(config.host_binding, config.port) if config.env != "test" | ||||||
|   end |   end | ||||||
| 
 | 
 | ||||||
|   def self.stop |   def self.stop | ||||||
|     if config.running |     if config.running | ||||||
|       if config.server |       if server = config.server | ||||||
|         config.server.not_nil!.close |         server.close unless server.closed? | ||||||
|         config.running = false |         config.running = false | ||||||
|       else |       else | ||||||
|         raise "Kemal.config.server is not set. Please use Kemal.run to set the server." |         raise "Kemal.config.server is not set. Please use Kemal.run to set the server." | ||||||
|  |  | ||||||
|  | @ -21,7 +21,7 @@ module Kemal | ||||||
|     property host_binding, ssl, port, env, public_folder, logging, running |     property host_binding, ssl, port, env, public_folder, logging, running | ||||||
|     property always_rescue, server : HTTP::Server?, extra_options, shutdown_message |     property always_rescue, server : HTTP::Server?, extra_options, shutdown_message | ||||||
|     property serve_static : (Bool | Hash(String, Bool)) |     property serve_static : (Bool | Hash(String, Bool)) | ||||||
|     property static_headers : (HTTP::Server::Response, String, File::Stat -> Void)? |     property static_headers : (HTTP::Server::Response, String, File::Info -> Void)? | ||||||
|     property powered_by_header : Bool = true |     property powered_by_header : Bool = true | ||||||
| 
 | 
 | ||||||
|     def initialize |     def initialize | ||||||
|  |  | ||||||
|  | @ -119,7 +119,7 @@ def send_file(env : HTTP::Server::Context, path : String, mime_type : String? = | ||||||
|   minsize = 860 # http://webmasters.stackexchange.com/questions/31750/what-is-recommended-minimum-object-size-for-gzip-performance-benefits ?? |   minsize = 860 # http://webmasters.stackexchange.com/questions/31750/what-is-recommended-minimum-object-size-for-gzip-performance-benefits ?? | ||||||
|   request_headers = env.request.headers |   request_headers = env.request.headers | ||||||
|   filesize = File.size(file_path) |   filesize = File.size(file_path) | ||||||
|   filestat = File.stat(file_path) |   filestat = File.info(file_path) | ||||||
| 
 | 
 | ||||||
|   Kemal.config.static_headers.try(&.call(env.response, file_path, filestat)) |   Kemal.config.static_headers.try(&.call(env.response, file_path, filestat)) | ||||||
| 
 | 
 | ||||||
|  | @ -234,6 +234,6 @@ end | ||||||
| #   response.headers.add("Content-Size", filestat.size.to_s) | #   response.headers.add("Content-Size", filestat.size.to_s) | ||||||
| # end | # end | ||||||
| # ``` | # ``` | ||||||
| def static_headers(&headers : HTTP::Server::Response, String, File::Stat -> Void) | def static_headers(&headers : HTTP::Server::Response, String, File::Info -> Void) | ||||||
|   Kemal.config.static_headers = headers |   Kemal.config.static_headers = headers | ||||||
| end | end | ||||||
|  |  | ||||||
|  | @ -8,7 +8,7 @@ module Kemal | ||||||
|     MULTIPART_FORM   = "multipart/form-data" |     MULTIPART_FORM   = "multipart/form-data" | ||||||
|     PARTS            = %w(url query body json) |     PARTS            = %w(url query body json) | ||||||
|     # :nodoc: |     # :nodoc: | ||||||
|     alias AllParamTypes = Nil | String | Int64 | Float64 | Bool | Hash(String, JSON::Type) | Array(JSON::Type) |     alias AllParamTypes = Nil | String | Int64 | Float64 | Bool | Hash(String, JSON::Any) | Array(JSON::Any) | ||||||
|     getter files |     getter files | ||||||
| 
 | 
 | ||||||
|     def initialize(@request : HTTP::Request) |     def initialize(@request : HTTP::Request) | ||||||
|  | @ -89,7 +89,7 @@ module Kemal | ||||||
|       case json = JSON.parse(body).raw |       case json = JSON.parse(body).raw | ||||||
|       when Hash |       when Hash | ||||||
|         json.each do |key, value| |         json.each do |key, value| | ||||||
|           @json[key] = value.as(AllParamTypes) |           @json[key] = value.raw | ||||||
|         end |         end | ||||||
|       when Array |       when Array | ||||||
|         @json["_json"] = json |         @json["_json"] = json | ||||||
|  |  | ||||||
|  | @ -58,7 +58,7 @@ module Kemal | ||||||
|     end |     end | ||||||
| 
 | 
 | ||||||
|     private def etag(context : HTTP::Server::Context, file_path : String) |     private def etag(context : HTTP::Server::Context, file_path : String) | ||||||
|       etag = %{W/"#{File.lstat(file_path).mtime.epoch.to_s}"} |       etag = %{W/"#{File.info(file_path).modification_time.epoch.to_s}"} | ||||||
|       context.response.headers["ETag"] = etag |       context.response.headers["ETag"] = etag | ||||||
|       return false if !context.request.headers["If-None-Match"]? || context.request.headers["If-None-Match"] != etag |       return false if !context.request.headers["If-None-Match"]? || context.request.headers["If-None-Match"] != etag | ||||||
|       context.response.headers.delete "Content-Type" |       context.response.headers.delete "Content-Type" | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue