Sha256: 734b660818f034e38d4b2c3c8845c46c4bbaf06c5a8f4e4fc66fd3db0ad98aca

Contents?: true

Size: 1.15 KB

Versions: 1

Compression:

Stored size: 1.15 KB

Contents

module WWW
  class Mechanize
    class Chain
      class ResponseReader
        include WWW::Handler

        def initialize(response)
          @response = response
        end

        def handle(ctx, params)
          params[:response] = @response
          body = StringIO.new
          total = 0
          @response.read_body { |part|
            total += part.length
            body.write(part)
            Mechanize.log.debug("Read #{total} bytes") if Mechanize.log
          }
          body.rewind

          res_klass = Net::HTTPResponse::CODE_TO_OBJ[@response.code.to_s]
          raise ResponseCodeError.new(@response) unless res_klass

          # Net::HTTP ignores EOFError if Content-length is given, so we emulate it here.
          unless res_klass <= Net::HTTPRedirection
            raise EOFError if @response.content_length() && @response.content_length() != total
          end
  
          response.each_header { |k,v|
            Mechanize.log.debug("response-header: #{ k } => #{ v }")
          } if Mechanize.log

          params[:response_body] = body
          params[:res_klass] = res_klass
          super
        end
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
mechanize-0.8.0 lib/www/mechanize/chain/response_reader.rb