async-http-faraday 0.19.0 → 0.20.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 405bbaf8e19d542be2efd5e6ba29e5dabaa0fedbbad6c392f70b70dac5295f21
4
- data.tar.gz: 2ae52a3a031dea0f6c715e7144f9e0ed2872b0e9b2c8a07043ce1be49f8640a5
3
+ metadata.gz: c35355716bc9483c9f0dcd3070e31cfa0570e49e20d25f96fa429c06d55fef5f
4
+ data.tar.gz: 8781699d3bef67478a25bee464f7ccd9bb7cfcf39dae30879f7ad2c09b767e9b
5
5
  SHA512:
6
- metadata.gz: 8808afa0006650011169d8a9ea52d7029e8e7032d84eceec7e2fa2046b58e66297c3a5b0166ed623b81198161e5a5830309b4db21e30e9174d69f21927bb0a6f
7
- data.tar.gz: '064528fe335006b4b00ba6719c119bf583c0cfb20ebdf67d74324d98c74d1c95c3bd9d00359ae1bf80d1fdaca796203526c95473a1d392128eff66b392770dba'
6
+ metadata.gz: 785d20de694024d75fd214bdfbf0680d7de1e0cb8fb695434186b51c829b2b04c9c957a6cab120ce64b75b7daa57c9fa26cd19940e22296015183793ec2bbac3
7
+ data.tar.gz: 4f3cf8059b823e6db1b2be08eb76cd49d8383deb1685e8bafb31796d8c23a0f67672062c6739097a71dd944f48e346c74b9ca1c01a34ebbf0736c39fe049bebc
checksums.yaml.gz.sig CHANGED
Binary file
data/examples/topics.rb CHANGED
@@ -6,14 +6,14 @@
6
6
 
7
7
  $LOAD_PATH.unshift File.expand_path("../lib", __dir__)
8
8
 
9
- require 'async'
10
- require 'faraday'
11
- require 'async/http/faraday'
9
+ require "async"
10
+ require "faraday"
11
+ require "async/http/faraday"
12
12
 
13
13
  # Async.logger.debug!
14
14
 
15
15
  module TestAsync
16
- URL = 'https://www.google.com/search'
16
+ URL = "https://www.google.com/search"
17
17
  TOPICS = %W{ruby python lisp javascript cobol}
18
18
 
19
19
  def self.fetch_topics_async
@@ -8,18 +8,18 @@
8
8
  # Copyright, 2023, by Genki Takiuchi.
9
9
  # Copyright, 2023, by Flavio Fernandes.
10
10
  # Copyright, 2024, by Jacob Frautschi.
11
- # Copyright, 2024, by Korbin Hoffman.
11
+ # Copyright, 2025, by Nikolaos Anastopoulos.
12
12
 
13
- require 'faraday'
14
- require 'faraday/adapter'
13
+ require "faraday"
14
+ require "faraday/adapter"
15
15
 
16
- require 'async/barrier'
17
- require 'kernel/sync'
16
+ require "async/barrier"
17
+ require "kernel/sync"
18
18
 
19
- require 'async/http/client'
20
- require 'async/http/proxy'
19
+ require "async/http/client"
20
+ require "async/http/proxy"
21
21
 
22
- require_relative 'clients'
22
+ require_relative "clients"
23
23
 
24
24
  module Async
25
25
  module HTTP
@@ -50,18 +50,22 @@ module Async
50
50
  end
51
51
  end
52
52
 
53
+ # Implement the Faraday parallel manager interface, using Async.
53
54
  class ParallelManager
55
+ # Create a new parallel manager.
54
56
  def initialize(options = {})
55
57
  @options = options
56
58
  @barrier = nil
57
59
  end
58
60
 
61
+ # @deprecated Please update your Faraday version!
59
62
  def run
60
63
  if $VERBOSE
61
64
  warn "Please update your Faraday version!", uplevel: 2
62
65
  end
63
66
  end
64
67
 
68
+ # Run the given block asynchronously, using the barrier if available.
65
69
  def async(&block)
66
70
  if @barrier
67
71
  @barrier.async(&block)
@@ -70,6 +74,7 @@ module Async
70
74
  end
71
75
  end
72
76
 
77
+ # Execute the given block which can perform multiple concurrent requests, waiting for them all to complete.
73
78
  def execute(&block)
74
79
  Sync do
75
80
  @barrier = Async::Barrier.new
@@ -87,6 +92,7 @@ module Async
87
92
  class Adapter < ::Faraday::Adapter
88
93
  self.supports_parallel = true
89
94
 
95
+ # Create a new parallel manager, which is used to handle multiple concurrent requests.
90
96
  def self.setup_parallel_manager(**options)
91
97
  ParallelManager.new(options)
92
98
  end
@@ -137,7 +143,7 @@ module Async
137
143
  super
138
144
 
139
145
  # For compatibility with the default adapter:
140
- env.url.path = '/' if env.url.path.empty?
146
+ env.url.path = "/" if env.url.path.empty?
141
147
 
142
148
  if parallel_manager = env.parallel_manager
143
149
  parallel_manager.async do
@@ -180,19 +186,19 @@ module Async
180
186
  response = env.stream_response do |&on_data|
181
187
  response = client.call(request)
182
188
 
189
+ save_response(env, response.status, nil, response.headers, finished: false)
190
+
183
191
  response.each do |chunk|
184
192
  on_data.call(chunk)
185
193
  end
186
194
 
187
195
  response
188
196
  end
189
-
190
- save_response(env, response.status, nil, response.headers)
191
197
  else
192
198
  response = client.call(request)
193
-
194
- save_response(env, response.status, encoded_body(response), response.headers)
195
199
  end
200
+
201
+ save_response(env, response.status, encoded_body(response), response.headers)
196
202
  end
197
203
  end
198
204
 
@@ -235,11 +241,11 @@ module Async
235
241
 
236
242
  def encoded_body(response)
237
243
  body = response.read
238
- return body if body.nil?
239
- content_type = response.headers['content-type']
244
+ return +"" if body.nil?
245
+ content_type = response.headers["content-type"]
240
246
  return body unless content_type
241
247
  params = extract_type_parameters(content_type)
242
- if charset = params['charset']
248
+ if charset = params["charset"]
243
249
  body = body.dup if body.frozen?
244
250
  body.force_encoding(charset)
245
251
  end
@@ -250,10 +256,10 @@ module Async
250
256
 
251
257
  def extract_type_parameters(content_type)
252
258
  result = {}
253
- list = content_type.split(';')
259
+ list = content_type.split(";")
254
260
  list.shift
255
261
  list.each do |param|
256
- key, value = *param.split('=', 2)
262
+ key, value = *param.split("=", 2)
257
263
  result[key.strip] = value.strip
258
264
  end
259
265
  result
@@ -3,12 +3,12 @@
3
3
  # Released under the MIT License.
4
4
  # Copyright, 2024, by Samuel Williams.
5
5
 
6
- require 'faraday'
7
- require 'faraday/adapter'
8
- require 'kernel/sync'
6
+ require "faraday"
7
+ require "faraday/adapter"
8
+ require "kernel/sync"
9
9
 
10
- require 'async/http/client'
11
- require 'async/http/proxy'
10
+ require "async/http/client"
11
+ require "async/http/proxy"
12
12
 
13
13
  module Async
14
14
  module HTTP
@@ -3,7 +3,7 @@
3
3
  # Released under the MIT License.
4
4
  # Copyright, 2020-2024, by Samuel Williams.
5
5
 
6
- require_relative 'adapter'
6
+ require_relative "adapter"
7
7
 
8
8
  # Set the default adapter to use Async::HTTP.
9
9
  ::Faraday.default_adapter = :async_http
@@ -6,7 +6,7 @@
6
6
  module Async
7
7
  module HTTP
8
8
  module Faraday
9
- VERSION = "0.19.0"
9
+ VERSION = "0.20.0"
10
10
  end
11
11
  end
12
12
  end
data/license.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # MIT License
2
2
 
3
- Copyright, 2018-2024, by Samuel Williams.
3
+ Copyright, 2018-2025, by Samuel Williams.
4
4
  Copyright, 2018, by Andreas Garnaes.
5
5
  Copyright, 2019, by Denis Talakevich.
6
6
  Copyright, 2019-2020, by Igor Sidorov.
@@ -9,7 +9,7 @@ Copyright, 2020, by Benoit Daloze.
9
9
  Copyright, 2023, by Genki Takiuchi.
10
10
  Copyright, 2023, by Flavio Fernandes.
11
11
  Copyright, 2024, by Jacob Frautschi.
12
- Copyright, 2024, by Korbin Hoffman.
12
+ Copyright, 2025, by Nikolaos Anastopoulos.
13
13
 
14
14
  Permission is hereby granted, free of charge, to any person obtaining a copy
15
15
  of this software and associated documentation files (the "Software"), to deal
data/readme.md CHANGED
@@ -15,15 +15,24 @@ Please see the [project documentation](https://socketry.github.io/async-http-far
15
15
 
16
16
  ## Releases
17
17
 
18
- Please see the [project changes](https://socketry.github.io/async-http-faraday//changes/index) for all releases.
18
+ Please see the [project releases](https://socketry.github.io/async-http-faraday/releases/index) for all releases.
19
+
20
+ ### v0.20.0
21
+
22
+ - Implement the new response streaming interface, which provides the initial response status code and headers before streaming the response body.
23
+ - An empty response now sets the response body to an empty string rather than `nil` as required by the Faraday specification.
24
+
25
+ ### v0.19.0
26
+
27
+ - [Support `in_parallel`](https://socketry.github.io/async-http-faraday/releases/index#support-in_parallel)
19
28
 
20
29
  ### v0.18.0
21
30
 
22
- - [Config Block](https://socketry.github.io/async-http-faraday/changes/index#config-block)
31
+ - [Config Block](https://socketry.github.io/async-http-faraday/releases/index#config-block)
23
32
 
24
33
  ### v0.17.0
25
34
 
26
- - [Per-thread Client Cache](https://socketry.github.io/async-http-faraday/changes/index#per-thread-client-cache)
35
+ - [Per-thread Client Cache](https://socketry.github.io/async-http-faraday/releases/index#per-thread-client-cache)
27
36
 
28
37
  ## Contributing
29
38
 
data/releases.md ADDED
@@ -0,0 +1,83 @@
1
+ # Releases
2
+
3
+ ## v0.20.0
4
+
5
+ - Implement the new response streaming interface, which provides the initial response status code and headers before streaming the response body.
6
+ - An empty response now sets the response body to an empty string rather than `nil` as required by the Faraday specification.
7
+
8
+ ## v0.19.0
9
+
10
+ ### Support `in_parallel`
11
+
12
+ The adapter now supports the `in_parallel` method, which allows multiple requests to be made concurrently.
13
+
14
+ ``` ruby
15
+ adapter = Faraday.new(bound_url) do |builder|
16
+ builder.adapter :async_http
17
+ end
18
+
19
+ response1 = response2 = response3 = nil
20
+
21
+ adapter.in_parallel do
22
+ response1 = adapter.get("/index")
23
+ response2 = adapter.get("/index")
24
+ response3 = adapter.get("/index")
25
+ end
26
+
27
+ puts response1.body # => "Hello World"
28
+ puts response2.body # => "Hello World"
29
+ puts response3.body # => "Hello World"
30
+ ```
31
+
32
+ This is primarily for compatibility with existing code. If you are designing a new library, you should just use `Async` directly:
33
+
34
+ ``` ruby
35
+ Async do
36
+ response1 = Async{adapter.get("/index")}
37
+ response2 = Async{adapter.get("/index")}
38
+ response3 = Async{adapter.get("/index")}
39
+
40
+ puts response1.wait.body # => "Hello World"
41
+ puts response2.wait.body # => "Hello World"
42
+ puts response3.wait.body # => "Hello World"
43
+ end
44
+ ```
45
+
46
+ ## v0.18.0
47
+
48
+ ### Config Block
49
+
50
+ The `config_block` provided to the adapter must now return `nil`, `client` or a middleware wrapper around `client`.
51
+
52
+ ``` ruby
53
+ Faraday.new do |builder|
54
+ builder.adapter :async_http do |client|
55
+ # Option 1 (same as returning `nil`), use client as is:
56
+ client # Use `client` as is.
57
+
58
+ # Option 2, wrap client in a middleware:
59
+ Async::HTTP::Middleware::LocationRedirector.new(client)
60
+ end
61
+ end
62
+ ```
63
+
64
+ ## v0.17.0
65
+
66
+ ### Per-thread Client Cache
67
+
68
+ The default adapter now uses a per-thread client cache internally, to improve compatibility with existing code that shares a single `Faraday::Connection` instance across multiple threads.
69
+
70
+ ``` ruby
71
+ adapter = Faraday.new do |builder|
72
+ builder.adapter :async_http
73
+ end
74
+
75
+ 3.times do
76
+ Thread.new do
77
+ Async do
78
+ # Each thread has it's own client cache.
79
+ adapter.get('http://example.com')
80
+ end
81
+ end
82
+ end
83
+ ```
data.tar.gz.sig CHANGED
Binary file
metadata CHANGED
@@ -1,20 +1,19 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: async-http-faraday
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.19.0
4
+ version: 0.20.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Samuel Williams
8
8
  - Igor Sidorov
9
9
  - Andreas Garnaes
10
10
  - Genki Takiuchi
11
+ - Nikolaos Anastopoulos
11
12
  - Olle Jonsson
12
13
  - Benoit Daloze
13
14
  - Denis Talakevich
14
15
  - Flavio Fernandes
15
16
  - Jacob Frautschi
16
- - Korbin Hoffman
17
- autorequire:
18
17
  bindir: bin
19
18
  cert_chain:
20
19
  - |
@@ -46,7 +45,7 @@ cert_chain:
46
45
  Q2K9NVun/S785AP05vKkXZEFYxqG6EW012U4oLcFl5MySFajYXRYbuUpH6AY+HP8
47
46
  voD0MPg1DssDLKwXyt1eKD/+Fq0bFWhwVM/1XiAXL7lyYUyOq24KHgQ2Csg=
48
47
  -----END CERTIFICATE-----
49
- date: 2024-08-22 00:00:00.000000000 Z
48
+ date: 2025-01-23 00:00:00.000000000 Z
50
49
  dependencies:
51
50
  - !ruby/object:Gem::Dependency
52
51
  name: async-http
@@ -76,13 +75,10 @@ dependencies:
76
75
  - - ">="
77
76
  - !ruby/object:Gem::Version
78
77
  version: '0'
79
- description:
80
- email:
81
78
  executables: []
82
79
  extensions: []
83
80
  extra_rdoc_files: []
84
81
  files:
85
- - changes.md
86
82
  - examples/topics.rb
87
83
  - lib/async/http/faraday.rb
88
84
  - lib/async/http/faraday/adapter.rb
@@ -91,6 +87,7 @@ files:
91
87
  - lib/async/http/faraday/version.rb
92
88
  - license.md
93
89
  - readme.md
90
+ - releases.md
94
91
  homepage: https://github.com/socketry/async-http-faraday
95
92
  licenses:
96
93
  - MIT
@@ -98,7 +95,6 @@ metadata:
98
95
  documentation_uri: https://socketry.github.io/async-http-faraday/
99
96
  funding_uri: https://github.com/sponsors/ioquatix
100
97
  source_code_uri: https://github.com/socketry/async-http.git
101
- post_install_message:
102
98
  rdoc_options: []
103
99
  require_paths:
104
100
  - lib
@@ -113,8 +109,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
113
109
  - !ruby/object:Gem::Version
114
110
  version: '0'
115
111
  requirements: []
116
- rubygems_version: 3.5.11
117
- signing_key:
112
+ rubygems_version: 3.6.2
118
113
  specification_version: 4
119
114
  summary: Provides an adaptor between async-http and faraday.
120
115
  test_files: []
metadata.gz.sig CHANGED
Binary file
data/changes.md DELETED
@@ -1,38 +0,0 @@
1
- # v0.18.0
2
-
3
- ## Config Block
4
-
5
- The `config_block` provided to the adapter must now return `nil`, `client` or a middleware wrapper around `client`.
6
-
7
- ```ruby
8
- Faraday.new do |builder|
9
- builder.adapter :async_http do |client|
10
- # Option 1 (same as returning `nil`), use client as is:
11
- client # Use `client` as is.
12
-
13
- # Option 2, wrap client in a middleware:
14
- Async::HTTP::Middleware::LocationRedirector.new(client)
15
- end
16
- end
17
- ```
18
-
19
- # v0.17.0
20
-
21
- ## Per-thread Client Cache
22
-
23
- The default adapter now uses a per-thread client cache internally, to improve compatibility with existing code that shares a single `Faraday::Connection` instance across multiple threads.
24
-
25
- ```ruby
26
- adapter = Faraday.new do |builder|
27
- builder.adapter :async_http
28
- end
29
-
30
- 3.times do
31
- Thread.new do
32
- Async do
33
- # Each thread has it's own client cache.
34
- adapter.get('http://example.com')
35
- end
36
- end
37
- end
38
- ```