From 92a676aef5a5cf88a4b3de56b1b0aba4a6a07e22 Mon Sep 17 00:00:00 2001 From: Mike Rogers Date: Mon, 12 Jul 2021 02:50:15 -0500 Subject: [PATCH] feat: Adding support for streamed responses (#6) --- lib/faraday/adapter/net_http_persistent.rb | 21 ++++++++++++++++++- .../adapter/net_http_persistent_spec.rb | 2 +- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/lib/faraday/adapter/net_http_persistent.rb b/lib/faraday/adapter/net_http_persistent.rb index eb5c597..e978bbc 100644 --- a/lib/faraday/adapter/net_http_persistent.rb +++ b/lib/faraday/adapter/net_http_persistent.rb @@ -50,7 +50,26 @@ def proxy_uri(env) end def perform_request(http, env) - http.request env[:url], create_request(env) + if env[:request].stream_response? + size = 0 + yielded = false + + http_response = http.request(env[:url], create_request(env)) do |response| + response.read_body do |chunk| + if chunk.bytesize.positive? || size.positive? + yielded = true + size += chunk.bytesize + env[:request].on_data.call(chunk, size) + end + end + end + + env[:request].on_data.call(+"", 0) unless yielded + http_response.body = nil + http_response + else + http.request(env[:url], create_request(env)) + end rescue Errno::ETIMEDOUT, Net::OpenTimeout => e raise Faraday::TimeoutError, e rescue Net::HTTP::Persistent::Error => e diff --git a/spec/faraday/adapter/net_http_persistent_spec.rb b/spec/faraday/adapter/net_http_persistent_spec.rb index 37e013f..f7512da 100644 --- a/spec/faraday/adapter/net_http_persistent_spec.rb +++ b/spec/faraday/adapter/net_http_persistent_spec.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true RSpec.describe Faraday::Adapter::NetHttpPersistent do - features :request_body_on_query_methods, :reason_phrase_parse, :compression, :trace_method + features :request_body_on_query_methods, :reason_phrase_parse, :compression, :trace_method, :streaming it_behaves_like "an adapter"