lib/rack/content_length.rb in rack-1.3.0.beta2 vs lib/rack/content_length.rb in rack-1.3.0

- old
+ new

@@ -1,31 +1,30 @@ require 'rack/utils' module Rack + # Sets the Content-Length header on responses with fixed-length bodies. class ContentLength include Rack::Utils - def initialize(app, sendfile=nil) + def initialize(app) @app = app - @sendfile = sendfile 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'] && - !(@sendfile && headers[@sendfile]) + body.respond_to?(:to_ary) - new_body, length = [], 0 - body.each do |part| - new_body << part - length += bytesize(part) - end - body = new_body + 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