class Webmachine::Adapters::Rack::RequestBody

Wraps the Rack input so it can be treated like a String or Enumerable. @api private

Public Class Methods

new(request) click to toggle source

@param [Rack::Request] request the Rack request

# File lib/webmachine/adapters/rack.rb, line 160
def initialize(request)
  @request = request
end

Public Instance Methods

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

Iterates over the body in chunks. If the body has previously been read, this method can be called again and get the same sequence of chunks. @yield [chunk] @yieldparam [String] chunk a chunk of the request body

# File lib/webmachine/adapters/rack.rb, line 190
def each
  if @value
    @value.each { |chunk| yield chunk }
  else
    @value = []
    @request.body.each { |chunk|
      @value << chunk
      yield chunk
    }
  end
end
to_io() click to toggle source

Rack Servers differ in the way you can access their request bodys. While some allow you to directly get a Ruby IO object others don’t. You have to check the methods they expose, like gets, read, each, rewind and maybe others. See: github.com/rack/rack/blob/rack-1.5/lib/rack/lint.rb#L296 @return [IO] the request body

# File lib/webmachine/adapters/rack.rb, line 169
def to_io
  @request.body
end
to_s() click to toggle source

Converts the body to a String so you can work with the entire thing. @return [String] the request body as a string

# File lib/webmachine/adapters/rack.rb, line 176
def to_s
  if @value
    @value.join
  else
    @request.body.rewind
    @request.body.read
  end
end