class HTTP::Message::Body::Parts

Attributes

size[R]
sizes[R]

Public Class Methods

new() click to toggle source
# File lib/httpclient/http.rb, line 609
def initialize
  @body = []
  @sizes = {}
  @size = 0 # total
  @as_stream = false
end

Public Instance Methods

add(part) click to toggle source
# File lib/httpclient/http.rb, line 616
def add(part)
  if Message.file?(part)
    @as_stream = true
    @body << part
    if part.respond_to?(:lstat)
      sz = part.lstat.size
      add_size(part, sz)
    elsif part.respond_to?(:size)
      if sz = part.size
        add_size(part, sz)
      else
        @sizes.clear
        @size = nil
      end
    else
      # use chunked upload
      @sizes.clear
      @size = nil
    end
  elsif @body[-1].is_a?(String)
    @body[-1] += part.to_s
    @size += part.to_s.bytesize if @size
  else
    @body << part.to_s
    @size += part.to_s.bytesize if @size
  end
end
parts() click to toggle source
# File lib/httpclient/http.rb, line 644
def parts
  if @as_stream
    @body
  else
    [@body.join]
  end
end

Private Instance Methods

add_size(part, sz) click to toggle source
# File lib/httpclient/http.rb, line 654
def add_size(part, sz)
  if @size
    @sizes[part] = sz
    @size += sz
  end
end