summaryrefslogtreecommitdiff
path: root/app/middleware/content_length.rb
diff options
context:
space:
mode:
Diffstat (limited to 'app/middleware/content_length.rb')
-rw-r--r--app/middleware/content_length.rb32
1 files changed, 32 insertions, 0 deletions
diff --git a/app/middleware/content_length.rb b/app/middleware/content_length.rb
new file mode 100644
index 0000000..fa51160
--- /dev/null
+++ b/app/middleware/content_length.rb
@@ -0,0 +1,32 @@
+require 'rack/utils'
+
+class ContentLength
+
+ include Rack::Utils
+
+ def initialize app
+ @app = app
+ end
+
+ def call env
+ status, headers, body = @app.call(env)
+ headers = HeaderHash.new(headers)
+ if !STATUS_WITH_NO_ENTITY_BODY.include?(status.to_i) &&
+ !headers['Content-Length'] &&
+ !headers['Transfer-Encoding']
+
+ #see https://stackoverflow.com/questions/26534165/unable-to-get-content-length-header-working-under-rails-4-1puma
+ #see https://github.com/rails/rails/pull/16793
+ #&& body.respond_to?(:to_ary)
+
+ obody = body
+ body, length = [], 0
+ obody.each { |part| body << part; length += bytesize(part) }
+ obody.close if obody.respond_to?(:close)
+
+ headers['Content-Length'] = length.to_s
+ end
+ [status, headers, body]
+ end
+
+end