Sha256: 7c1a7f05834fec7c6af4f146a5f5f884b571220dc319a2cb4c0bd08a77b59b20

Contents?: true

Size: 1.21 KB

Versions: 1

Compression:

Stored size: 1.21 KB

Contents

require "em-synchrony"

require 'commute/common/eventmachine'

module Commute
  module Common

    # Public: Adapter that uses em-synchrony (with em-http-request).
    #
    # Requires use of em-synchrony and thus Eventmachine.
    #
    class Synchrony < Eventmachine
      @name = :adapter

      # Internal: Make a request through em-synchrony.
      def call router, request, options = {}
        # Get the current fiber.
        body = nil
        request.on(:data) { |_body| body = _body }
        # Buffer the request (only streaming response).
        request.on(:end) do |body|
          response = nil
          # Create a native em-http request.
          em_request = to_request request.http, body

          # Create a Http response.
          http_response = to_response request, em_request.response_header
          # Create a Http::Status (determined from response code).
          status = Http::Status.new(http_response.code)
          # Respond.
          response = request.respond(http_response, status)

          response.write em_request.response unless \
            em_request.response.strip.empty?

          # Request is finished, end the response.
          response.end
        end
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
commute-0.3.0.pre lib/commute/common/synchrony.rb