Sha256: 289dbfa800c7be5b1949a81444205f9c8a6d2e025e443ece5e774def1c46eca5

Contents?: true

Size: 1.7 KB

Versions: 2

Compression:

Stored size: 1.7 KB

Contents

# encoding: utf-8

module HTTPkit
  module Support
    module Message
      TRANSFER_ENCODING = 'Transfer-Encoding'.freeze
      CHUNKED = 'chunked'.freeze
      CONTENT_LENGTH = 'Content-Length'.freeze

      def closed?
        !body.closed.pending?
      end

      def closed!
        body.closed.sync
      end

      def closed(&block)
        body.closed.then(&block)
      end

      def close
        body.closed.fulfill
      end

      def reject_closed(reason)
        body.closed.reject(reason)
      end

      def body_headers
        length, encoding = nil, nil

        if body_present?
          if body.length_known?
            length = body.length.to_i
          else
            encoding = CHUNKED
          end
        end

        { CONTENT_LENGTH => length, TRANSFER_ENCODING => encoding }
      end

      def self.build(parser)
        message = build_message(parser)
        message.close if !message.body_included? || !message.body_present?
        message
      end

      private

      def self.build_message(parser)
        if parser.http_method
          build_request(parser)
        else
          build_response(parser)
        end
      end

      def self.build_request(parser)
        Request.new(http_method_from(parser), parser.request_url,
                    parser.headers, Body.new, http_version_from(parser))
      end

      def self.build_response(parser)
        Response.new(parser.status_code, parser.headers, Body.new,
                     http_version_from(parser))
      end

      def self.http_method_from(parser)
        parser.http_method.downcase.to_sym
      end

      def self.http_version_from(parser)
        parser.http_version.join('.').to_f
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
httpkit-0.6.0 lib/httpkit/support/message.rb
httpkit-0.6.0.pre.5 lib/httpkit/support/message.rb