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.



450
451
452
453
454
455
# File 'lib/httpclient/http.rb', line 450

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.



443
444
445
# File 'lib/httpclient/http.rb', line 443

def chunk_size
  @chunk_size
end

#sizeObject (readonly)

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



441
442
443
# File 'lib/httpclient/http.rb', line 441

def size
  @size
end

Instance Method Details

#contentObject

Returns a message body itself.



535
536
537
# File 'lib/httpclient/http.rb', line 535

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.



484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
# File 'lib/httpclient/http.rb', line 484

def dump(header = '', dev = '')
  if @body.is_a?(Parts)
    dev << header
    @body.parts.each do |part|
      if Message.file?(part)
        reset_pos(part)
        dump_file(part, dev)
      else
        dev << part
      end
    end
  elsif Message.file?(@body)
    dev << header
    reset_pos(@body)
    dump_file(@body, dev)
  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.



514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
# File 'lib/httpclient/http.rb', line 514

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.



458
459
460
461
462
463
# File 'lib/httpclient/http.rb', line 458

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.



466
467
468
469
470
471
472
473
474
475
# File 'lib/httpclient/http.rb', line 466

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