class HTTP::Request::Body

Attributes

source[R]

Public Class Methods

new(source) click to toggle source
# File lib/http/request/body.rb, line 8
def initialize(source)
  @source = source

  validate_source_type!
end

Public Instance Methods

each() { |source| ... } click to toggle source

Yields chunks of content to be streamed to the request body.

@yieldparam [String]

# File lib/http/request/body.rb, line 33
def each(&block)
  if @source.is_a?(String)
    yield @source
  elsif @source.respond_to?(:read)
    IO.copy_stream(@source, ProcIO.new(block))
    @source.rewind if @source.respond_to?(:rewind)
  elsif @source.is_a?(Enumerable)
    @source.each(&block)
  end
end
size() click to toggle source

Returns size which should be used for the “Content-Length” header.

@return [Integer]

# File lib/http/request/body.rb, line 17
def size
  if @source.is_a?(String)
    @source.bytesize
  elsif @source.respond_to?(:read)
    raise RequestError, "IO object must respond to #size" unless @source.respond_to?(:size)
    @source.size
  elsif @source.nil?
    0
  else
    raise RequestError, "cannot determine size of body: #{@source.inspect}"
  end
end

Private Instance Methods

validate_source_type!() click to toggle source
# File lib/http/request/body.rb, line 46
def validate_source_type!
  return if @source.is_a?(String)
  return if @source.respond_to?(:read)
  return if @source.is_a?(Enumerable)
  return if @source.nil?

  raise RequestError, "body of wrong type: #{@source.class}"
end