diff --git a/shard.yml b/shard.yml index 428149a..d605e2c 100644 --- a/shard.yml +++ b/shard.yml @@ -18,7 +18,7 @@ dependencies: development_dependencies: ameba: github: crystal-ameba/ameba - version: ~> 0.12.0 + version: ~> 0.10.0 crystal: 0.30.0 diff --git a/spec/route_handler_spec.cr b/spec/route_handler_spec.cr index 93cf0f0..4ec111b 100644 --- a/spec/route_handler_spec.cr +++ b/spec/route_handler_spec.cr @@ -10,17 +10,6 @@ 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 diff --git a/spec/run_spec.cr b/spec/run_spec.cr index ec89d23..818cbe9 100644 --- a/spec/run_spec.cr +++ b/spec/run_spec.cr @@ -5,12 +5,12 @@ private def run(code) require "./src/kemal" #{code} CR - - 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 + 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 end describe "Run" do diff --git a/spec/spec_helper.cr b/spec/spec_helper.cr index 803aacf..0bc127a 100644 --- a/spec/spec_helper.cr +++ b/spec/spec_helper.cr @@ -48,9 +48,6 @@ 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 diff --git a/src/kemal/ext/response.cr b/src/kemal/ext/response.cr index 6fd4c01..faf9db1 100644 --- a/src/kemal/ext/response.cr +++ b/src/kemal/ext/response.cr @@ -8,7 +8,7 @@ class HTTP::Server::Response ensure_headers_written - previous_def + super end end end diff --git a/src/kemal/helpers/helpers.cr b/src/kemal/helpers/helpers.cr index bf212a2..7f14755 100644 --- a/src/kemal/helpers/helpers.cr +++ b/src/kemal/helpers/helpers.cr @@ -1,7 +1,5 @@ -{% if compare_versions(Crystal::VERSION, "0.35.0-0") >= 0 %} - require "compress/deflate" - require "compress/gzip" -{% end %} +require "flate" +require "gzip" require "mime" # Adds given `Kemal::Handler` to handlers chain. @@ -144,26 +142,14 @@ 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 %} + Gzip::Writer.open(env.response) do |deflate| + IO.copy(file, deflate) + 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 %} + Flate::Writer.open(env.response) do |deflate| + IO.copy(file, deflate) + end else env.response.content_length = filesize IO.copy(file, env.response) diff --git a/src/kemal/static_file_handler.cr b/src/kemal/static_file_handler.cr index 109e971..7f3e061 100644 --- a/src/kemal/static_file_handler.cr +++ b/src/kemal/static_file_handler.cr @@ -1,3 +1,7 @@ +{% if !flag?(:without_zlib) %} + require "zlib" +{% end %} + module Kemal class StaticFileHandler < HTTP::StaticFileHandler # ameba:disable Metrics/CyclomaticComplexity diff --git a/src/kemal/websocket_handler.cr b/src/kemal/websocket_handler.cr index 03aed1a..469979a 100644 --- a/src/kemal/websocket_handler.cr +++ b/src/kemal/websocket_handler.cr @@ -31,7 +31,9 @@ module Kemal def call(context : HTTP::Server::Context) return call_next(context) unless context.ws_route_found? && websocket_upgrade_request?(context) - context.websocket.call(context) + content = context.websocket.call(context) + context.response.print(content) + context end def lookup_ws_route(path : String)