nxt_http_client 1.0.3 → 1.1.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/CHANGELOG.md +6 -0
- data/Gemfile.lock +23 -21
- data/lib/nxt_http_client/batch_execution.rb +26 -0
- data/lib/nxt_http_client/client/batch_patch.rb +55 -0
- data/lib/nxt_http_client/fire_callbacks.rb +9 -0
- data/lib/nxt_http_client/version.rb +1 -1
- data/lib/nxt_http_client.rb +2 -0
- metadata +7 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6cccf6ffc8c507e36f58161ef7bd6b6412312015f5cf53d26f9ac2ea52244b8c
|
4
|
+
data.tar.gz: bc67df2f1885c7a49dabbdf4b49f823ec2f6bd1acba006295b847a1d181ed4aa
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9ed4b1e266af12b23d2d7e4cbfd448a0ae5e9e9cf9fd48358f06b2d515e1d58e8db68fe29742f28908b30f9e93f51e9de9d181c30302c2b098647d23f3417631
|
7
|
+
data.tar.gz: f0f391aa5e8ea47fea76d197442b95799a9c6e9d17723dc958612d42dc499c872082b968a906a65f1367f07817ea304bb52d41addc0b1273e2bbb89460c041f4
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,9 @@
|
|
1
|
+
# v1.1.0 2023-04-03
|
2
|
+
- Introduce a Typhoeus::Hydra interface for batch executions
|
3
|
+
|
4
|
+
# v1.0.4 2022-06-08
|
5
|
+
- Fix bug where callbacks were shared between unrelated child client class ([#130](https://github.com/nxt-insurance/nxt_http_client/pull/130))
|
6
|
+
|
1
7
|
# v1.0.3 2022-02-08
|
2
8
|
|
3
9
|
- Relax dependency version constraints, allow activesupport < 8
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
nxt_http_client (1.0
|
4
|
+
nxt_http_client (1.1.0)
|
5
5
|
activesupport (< 8.0)
|
6
6
|
nxt_registry
|
7
7
|
typhoeus
|
@@ -9,7 +9,7 @@ PATH
|
|
9
9
|
GEM
|
10
10
|
remote: https://rubygems.org/
|
11
11
|
specs:
|
12
|
-
activesupport (7.0.
|
12
|
+
activesupport (7.0.4.3)
|
13
13
|
concurrent-ruby (~> 1.0, >= 1.0.2)
|
14
14
|
i18n (>= 1.6, < 2)
|
15
15
|
minitest (>= 5.1)
|
@@ -17,18 +17,18 @@ GEM
|
|
17
17
|
addressable (2.8.0)
|
18
18
|
public_suffix (>= 2.0.2, < 5.0)
|
19
19
|
coderay (1.1.3)
|
20
|
-
concurrent-ruby (1.
|
20
|
+
concurrent-ruby (1.2.2)
|
21
21
|
crack (0.4.5)
|
22
22
|
rexml
|
23
23
|
diff-lcs (1.5.0)
|
24
|
-
ethon (0.
|
24
|
+
ethon (0.16.0)
|
25
25
|
ffi (>= 1.15.0)
|
26
26
|
ffi (1.15.5)
|
27
27
|
hashdiff (1.0.1)
|
28
|
-
i18n (1.
|
28
|
+
i18n (1.12.0)
|
29
29
|
concurrent-ruby (~> 1.0)
|
30
30
|
method_source (1.0.0)
|
31
|
-
minitest (5.
|
31
|
+
minitest (5.18.0)
|
32
32
|
nxt_registry (0.3.10)
|
33
33
|
activesupport
|
34
34
|
nxt_vcr_harness (0.1.4)
|
@@ -37,38 +37,40 @@ GEM
|
|
37
37
|
pry (0.14.1)
|
38
38
|
coderay (~> 1.1)
|
39
39
|
method_source (~> 1.0)
|
40
|
-
public_suffix (4.0.
|
40
|
+
public_suffix (4.0.7)
|
41
41
|
rake (13.0.6)
|
42
42
|
redis (4.6.0)
|
43
43
|
rexml (3.2.5)
|
44
|
-
rspec (3.
|
45
|
-
rspec-core (~> 3.
|
46
|
-
rspec-expectations (~> 3.
|
47
|
-
rspec-mocks (~> 3.
|
48
|
-
rspec-core (3.
|
49
|
-
rspec-support (~> 3.
|
50
|
-
rspec-expectations (3.
|
44
|
+
rspec (3.11.0)
|
45
|
+
rspec-core (~> 3.11.0)
|
46
|
+
rspec-expectations (~> 3.11.0)
|
47
|
+
rspec-mocks (~> 3.11.0)
|
48
|
+
rspec-core (3.11.0)
|
49
|
+
rspec-support (~> 3.11.0)
|
50
|
+
rspec-expectations (3.11.0)
|
51
51
|
diff-lcs (>= 1.2.0, < 2.0)
|
52
|
-
rspec-support (~> 3.
|
53
|
-
rspec-mocks (3.
|
52
|
+
rspec-support (~> 3.11.0)
|
53
|
+
rspec-mocks (3.11.1)
|
54
54
|
diff-lcs (>= 1.2.0, < 2.0)
|
55
|
-
rspec-support (~> 3.
|
56
|
-
rspec-support (3.
|
55
|
+
rspec-support (~> 3.11.0)
|
56
|
+
rspec-support (3.11.0)
|
57
57
|
rspec_junit_formatter (0.5.1)
|
58
58
|
rspec-core (>= 2, < 4, != 2.12.0)
|
59
|
-
timecop (0.9.
|
59
|
+
timecop (0.9.5)
|
60
60
|
typhoeus (1.4.0)
|
61
61
|
ethon (>= 0.9.0)
|
62
|
-
tzinfo (2.0.
|
62
|
+
tzinfo (2.0.6)
|
63
63
|
concurrent-ruby (~> 1.0)
|
64
|
-
vcr (6.
|
64
|
+
vcr (6.1.0)
|
65
65
|
webmock (3.14.0)
|
66
66
|
addressable (>= 2.8.0)
|
67
67
|
crack (>= 0.3.2)
|
68
68
|
hashdiff (>= 0.4.0, < 2.0.0)
|
69
69
|
|
70
70
|
PLATFORMS
|
71
|
+
ruby
|
71
72
|
x86_64-darwin-19
|
73
|
+
x86_64-darwin-20
|
72
74
|
x86_64-linux
|
73
75
|
|
74
76
|
DEPENDENCIES
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module NxtHttpClient
|
2
|
+
def self.execute_in_batch(*client_instances, ignore_around_callbacks: false, raise_errors: true)
|
3
|
+
client_map = Hash.new do |hash, key|
|
4
|
+
hash[key] = { request: nil, error: nil, result: nil }
|
5
|
+
end
|
6
|
+
|
7
|
+
client_instances.each do |client|
|
8
|
+
client.singleton_class.include(NxtHttpClient::Client::BatchPatch)
|
9
|
+
client.assign_batch_data(client_map[client], ignore_around_callbacks)
|
10
|
+
end
|
11
|
+
|
12
|
+
hydra = Typhoeus::Hydra.new
|
13
|
+
|
14
|
+
client_instances.each do |client|
|
15
|
+
client.call.tap do |request|
|
16
|
+
hydra.queue(request)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
hydra.run
|
21
|
+
|
22
|
+
client_map.map do |client, response_data|
|
23
|
+
client.finish(response_data[:request], response_data[:result], response_data[:error], raise_errors: raise_errors)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,55 @@
|
|
1
|
+
module NxtHttpClient
|
2
|
+
class Client
|
3
|
+
module BatchPatch
|
4
|
+
attr_reader :callback_map, :ignore_around_callbacks
|
5
|
+
|
6
|
+
def assign_batch_data(callback_map, ignore_around_callbacks)
|
7
|
+
@callback_map = callback_map
|
8
|
+
@ignore_around_callbacks = ignore_around_callbacks
|
9
|
+
end
|
10
|
+
|
11
|
+
def fire(url = '', **opts, &block)
|
12
|
+
response_handler = build_response_handler(opts[:response_handler], &block)
|
13
|
+
request = build_request(url, **opts.except(:response_handler))
|
14
|
+
callback_map[:request] = request
|
15
|
+
|
16
|
+
setup_on_headers_callback(request, response_handler)
|
17
|
+
setup_on_body_callback(request, response_handler)
|
18
|
+
|
19
|
+
request.on_complete do |response|
|
20
|
+
callback_map[:result] = callback_or_response(response, response_handler)
|
21
|
+
rescue StandardError => e
|
22
|
+
callback_map[:error] = e
|
23
|
+
end
|
24
|
+
|
25
|
+
if callbacks.any_around_callbacks? && ignore_around_callbacks != true
|
26
|
+
raise(
|
27
|
+
ArgumentError,
|
28
|
+
<<~TXT
|
29
|
+
`around_fire` callbacks are not supported when firing batches. \
|
30
|
+
Pass `ignore_around_callbacks: true` to `execute_in_batch` \
|
31
|
+
in order to acknowledge and muffle this.
|
32
|
+
TXT
|
33
|
+
)
|
34
|
+
end
|
35
|
+
|
36
|
+
run_before_fire_callbacks(request, response_handler)
|
37
|
+
|
38
|
+
request
|
39
|
+
end
|
40
|
+
|
41
|
+
def finish(request, result, error, raise_errors: true)
|
42
|
+
result = run_after_fire_callbacks(request, request.response, result, error)
|
43
|
+
|
44
|
+
case [error, raise_errors]
|
45
|
+
in [nil, _]
|
46
|
+
result
|
47
|
+
in [_, true]
|
48
|
+
raise error
|
49
|
+
in [_, false]
|
50
|
+
error
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
@@ -30,6 +30,10 @@ module NxtHttpClient
|
|
30
30
|
end
|
31
31
|
end
|
32
32
|
|
33
|
+
def any_around_callbacks?
|
34
|
+
registry.resolve(:around).any?
|
35
|
+
end
|
36
|
+
|
33
37
|
def any_after_callbacks?
|
34
38
|
registry.resolve(:after).any?
|
35
39
|
end
|
@@ -46,6 +50,11 @@ module NxtHttpClient
|
|
46
50
|
callback_chain.call
|
47
51
|
end
|
48
52
|
|
53
|
+
def initialize_copy(original)
|
54
|
+
@registry = original.instance_variable_get(:@registry).clone
|
55
|
+
super
|
56
|
+
end
|
57
|
+
|
49
58
|
private
|
50
59
|
|
51
60
|
attr_reader :registry
|
data/lib/nxt_http_client.rb
CHANGED
@@ -11,6 +11,8 @@ require 'nxt_http_client/logger'
|
|
11
11
|
require 'nxt_http_client/fire_callbacks'
|
12
12
|
require 'nxt_http_client/client_dsl'
|
13
13
|
require 'nxt_http_client/client'
|
14
|
+
require 'nxt_http_client/client/batch_patch'
|
15
|
+
require 'nxt_http_client/batch_execution'
|
14
16
|
require 'nxt_http_client/error'
|
15
17
|
|
16
18
|
module NxtHttpClient
|
metadata
CHANGED
@@ -1,17 +1,17 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: nxt_http_client
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Andreas Robecke
|
8
8
|
- Nils Sommer
|
9
9
|
- Raphael Kallensee
|
10
10
|
- Luetfi Demirci
|
11
|
-
autorequire:
|
11
|
+
autorequire:
|
12
12
|
bindir: exe
|
13
13
|
cert_chain: []
|
14
|
-
date:
|
14
|
+
date: 2023-04-14 00:00:00.000000000 Z
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
17
|
name: typhoeus
|
@@ -216,7 +216,9 @@ files:
|
|
216
216
|
- bin/console
|
217
217
|
- bin/setup
|
218
218
|
- lib/nxt_http_client.rb
|
219
|
+
- lib/nxt_http_client/batch_execution.rb
|
219
220
|
- lib/nxt_http_client/client.rb
|
221
|
+
- lib/nxt_http_client/client/batch_patch.rb
|
220
222
|
- lib/nxt_http_client/client_dsl.rb
|
221
223
|
- lib/nxt_http_client/config.rb
|
222
224
|
- lib/nxt_http_client/error.rb
|
@@ -234,7 +236,7 @@ metadata:
|
|
234
236
|
allowed_push_host: https://rubygems.org
|
235
237
|
homepage_uri: https://github.com/nxt-insurance
|
236
238
|
source_code_uri: https://github.com/nxt-insurance/nxt_http_client
|
237
|
-
post_install_message:
|
239
|
+
post_install_message:
|
238
240
|
rdoc_options: []
|
239
241
|
require_paths:
|
240
242
|
- lib
|
@@ -250,7 +252,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
250
252
|
version: '0'
|
251
253
|
requirements: []
|
252
254
|
rubygems_version: 3.1.6
|
253
|
-
signing_key:
|
255
|
+
signing_key:
|
254
256
|
specification_version: 4
|
255
257
|
summary: NxtHttpClinet is a simple DSL on top the typhoeus http gem
|
256
258
|
test_files: []
|