class Kwipper::HttpParser
Constants
- HEADER_DELIMITER
Public Instance Methods
parse(raw_request)
click to toggle source
# File lib/kwipper/http_parser.rb, line 5 def parse(raw_request) @first_line = raw_request.gets if @first_line.nil? raise Kwipper::EmptyRequest, 'could not get first line' else Request.new do |r| r.http_method = @first_line.split(' ').first r.path = parse_path r.query = parse_query r.headers = parse_headers raw_request r.post_data = parse_query_string raw_request.read(r.content_length) if r.post_data? end end end
Private Instance Methods
parse_headers(raw_request)
click to toggle source
# File lib/kwipper/http_parser.rb, line 34 def parse_headers(raw_request) lines = [] while (line = raw_request.gets) != HEADER_DELIMITER lines << line.chomp end lines.each_with_object RequestHeaders.new do |line, request_headers| key, val = line.split(/:\s?/) request_headers[key] = val end end
parse_path()
click to toggle source
# File lib/kwipper/http_parser.rb, line 23 def parse_path p = @first_line.split(' ')[1] p ? p.split('?').first : '/' end
parse_query()
click to toggle source
# File lib/kwipper/http_parser.rb, line 28 def parse_query p = @first_line.split(' ')[1] q = p && !p['?'].nil? ? p.split('?').last.chomp : nil parse_query_string q end
parse_query_string(s)
click to toggle source
# File lib/kwipper/http_parser.rb, line 47 def parse_query_string(s) Rack::Utils.parse_nested_query s.to_s end