class Webmachine::Adapters::Rack::RequestBody
Wraps the Rack
input so it can be treated like a String or Enumerable. @api private
Public Class Methods
@param [Rack::Request] request the Rack
request
# File lib/webmachine/adapters/rack.rb, line 160 def initialize(request) @request = request end
Public Instance Methods
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
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
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