Class: WWW::Mechanize::Chain::ResponseReader

Inherits:
Object
  • Object
show all
Includes:
Handler
Defined in:
lib/www/mechanize/chain/response_reader.rb

Instance Attribute Summary

Attributes included from Handler

#chain

Instance Method Summary collapse

Constructor Details

#initialize(response) ⇒ ResponseReader

Returns a new instance of ResponseReader.



7
8
9
# File 'lib/www/mechanize/chain/response_reader.rb', line 7

def initialize(response)
  @response = response
end

Instance Method Details

#handle(ctx, params) ⇒ Object

Raises:



11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# File 'lib/www/mechanize/chain/response_reader.rb', line 11

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 (!params[:request].is_a?(Net::HTTP::Head)) && @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