Class: HTTP::Message::Body

Inherits:
Object
  • Object
show all
Defined in:
lib/httpclient/http.rb

Overview

Represents HTTP message body.

Defined Under Namespace

Classes: Parts

Constant Summary collapse

DEFAULT_CHUNK_SIZE =

Default value for chunk_size

1024 * 16

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeBody

Creates a Message::Body. Use init_request or init_response for acutual initialize.


399
400
401
402
403
404
# File 'lib/httpclient/http.rb', line 399

def initialize
  @body = nil
  @size = nil
  @positions = nil
  @chunk_size = nil
end

Instance Attribute Details

#chunk_sizeObject

maxbytes of IO#read for streaming request. See DEFAULT_CHUNK_SIZE.


392
393
394
# File 'lib/httpclient/http.rb', line 392

def chunk_size
  @chunk_size
end

#sizeObject (readonly)

Size of body. nil when size is unknown (e.g. chunked response).


390
391
392
# File 'lib/httpclient/http.rb', line 390

def size
  @size
end

Instance Method Details

#contentObject

Returns a message body itself.


481
482
483
# File 'lib/httpclient/http.rb', line 481

def content
  @body
end

#dump(header = '', dev = '') ⇒ Object

Dumps message body to given dev. dev needs to respond to <<.

Message header must be given as the first argument for performance reason. (header is dumped to dev, too) If no dev (the second argument) given, this method returns a dumped String.


431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
# File 'lib/httpclient/http.rb', line 431

def dump(header = '', dev = '')
  if @body.is_a?(Parts)
    dev << header
    buf = ''
    @body.parts.each do |part|
      if Message.file?(part)
        reset_pos(part)
        while !part.read(@chunk_size, buf).nil?
          dev << buf
        end
      else
        dev << part
      end
    end
  elsif @body
    dev << header + @body
  else
    dev << header
  end
  dev
end

#dump_chunked(header = '', dev = '') ⇒ Object

Dumps message body with chunked encoding to given dev. dev needs to respond to <<.

Message header must be given as the first argument for performance reason. (header is dumped to dev, too) If no dev (the second argument) given, this method returns a dumped String.


460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
# File 'lib/httpclient/http.rb', line 460

def dump_chunked(header = '', dev = '')
  dev << header
  if @body.is_a?(Parts)
    @body.parts.each do |part|
      if Message.file?(part)
        reset_pos(part)
        dump_chunks(part, dev)
      else
        dev << dump_chunk(part)
      end
    end
    dev << (dump_last_chunk + CRLF)
  elsif @body
    reset_pos(@body)
    dump_chunks(@body, dev)
    dev << (dump_last_chunk + CRLF)
  end
  dev
end

#init_request(body = nil, boundary = nil) ⇒ Object

Initialize this instance as a request.


407
408
409
410
411
412
# File 'lib/httpclient/http.rb', line 407

def init_request(body = nil, boundary = nil)
  @boundary = boundary
  @positions = {}
  set_content(body, boundary)
  @chunk_size = DEFAULT_CHUNK_SIZE
end

#init_response(body = nil) ⇒ Object

Initialize this instance as a response.


415
416
417
418
419
420
421
422
# File 'lib/httpclient/http.rb', line 415

def init_response(body = nil)
  @body = body
  if @body.respond_to?(:size)
    @size = @body.size
  else
    @size = nil
  end
end