twingly-http 0.3.2 → 0.5.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/README.md +2 -2
- data/lib/faraday/logfmt_logger/middleware.rb +9 -9
- data/lib/twingly/heroku.rb +1 -1
- data/lib/twingly/http.rb +67 -13
- data/lib/twingly/string_utilities.rb +1 -1
- data/lib/twingly/version.rb +1 -1
- metadata +7 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 504e1df993b190cf3039e5b45b9586f2babaab2fe5e1a881a10dfc407fd21663
|
4
|
+
data.tar.gz: 6081a1578382fa683f5ae71f52749988b52346dfef87cbcc9295d3ac33453bb8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 493b7190c970e227735c7ffa8e7377f243cec8c8e24778662b3f9e9f187f713e16f68404c0c9c6322ad002fd05f75e2088027471747b2d022fb204e5ca719729
|
7
|
+
data.tar.gz: 68baaace97462c88bbbd84a082848264ee5515fde8505cf3e0e3524912d0b4f3387aa9c3057b577a683dbcd6f39ffec9dbaeae65c2b4bd3a35c8e5892f2684b0
|
data/README.md
CHANGED
@@ -14,7 +14,7 @@ Example "one-liner" usage:
|
|
14
14
|
|
15
15
|
```
|
16
16
|
ruby -rlogger -rtwingly/http -e '\
|
17
|
-
logger = Logger.new(
|
17
|
+
logger = Logger.new($stdout); logger.level = :INFO; \
|
18
18
|
puts Twingly::HTTP::Client.new(logger: logger, \
|
19
19
|
base_user_agent: "").get("http://example.org").status'
|
20
20
|
```
|
@@ -25,7 +25,7 @@ Example `irb` usage:
|
|
25
25
|
irb -rlogger -rtwingly/http
|
26
26
|
```
|
27
27
|
```ruby
|
28
|
-
logger = Logger.new(
|
28
|
+
logger = Logger.new($stdout); logger.level = :INFO
|
29
29
|
client = Twingly::HTTP::Client.new(logger: logger, base_user_agent: "")
|
30
30
|
client.get("http://example.org").status
|
31
31
|
```
|
@@ -13,7 +13,7 @@ module Faraday
|
|
13
13
|
super(app)
|
14
14
|
@logger = logger || begin
|
15
15
|
require "logger"
|
16
|
-
::Logger.new(
|
16
|
+
::Logger.new($stdout)
|
17
17
|
end
|
18
18
|
|
19
19
|
@filter = []
|
@@ -26,10 +26,10 @@ module Faraday
|
|
26
26
|
def call(env)
|
27
27
|
info("request") do
|
28
28
|
log_entry = {
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
29
|
+
source: "upstream-request",
|
30
|
+
method: env.method.upcase,
|
31
|
+
url: apply_filters(env.url.to_s),
|
32
|
+
request_id: request_id,
|
33
33
|
}.merge(app_metadata)
|
34
34
|
|
35
35
|
Twingly::StringUtilities.logfmt(log_entry)
|
@@ -41,9 +41,9 @@ module Faraday
|
|
41
41
|
def on_complete(env)
|
42
42
|
info("response") do
|
43
43
|
log_entry = {
|
44
|
-
|
45
|
-
|
46
|
-
|
44
|
+
source: "upstream-response",
|
45
|
+
status: env.status,
|
46
|
+
request_id: request_id,
|
47
47
|
}.merge(app_metadata)
|
48
48
|
|
49
49
|
Twingly::StringUtilities.logfmt(log_entry)
|
@@ -68,7 +68,7 @@ module Faraday
|
|
68
68
|
|
69
69
|
def app_metadata
|
70
70
|
{
|
71
|
-
|
71
|
+
release: Twingly::HTTP::Heroku.release_version,
|
72
72
|
}
|
73
73
|
end
|
74
74
|
|
data/lib/twingly/heroku.rb
CHANGED
data/lib/twingly/http.rb
CHANGED
@@ -61,6 +61,18 @@ module Twingly
|
|
61
61
|
http_response_for(:post, url: url, body: body, headers: headers)
|
62
62
|
end
|
63
63
|
|
64
|
+
def put(url, body:, headers: {})
|
65
|
+
http_response_for(:put, url: url, body: body, headers: headers)
|
66
|
+
end
|
67
|
+
|
68
|
+
def patch(url, body:, headers: {})
|
69
|
+
http_response_for(:patch, url: url, body: body, headers: headers)
|
70
|
+
end
|
71
|
+
|
72
|
+
def delete(url, params: {}, headers: {})
|
73
|
+
http_response_for(:delete, url: url, params: params, headers: headers)
|
74
|
+
end
|
75
|
+
|
64
76
|
private
|
65
77
|
|
66
78
|
def default_logger
|
@@ -80,18 +92,13 @@ module Twingly
|
|
80
92
|
@max_url_size_bytes = DEFAULT_MAX_URL_SIZE_BYTES
|
81
93
|
end
|
82
94
|
|
83
|
-
# rubocop:disable Metrics/MethodLength
|
84
95
|
def http_response_for(method, **args)
|
85
|
-
response =
|
86
|
-
when :get
|
87
|
-
http_get_response(**args)
|
88
|
-
when :post
|
89
|
-
http_post_response(**args)
|
90
|
-
end
|
96
|
+
response = send("http_#{method}_response", **args)
|
91
97
|
|
92
98
|
Response.new(headers: response.headers.to_h,
|
93
99
|
status: response.status,
|
94
|
-
body: response.body
|
100
|
+
body: response.body,
|
101
|
+
final_url: response.env.url.to_s)
|
95
102
|
rescue *(@retryable_exceptions + TIMEOUT_EXCEPTIONS)
|
96
103
|
raise ConnectionError
|
97
104
|
rescue Faraday::UrlSizeLimit::LimitExceededError => error
|
@@ -99,7 +106,6 @@ module Twingly
|
|
99
106
|
rescue FaradayMiddleware::RedirectLimitReached => error
|
100
107
|
raise RedirectLimitReachedError, error.message
|
101
108
|
end
|
102
|
-
# rubocop:enable all
|
103
109
|
|
104
110
|
def http_get_response(url:, params:, headers:)
|
105
111
|
binary_url = url.dup.force_encoding(Encoding::BINARY)
|
@@ -131,6 +137,51 @@ module Twingly
|
|
131
137
|
end
|
132
138
|
end
|
133
139
|
|
140
|
+
def http_put_response(url:, body:, headers:)
|
141
|
+
binary_url = url.dup.force_encoding(Encoding::BINARY)
|
142
|
+
http_client = create_http_client
|
143
|
+
|
144
|
+
headers = default_headers.merge(headers)
|
145
|
+
|
146
|
+
http_client.put do |request|
|
147
|
+
request.url(binary_url)
|
148
|
+
request.headers.merge!(headers)
|
149
|
+
request.body = body
|
150
|
+
request.options.timeout = @http_timeout
|
151
|
+
request.options.open_timeout = @http_open_timeout
|
152
|
+
end
|
153
|
+
end
|
154
|
+
|
155
|
+
def http_patch_response(url:, body:, headers:)
|
156
|
+
binary_url = url.dup.force_encoding(Encoding::BINARY)
|
157
|
+
http_client = create_http_client
|
158
|
+
|
159
|
+
headers = default_headers.merge(headers)
|
160
|
+
|
161
|
+
http_client.patch do |request|
|
162
|
+
request.url(binary_url)
|
163
|
+
request.headers.merge!(headers)
|
164
|
+
request.body = body
|
165
|
+
request.options.timeout = @http_timeout
|
166
|
+
request.options.open_timeout = @http_open_timeout
|
167
|
+
end
|
168
|
+
end
|
169
|
+
|
170
|
+
def http_delete_response(url:, params:, headers:)
|
171
|
+
binary_url = url.dup.force_encoding(Encoding::BINARY)
|
172
|
+
http_client = create_http_client
|
173
|
+
|
174
|
+
headers = default_headers.merge(headers)
|
175
|
+
|
176
|
+
http_client.delete do |request|
|
177
|
+
request.url(binary_url)
|
178
|
+
request.params.merge!(params)
|
179
|
+
request.headers.merge!(headers)
|
180
|
+
request.options.timeout = @http_timeout
|
181
|
+
request.options.open_timeout = @http_open_timeout
|
182
|
+
end
|
183
|
+
end
|
184
|
+
|
134
185
|
def create_http_client # rubocop:disable Metrics/MethodLength
|
135
186
|
Faraday.new do |faraday|
|
136
187
|
faraday.request :url_size_limit,
|
@@ -191,9 +242,9 @@ module Twingly
|
|
191
242
|
|
192
243
|
def app_metadata
|
193
244
|
{
|
194
|
-
|
195
|
-
|
196
|
-
|
245
|
+
dyno_id: Heroku.dyno_id,
|
246
|
+
release: Heroku.release_version,
|
247
|
+
git_head: Heroku.slug_commit,
|
197
248
|
}
|
198
249
|
end
|
199
250
|
|
@@ -208,13 +259,16 @@ module Twingly
|
|
208
259
|
attr_reader :headers
|
209
260
|
attr_reader :status
|
210
261
|
attr_reader :body
|
262
|
+
attr_reader :final_url
|
211
263
|
|
212
264
|
def initialize(headers: nil,
|
213
265
|
status: nil,
|
214
|
-
body: nil
|
266
|
+
body: nil,
|
267
|
+
final_url: nil)
|
215
268
|
@headers = headers
|
216
269
|
@status = status
|
217
270
|
@body = body
|
271
|
+
@final_url = final_url
|
218
272
|
end
|
219
273
|
end
|
220
274
|
end
|
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.5.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:
|
11
|
+
date: 2023-11-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: faraday
|
@@ -92,28 +92,28 @@ dependencies:
|
|
92
92
|
requirements:
|
93
93
|
- - "~>"
|
94
94
|
- !ruby/object:Gem::Version
|
95
|
-
version:
|
95
|
+
version: 1.14.0
|
96
96
|
type: :development
|
97
97
|
prerelease: false
|
98
98
|
version_requirements: !ruby/object:Gem::Requirement
|
99
99
|
requirements:
|
100
100
|
- - "~>"
|
101
101
|
- !ruby/object:Gem::Version
|
102
|
-
version:
|
102
|
+
version: 1.14.0
|
103
103
|
- !ruby/object:Gem::Dependency
|
104
104
|
name: rubocop-rspec
|
105
105
|
requirement: !ruby/object:Gem::Requirement
|
106
106
|
requirements:
|
107
107
|
- - "~>"
|
108
108
|
- !ruby/object:Gem::Version
|
109
|
-
version:
|
109
|
+
version: 2.4.0
|
110
110
|
type: :development
|
111
111
|
prerelease: false
|
112
112
|
version_requirements: !ruby/object:Gem::Requirement
|
113
113
|
requirements:
|
114
114
|
- - "~>"
|
115
115
|
- !ruby/object:Gem::Version
|
116
|
-
version:
|
116
|
+
version: 2.4.0
|
117
117
|
- !ruby/object:Gem::Dependency
|
118
118
|
name: toxiproxy
|
119
119
|
requirement: !ruby/object:Gem::Requirement
|
@@ -193,7 +193,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
193
193
|
- !ruby/object:Gem::Version
|
194
194
|
version: '0'
|
195
195
|
requirements: []
|
196
|
-
rubygems_version: 3.
|
196
|
+
rubygems_version: 3.3.7
|
197
197
|
signing_key:
|
198
198
|
specification_version: 4
|
199
199
|
summary: Robust HTTP client
|