Sha256: e2db52128ec6c927c7b96b693e37253ec371685bbc61777a89de31ab7503a5e5

Contents?: true

Size: 1.05 KB

Versions: 2

Compression:

Stored size: 1.05 KB

Contents

module Mongrel2
  class Request
    attr_reader :sender, :conn_id, :path, :headers, :body
    def initialize(sender, conn_id, path, headers, body)
      @sender = sender
      @conn_id = conn_id
      @path = path
      @headers = headers
      @body = body
      
      if headers['METHOD'] == 'JSON'
        @data = JSON.parse(@body)
      else
        @data = {}
      end
    end

    def self.parse_netstring(ns)
      len, rest = ns.split(':', 2)
      len = len.to_i
      raise "Netstring did not end in ','" unless rest[len].chr == ','
      [ rest[0...len], rest[(len+1)..-1] ]
    end
    
    def self.parse(msg)
      sender, conn_id, path, rest = msg.split(' ', 4)
      headers, head_rest = parse_netstring(rest)
      body, _ = parse_netstring(head_rest)

      headers = JSON.parse(headers)

      self.new(sender, conn_id, path, headers, body)
    end

    def disconnect? 
      if self.headers['METHOD'] == 'JSON'
        @data['type'] == 'disconnect'
      end
    end
    alias :is_disconnect :disconnect?

  end # class Request
end # mod Mongrel2
    

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
m2r-0.0.3 lib/request.rb
m2r-0.0.2 lib/request.rb