async-rest 0.18.0 → 0.19.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: 2b382d2957eae86372238557c07d854d654e3ed63b0e49ffa95250f6cc81b1a6
4
- data.tar.gz: 6f01d8c70c1f66a1909892340856893fb1f17a815e2019ecc08a40e0308d5311
3
+ metadata.gz: 9feb22e0660bd79fdf80e6fc2146afa4b6c51f6ef9a08e912415c59d99677232
4
+ data.tar.gz: 4ed1027a6ff4cd8af484bbe7a237f3aef1933ef7e965551e0289ab672c8429e2
5
5
  SHA512:
6
- metadata.gz: 836f2fea74f220a114ffd6557ad04e46e2ae28b417533e7974ce0fbf45e590367cad640c7c35a292e85f6186257ef74ac4019115198733bfaafce5a7a1de2f1e
7
- data.tar.gz: 3391c4a281443add49271025386414b4b5454890b0a069ed2730ec774696b06a9b8a4af402cdbd5576989876b1840144b10af71571c7b2e4337244bf932fe691
6
+ metadata.gz: c79a403bc85492375ec4cc0f3a396a3beb834f1cd6813a631b0e6eeca99a65e4d7aae2c575892513ac93d4d885dce621e35cf8590fdcb0788254a031fc59b6bb
7
+ data.tar.gz: 0c99e3832e8faf24bfec7778cc13879aa9f59b90f0fb9662ff585cdfa34d1227301baf44bc5f49be27c77064933abe6c1b5929b52eda78f06a3fee88b2378140
checksums.yaml.gz.sig CHANGED
Binary file
@@ -5,6 +5,6 @@
5
5
 
6
6
  module Async
7
7
  module REST
8
- VERSION = "0.18.0"
8
+ VERSION = "0.19.0"
9
9
  end
10
10
  end
@@ -7,12 +7,29 @@ module Async
7
7
  module REST
8
8
  module Wrapper
9
9
  class Generic
10
+ protected def response_for(resource, request)
11
+ while true
12
+ response = resource.call(request)
13
+
14
+ if response.status == 429
15
+ if retry_after = response.headers["retry-after"]
16
+ sleep(retry_after.to_f)
17
+ else
18
+ # Without the `retry-after` header, we can't determine how long to wait, so we just return the response.
19
+ return response
20
+ end
21
+ else
22
+ return response
23
+ end
24
+ end
25
+ end
26
+
10
27
  def call(resource, method = "GET", payload = nil, &block)
11
28
  request = ::Protocol::HTTP::Request[method, nil]
12
29
 
13
30
  self.prepare_request(request, payload)
14
31
 
15
- response = resource.call(request)
32
+ response = self.response_for(resource, request)
16
33
 
17
34
  # If we exit this block because of an exception, we close the response. This ensures we don't have any dangling connections.
18
35
  begin
@@ -48,7 +65,9 @@ module Async
48
65
  # Wrap the response body in the given klass.
49
66
  def wrap_response(response)
50
67
  if body = response.body
51
- response.body = parser_for(response).new(body)
68
+ if parser = parser_for(response)
69
+ response.body = parser.new(body)
70
+ end
52
71
  end
53
72
 
54
73
  return response
data/readme.md CHANGED
@@ -15,6 +15,13 @@ Please see the [project documentation](https://socketry.github.io/async-rest/) f
15
15
 
16
16
  - [Getting Started](https://socketry.github.io/async-rest/guides/getting-started/index) - This guide explains the design of the `async-rest` gem and how to use it to access RESTful APIs.
17
17
 
18
+ ## See Also
19
+
20
+ - [async-ollama](https://github.com/socketry/async-ollama) - A client for Ollama, a local large language model server.
21
+ - [async-discord](https://github.com/socketry/async-discord) - A client for Discord, a popular chat platform.
22
+ - [cloudflare](https://github.com/socketry/cloudflare) - A client for Cloudflare, a popular CDN and DDoS protection service.
23
+ - [async-slack](https://github.com/socketry/async-slack) - A client for Slack, a popular chat platform.
24
+
18
25
  ## Contributing
19
26
 
20
27
  We welcome contributions to this project.
data.tar.gz.sig CHANGED
Binary file
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: async-rest
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.18.0
4
+ version: 0.19.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Samuel Williams
@@ -40,7 +40,7 @@ cert_chain:
40
40
  Q2K9NVun/S785AP05vKkXZEFYxqG6EW012U4oLcFl5MySFajYXRYbuUpH6AY+HP8
41
41
  voD0MPg1DssDLKwXyt1eKD/+Fq0bFWhwVM/1XiAXL7lyYUyOq24KHgQ2Csg=
42
42
  -----END CERTIFICATE-----
43
- date: 2024-09-13 00:00:00.000000000 Z
43
+ date: 2024-11-26 00:00:00.000000000 Z
44
44
  dependencies:
45
45
  - !ruby/object:Gem::Dependency
46
46
  name: async-http
@@ -108,7 +108,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
108
108
  - !ruby/object:Gem::Version
109
109
  version: '0'
110
110
  requirements: []
111
- rubygems_version: 3.5.11
111
+ rubygems_version: 3.5.22
112
112
  signing_key:
113
113
  specification_version: 4
114
114
  summary: A library for RESTful clients (and hopefully servers).
metadata.gz.sig CHANGED
Binary file