class M2R::Parser

Mongrel2 Request Parser @api public

Public Instance Methods

parse(msg) click to toggle source

Parse Mongrel2 request received via ZMQ message

@param [String] msg Monrel2 Request message formatted according to rules

of creating it described it m2 manual.

@return [Request]

@api public @threadsafe true

# File lib/m2r/parser.rb, line 15
def parse(msg)
  sender, conn_id, path, rest = msg.split(' ', 4)

  headers, rest = TNetstring.parse(rest)
  body, _       = TNetstring.parse(rest)
  headers       = MultiJson.load(headers)
  headers, mong = split_headers(headers)
  headers       = Headers.new headers, true
  mong          = Headers.new mong, true
  Request.new(sender, conn_id, path, headers, mong, body)
end

Private Instance Methods

split_headers(headers) click to toggle source
# File lib/m2r/parser.rb, line 29
def split_headers(headers)
  http    = {}
  mongrel = {}
  headers.each do |header, value|
    if Request::MONGREL2_HEADERS.include?(header)
      mongrel[header.downcase] = value
    else
      http[header] = value
    end
  end
  return http, mongrel
end