class Minver::Parser
Public Class Methods
new(stream_or_string)
click to toggle source
# File lib/minver/parser.rb, line 5 def initialize(stream_or_string) @stream = if stream_or_string.is_a? String StringIO.new(stream_or_string) else stream_or_string end end
Public Instance Methods
[](key)
click to toggle source
# File lib/minver/parser.rb, line 27 def [](key) headers[key] end
body()
click to toggle source
# File lib/minver/parser.rb, line 35 def body @body ||= @stream.read(headers["Content-Length"].to_i) end
data()
click to toggle source
# File lib/minver/parser.rb, line 31 def data @data ||= [*head, body].join end
headers()
click to toggle source
# File lib/minver/parser.rb, line 21 def headers @headers ||= header_lines.inject({}) do |h, line| h.merge(Hash[[line.rstrip.split(': ', 2)]]) end end
http_method()
click to toggle source
# File lib/minver/parser.rb, line 13 def http_method @http_method ||= request_match[1] end
path()
click to toggle source
# File lib/minver/parser.rb, line 39 def path @path ||= request_uri.first end
query_string()
click to toggle source
# File lib/minver/parser.rb, line 43 def query_string @query_string ||= request_uri[1] || '' end
request_http_version()
click to toggle source
# File lib/minver/parser.rb, line 17 def request_http_version @request_http_version ||= request_match[3] end
Protected Instance Methods
head()
click to toggle source
# File lib/minver/parser.rb, line 64 def head @head ||= "".tap do |h| begin h << line = @stream.readline # TODO: non-blocking end until ["\r\n", "\n"].include? line end end
header_lines()
click to toggle source
# File lib/minver/parser.rb, line 60 def header_lines @header_lines ||= head.lines[1...-1] end
request_line()
click to toggle source
# File lib/minver/parser.rb, line 56 def request_line @request_line ||= head.lines.first end
request_match()
click to toggle source
# File lib/minver/parser.rb, line 52 def request_match @request_match ||= request_line.match(/(\S+)\s+(\S+)(?:\s+HTTP\/(\S+)?)/) end
request_uri()
click to toggle source
# File lib/minver/parser.rb, line 48 def request_uri @request_uri ||= request_match[2].split('?', 2) end