twingly-http 0.6.0 → 0.7.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 +4 -4
- data/lib/faraday/response_body_size_limit/middleware.rb +38 -0
- data/lib/faraday/response_body_size_limit.rb +8 -0
- data/lib/twingly/http.rb +20 -11
- data/lib/twingly/version.rb +1 -1
- metadata +5 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 62b69e5cac842eeefbaad91288707eb474458da8df5074521652fccd486edc89
|
4
|
+
data.tar.gz: 33c81395fbfd3f1588452fb93b66a067c40521654042f0eb6f04acd8a362b0c9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3a95ad89c7bf1af645cb000bb739e8100048a268185e88d75ac307581f0832e85586f34fa1a4bc9f1f7291ca2147a2b9f61d032d562662a3f5a84aaca8750f3e
|
7
|
+
data.tar.gz: 4b79a8ea8a109fe5cbf0e57c0591e4a5382b10ba5bb5a05ada0ca96ed0197488fcf1e9bce47d0e1f61eb8d1ec016d5f1afec1338131a3b7b84388e85f35d2bf7
|
@@ -0,0 +1,38 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Faraday
|
4
|
+
module ResponseBodySizeLimit
|
5
|
+
class LimitExceededError < StandardError; end
|
6
|
+
|
7
|
+
class Middleware < Faraday::Middleware
|
8
|
+
def initialize(app, max_size_bytes:)
|
9
|
+
super(app)
|
10
|
+
|
11
|
+
@max_size_bytes = max_size_bytes
|
12
|
+
end
|
13
|
+
|
14
|
+
def call(env) # rubocop:disable Metrics/MethodLength
|
15
|
+
response_body_size = 0
|
16
|
+
accumulated_body = + ""
|
17
|
+
|
18
|
+
env.request.on_data = proc do |chunk, _|
|
19
|
+
response_body_size += chunk.bytesize
|
20
|
+
accumulated_body << chunk
|
21
|
+
|
22
|
+
if response_body_size > @max_size_bytes
|
23
|
+
raise LimitExceededError,
|
24
|
+
"Response body too large, exceeced the configured max size of #{@max_size_bytes} bytes."
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
@app.call(env).on_complete do |response_env|
|
29
|
+
response_env.body = accumulated_body
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
Faraday::Request.register_middleware(
|
37
|
+
response_body_size_limit: Faraday::ResponseBodySizeLimit::Middleware
|
38
|
+
)
|
data/lib/twingly/http.rb
CHANGED
@@ -7,6 +7,7 @@ require "faraday_middleware"
|
|
7
7
|
|
8
8
|
require_relative "../faraday/logfmt_logger"
|
9
9
|
require_relative "../faraday/url_size_limit"
|
10
|
+
require_relative "../faraday/response_body_size_limit"
|
10
11
|
require_relative "heroku"
|
11
12
|
require_relative "string_utilities"
|
12
13
|
|
@@ -15,6 +16,7 @@ module Twingly
|
|
15
16
|
class ConnectionError < StandardError; end
|
16
17
|
class UrlSizeLimitExceededError < StandardError; end
|
17
18
|
class RedirectLimitReachedError < StandardError; end
|
19
|
+
class ResponseBodySizeLimitExceededError < StandardError; end
|
18
20
|
class Client # rubocop:disable Metrics/ClassLength
|
19
21
|
DEFAULT_RETRYABLE_EXCEPTIONS = [
|
20
22
|
Faraday::ConnectionFailed,
|
@@ -31,6 +33,7 @@ module Twingly
|
|
31
33
|
DEFAULT_NUMBER_OF_RETRIES = 0
|
32
34
|
DEFAULT_RETRY_INTERVAL = 1
|
33
35
|
DEFAULT_MAX_URL_SIZE_BYTES = Float::INFINITY
|
36
|
+
DEFAULT_MAX_RESPONSE_BODY_SIZE_BYTES = Float::INFINITY
|
34
37
|
DEFAULT_FOLLOW_REDIRECTS_LIMIT = 3
|
35
38
|
|
36
39
|
attr_writer :http_timeout
|
@@ -39,6 +42,7 @@ module Twingly
|
|
39
42
|
attr_writer :retry_interval
|
40
43
|
attr_writer :on_retry_callback
|
41
44
|
attr_writer :max_url_size_bytes
|
45
|
+
attr_writer :max_response_body_size_bytes
|
42
46
|
attr_writer :request_id
|
43
47
|
attr_writer :follow_redirects
|
44
48
|
|
@@ -81,19 +85,20 @@ module Twingly
|
|
81
85
|
end
|
82
86
|
|
83
87
|
def initialize_defaults
|
84
|
-
@request_id
|
85
|
-
@http_timeout
|
86
|
-
@http_open_timeout
|
87
|
-
@retryable_exceptions
|
88
|
-
@number_of_retries
|
89
|
-
@retry_interval
|
90
|
-
@on_retry_callback
|
91
|
-
@follow_redirects
|
92
|
-
@follow_redirects_limit
|
93
|
-
@max_url_size_bytes
|
88
|
+
@request_id = nil
|
89
|
+
@http_timeout = DEFAULT_HTTP_TIMEOUT
|
90
|
+
@http_open_timeout = DEFAULT_HTTP_OPEN_TIMEOUT
|
91
|
+
@retryable_exceptions = DEFAULT_RETRYABLE_EXCEPTIONS
|
92
|
+
@number_of_retries = DEFAULT_NUMBER_OF_RETRIES
|
93
|
+
@retry_interval = DEFAULT_RETRY_INTERVAL
|
94
|
+
@on_retry_callback = nil
|
95
|
+
@follow_redirects = false
|
96
|
+
@follow_redirects_limit = DEFAULT_FOLLOW_REDIRECTS_LIMIT
|
97
|
+
@max_url_size_bytes = DEFAULT_MAX_URL_SIZE_BYTES
|
98
|
+
@max_response_body_size_bytes = DEFAULT_MAX_RESPONSE_BODY_SIZE_BYTES
|
94
99
|
end
|
95
100
|
|
96
|
-
def http_response_for(method, **args)
|
101
|
+
def http_response_for(method, **args) # rubocop:disable Metrics/MethodLength, Metrics/AbcSize
|
97
102
|
response = send("http_#{method}_response", **args)
|
98
103
|
|
99
104
|
Response.new(headers: response.headers.to_h,
|
@@ -106,6 +111,8 @@ module Twingly
|
|
106
111
|
raise UrlSizeLimitExceededError, error.message
|
107
112
|
rescue FaradayMiddleware::RedirectLimitReached => error
|
108
113
|
raise RedirectLimitReachedError, error.message
|
114
|
+
rescue Faraday::ResponseBodySizeLimit::LimitExceededError => error
|
115
|
+
raise ResponseBodySizeLimitExceededError, error.message
|
109
116
|
end
|
110
117
|
|
111
118
|
def http_get_response(url:, params:, headers:)
|
@@ -193,6 +200,8 @@ module Twingly
|
|
193
200
|
exceptions: @retryable_exceptions,
|
194
201
|
methods: [], # empty [] forces Faraday to run retry_if
|
195
202
|
retry_if: retry_if
|
203
|
+
faraday.request :response_body_size_limit,
|
204
|
+
max_size_bytes: @max_response_body_size_bytes
|
196
205
|
faraday.response :logfmt_logger, @logger.dup,
|
197
206
|
headers: true,
|
198
207
|
bodies: true,
|
data/lib/twingly/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: twingly-http
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.7.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Twingly AB
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-11-
|
11
|
+
date: 2024-11-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: faraday
|
@@ -56,6 +56,8 @@ files:
|
|
56
56
|
- lib/faraday/logfmt_logger.rb
|
57
57
|
- lib/faraday/logfmt_logger/LICENSE.md
|
58
58
|
- lib/faraday/logfmt_logger/middleware.rb
|
59
|
+
- lib/faraday/response_body_size_limit.rb
|
60
|
+
- lib/faraday/response_body_size_limit/middleware.rb
|
59
61
|
- lib/faraday/url_size_limit.rb
|
60
62
|
- lib/faraday/url_size_limit/middleware.rb
|
61
63
|
- lib/twingly/heroku.rb
|
@@ -82,7 +84,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
82
84
|
- !ruby/object:Gem::Version
|
83
85
|
version: '0'
|
84
86
|
requirements: []
|
85
|
-
rubygems_version: 3.4
|
87
|
+
rubygems_version: 3.5.4
|
86
88
|
signing_key:
|
87
89
|
specification_version: 4
|
88
90
|
summary: Robust HTTP client
|