Sha256: 4cdf8c40cd1068244365840b54130c66e6fdedb9cb6f584fe180e79fea49fcd9

Contents?: true

Size: 1.09 KB

Versions: 3

Compression:

Stored size: 1.09 KB

Contents

require "net_http_hacked"

module Rack

  # Wraps the hacked net/http in a Rack way.
  class HttpStreamingResponse
    attr_accessor :use_ssl

    def initialize(request, host, port = nil)
      @request, @host, @port = request, host, port
    end
    
    def status
      response.code.to_i
    end
    
    def headers
      h = Utils::HeaderHash.new
      
      response.each_header do |k, v|
        h[k] = v
      end
      
      h
    end
    
    def body
      self
    end

    # Can be called only once!
    def each(&block)
      response.read_body(&block)
    ensure
      session.end_request_hacked
    end
    
    def to_s
      @body ||= begin
        lines = []

        each do |line|
          lines << line
        end
        
        lines.join
      end
    end
    
    protected
    
    # Net::HTTPResponse
    def response
      @response ||= session.begin_request_hacked(@request)
    end
    
    # Net::HTTP
    def session
      @session ||= begin
        http = Net::HTTP.new @host, @port
        http.use_ssl = self.use_ssl
        http.start
      end
    end
    
  end

end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
rack-proxy-0.3.7 lib/rack/http_streaming_response.rb
rack-proxy-0.3.6 lib/rack/http_streaming_response.rb
rack-proxy-0.3.5 lib/rack/http_streaming_response.rb