Compare commits
5 commits
3c2dcc73e5
...
c3cd44205f
Author | SHA1 | Date | |
---|---|---|---|
c3cd44205f | |||
|
a819d4792b | ||
|
dfe7dca08f | ||
|
2e749a2987 | ||
|
a8c0f09b85 |
8 changed files with 45 additions and 23 deletions
|
@ -18,7 +18,7 @@ dependencies:
|
|||
development_dependencies:
|
||||
ameba:
|
||||
github: crystal-ameba/ameba
|
||||
version: ~> 0.10.0
|
||||
version: ~> 0.12.0
|
||||
|
||||
crystal: 0.30.0
|
||||
|
||||
|
|
|
@ -10,6 +10,17 @@ describe "Kemal::RouteHandler" do
|
|||
client_response.body.should eq("hello")
|
||||
end
|
||||
|
||||
it "routes with long response body" do
|
||||
long_response_body = "string" * 10_000
|
||||
|
||||
get "/" do
|
||||
long_response_body
|
||||
end
|
||||
request = HTTP::Request.new("GET", "/")
|
||||
client_response = call_request_on_app(request)
|
||||
client_response.body.should eq(long_response_body)
|
||||
end
|
||||
|
||||
it "routes should only return strings" do
|
||||
get "/" do
|
||||
100
|
||||
|
|
|
@ -5,12 +5,12 @@ private def run(code)
|
|||
require "./src/kemal"
|
||||
#{code}
|
||||
CR
|
||||
String.build do |stdout|
|
||||
stderr = String.build do |io|
|
||||
Process.new("crystal", ["eval"], input: IO::Memory.new(code), output: stdout, error: io).wait
|
||||
end
|
||||
fail(stderr) unless stderr.empty?
|
||||
end
|
||||
|
||||
stdout = IO::Memory.new
|
||||
stderr = IO::Memory.new
|
||||
status = Process.new("crystal", ["eval"], input: IO::Memory.new(code), output: stdout, error: stderr).wait
|
||||
fail(stderr.to_s) unless status.success?
|
||||
stdout.to_s
|
||||
end
|
||||
|
||||
describe "Run" do
|
||||
|
|
|
@ -48,6 +48,9 @@ def create_ws_request_and_return_io_and_context(handler, request)
|
|||
rescue IO::Error
|
||||
# Raises because the IO::Memory is empty
|
||||
end
|
||||
{% if compare_versions(Crystal::VERSION, "0.35.0-0") >= 0 %}
|
||||
response.upgrade_handler.try &.call(io)
|
||||
{% end %}
|
||||
io.rewind
|
||||
{io, context}
|
||||
end
|
||||
|
|
|
@ -8,7 +8,7 @@ class HTTP::Server::Response
|
|||
|
||||
ensure_headers_written
|
||||
|
||||
super
|
||||
previous_def
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
require "flate"
|
||||
require "gzip"
|
||||
{% if compare_versions(Crystal::VERSION, "0.35.0-0") >= 0 %}
|
||||
require "compress/deflate"
|
||||
require "compress/gzip"
|
||||
{% end %}
|
||||
require "mime"
|
||||
|
||||
# Adds given `Kemal::Handler` to handlers chain.
|
||||
|
@ -142,14 +144,26 @@ def send_file(env : HTTP::Server::Context, path : String, mime_type : String? =
|
|||
condition = config.is_a?(Hash) && config["gzip"]? == true && filesize > minsize && Kemal::Utils.zip_types(file_path)
|
||||
if condition && request_headers.includes_word?("Accept-Encoding", "gzip")
|
||||
env.response.headers["Content-Encoding"] = "gzip"
|
||||
{% if compare_versions(Crystal::VERSION, "0.35.0-0") >= 0 %}
|
||||
Compress::Gzip::Writer.open(env.response) do |deflate|
|
||||
IO.copy(file, deflate)
|
||||
end
|
||||
{% else %}
|
||||
Gzip::Writer.open(env.response) do |deflate|
|
||||
IO.copy(file, deflate)
|
||||
end
|
||||
{% end %}
|
||||
elsif condition && request_headers.includes_word?("Accept-Encoding", "deflate")
|
||||
env.response.headers["Content-Encoding"] = "deflate"
|
||||
{% if compare_versions(Crystal::VERSION, "0.35.0-0") >= 0 %}
|
||||
Compress::Deflate::Writer.open(env.response) do |deflate|
|
||||
IO.copy(file, deflate)
|
||||
end
|
||||
{% else %}
|
||||
Flate::Writer.open(env.response) do |deflate|
|
||||
IO.copy(file, deflate)
|
||||
end
|
||||
{% end %}
|
||||
else
|
||||
env.response.content_length = filesize
|
||||
IO.copy(file, env.response)
|
||||
|
|
|
@ -1,7 +1,3 @@
|
|||
{% if !flag?(:without_zlib) %}
|
||||
require "zlib"
|
||||
{% end %}
|
||||
|
||||
module Kemal
|
||||
class StaticFileHandler < HTTP::StaticFileHandler
|
||||
# ameba:disable Metrics/CyclomaticComplexity
|
||||
|
|
|
@ -31,9 +31,7 @@ module Kemal
|
|||
|
||||
def call(context : HTTP::Server::Context)
|
||||
return call_next(context) unless context.ws_route_found? && websocket_upgrade_request?(context)
|
||||
content = context.websocket.call(context)
|
||||
context.response.print(content)
|
||||
context
|
||||
context.websocket.call(context)
|
||||
end
|
||||
|
||||
def lookup_ws_route(path : String)
|
||||
|
|
Loading…
Reference in a new issue