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.



456
457
458
459
460
461
# File 'lib/httpclient/http.rb', line 456

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.



447
448
449
# File 'lib/httpclient/http.rb', line 447

def chunk_size
  @chunk_size
end

#positionsObject

Hash that keeps IO positions



449
450
451
# File 'lib/httpclient/http.rb', line 449

def positions
  @positions
end

#sizeObject (readonly)

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



445
446
447
# File 'lib/httpclient/http.rb', line 445

def size
  @size
end

Instance Method Details

#contentObject

Returns a message body itself.



545
546
547
# File 'lib/httpclient/http.rb', line 545

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.

assert: @size is not nil



494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
# File 'lib/httpclient/http.rb', line 494

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, @body.sizes[part])
      else
        dev << part
      end
    end
  elsif Message.file?(@body)
    dev << header
    reset_pos(@body)
    dump_file(@body, dev, @size)
  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.



524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
# File 'lib/httpclient/http.rb', line 524

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.



464
465
466
467
468
469
470
# File 'lib/httpclient/http.rb', line 464

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

#init_response(body = nil) ⇒ Object

Initialize this instance as a response.



473
474
475
476
477
478
479
480
481
482
483
# File 'lib/httpclient/http.rb', line 473

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
  self
end