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