twingly-http 0.3.2 → 0.5.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|