class Rack::ContentLength - rack-1.6.2 Documentation

# class Rack::ContentLength

Sets the Content-Length header on responses with fixed-length bodies.

### Public Class Methods

new(app) click to toggle source

    # File lib/rack/content_length.rb, line 10
    def initialize(app)
      @app = app
    end

### Public Instance Methods

call(env) click to toggle source

    # File lib/rack/content_length.rb, line 14
    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'] &&
         body.respond_to?(:to_ary)

        obody = body
        body, length = [], 0
        obody.each { |part| body << part; length += bytesize(part) }

        body = BodyProxy.new(body) do
          obody.close if obody.respond_to?(:close)
        end

        headers[CONTENT_LENGTH] = length.to_s
      end

      [status, headers, body]
    end