Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
http-server / lib / http / server / response.rb
Size: Mime:
module HTTP
  module Server
    class Response
      attr_reader :connection
      attr_reader :request_headers
      attr_reader :response_headers

      dependency :logger

      def initialize(connection, request_headers, response_headers)
        @connection = connection
        @request_headers = request_headers
        @response_headers = response_headers
      end

      def self.build(connection, request_headers)
        response_headers = HTTP::Protocol::Response::Headers.build

        instance = new connection, request_headers, response_headers
        Telemetry::Logger.configure instance
        instance
      end

      def []=(header_name, value)
        response_headers[header_name] = value
      end

      def deliver(status_code, message_body = "", content_type = nil)
        logger.opt_trace "Server is sending response"

        reason_phrase = REASON_PHRASES.fetch status_code
        response = HTTP::Protocol::Response.new status_code, reason_phrase
        response.merge_headers response_headers
        response["Content-Type"] = content_type if content_type

        if message_body.empty?
          logger.opt_data response
          connection.write response
        else
          response["Content-Length"] = message_body.size
          logger.opt_data response
          logger.opt_data message_body
          connection.write response
          connection.write message_body
        end

        logger.opt_debug "Server sent response"
      end
    end
  end
end