Sha256: 25b641de3dd0c2b8b0e88b9ae2fb3fe74ee6fc55c393905c5852e13b216cd937
Contents?: true
Size: 1.39 KB
Versions: 1
Compression:
Stored size: 1.39 KB
Contents
# encoding: utf-8 require 'forwardable' module Hatetepe class Serializer REQUEST_LINE = "%s %s HTTP/%.1f\r\n".freeze RESPONSE_LINE = "HTTP/%.1f %d %s\r\n".freeze HEADER = "%s: %s\r\n".freeze CRLF = "\r\n".freeze include Encoding extend Forwardable def_delegator :@message, :headers def_delegator :@message, :body def initialize(message, writer) @message = message @writer = writer end def serialize write(banana_line) write(header_block) write_body end def setup_body if body.closed.pending? setup_chunked_encoding setup_chunked_streaming else setup_identity_encoding end end private def write(*data) @writer.call(data.join('')) end def banana_line if Request === @message request_line else response_line end end def request_line sprintf(REQUEST_LINE, @message.http_method.upcase, @message.uri, @message.http_version) end def response_line sprintf(RESPONSE_LINE, @message.http_version, @message.status, @message.status_name) end def header_block headers.reduce('') { |a, e| a << header_line(*e) } + CRLF end def header_line(key, value) if value.to_s.empty? '' else sprintf(HEADER, key, value) end end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
hatetepe-0.6.0.pre.2 | lib/hatetepe/serializer.rb |