treezor_connect 0.24.0 → 0.25.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: 489fedbc4320d136c1a777a73f9130c831115532c87acba8f5a0ce761f98b67d
4
- data.tar.gz: 1bd030071387828c890e3d4a5945aa3155dd93b3763b4fe3cb65914af8bda7c9
3
+ metadata.gz: 13f31edcddc687b488be718d26fcbda0788415b2c7cc37a49be9c22a7d745c46
4
+ data.tar.gz: 73fd7adff0a07ffa26969bb7b7fbfea1267e07c7ef911236aa4f35335f6eddcd
5
5
  SHA512:
6
- metadata.gz: 707ab8362d8b867e3b1b828505ac8adb5e6e6776a69c11d119a5ac27e6d9063c76b3657f8f03e9c9ecf21dba5cec6cfff4970b542b6198d6e649d02ee8f334ec
7
- data.tar.gz: 6aa16b20660279a1ad58bca84b43f549d09b2cf1d0d870e37dcf344ac3acd43369233c1958a57e47be815db93c51979a7473d5efc3fcc6bd45b9c982436197f5
6
+ metadata.gz: d1d58df6f7573ac6b41a1cce8c486f1c4b44f5d602aa2273f8590d8e045a5ae8ff3a6cbfa47f95161cdc413b156f2d4e264b809de9b6a4f01f9e3db61487cb82
7
+ data.tar.gz: c5ef03fafb1c06139adddf44bd4b6cf3fc9043d2bb7032d2ae969e89d0bd5e1935bf9d0706da307cd6116692244bdfc3d8240206c014a8621587bf652e6739f6
@@ -16,7 +16,11 @@ module TreezorConnect
16
16
  client = TreezorConnect::Client.new(access_token)
17
17
  responses = client.execute_parallel_requests(method, url, headers:, params_list:)
18
18
  responses.map do |response|
19
- response.is_a?(ApiError) ? response : TreezorResponse.from_http_response(response)
19
+ if response.is_a?(ApiError)
20
+ response
21
+ else
22
+ TreezorResponse.from_http_response(response, record_headers: TreezorConnect.bulk_record_headers)
23
+ end
20
24
  end
21
25
  end
22
26
 
@@ -8,11 +8,9 @@ module TreezorConnect
8
8
  @access_token = access_token || default_access_token
9
9
  @conn = Faraday.new(
10
10
  url: TreezorConnect.api_base_url,
11
- headers: { 'Authorization' => "Bearer #{@access_token}" },
12
- parallel_manager:
11
+ headers: { 'Authorization' => "Bearer #{@access_token}" }
13
12
  ) do |faraday|
14
13
  faraday.response :logger, Logger.new($stdout) if ENV['ENABLE_HTTP_LOGGING']
15
- faraday.adapter :typhoeus
16
14
  end
17
15
  end
18
16
 
@@ -26,21 +24,33 @@ module TreezorConnect
26
24
  end
27
25
 
28
26
  def execute_parallel_requests(method, path, headers: {}, params_list: [])
29
- responses = []
30
- conn.in_parallel do
31
- params_list.each do |params|
32
- responses << conn.public_send(method, path) do |req|
33
- req.headers.merge!(headers)
34
- configure_request(req, params)
35
- end
36
- end
27
+ # For now this is only needed for BulkVoP that uses json, if needed for other uses we might need to refactor a bit
28
+ unless params_list.flat_map(&:keys).uniq == [:body]
29
+ raise NotImplementedError, 'For now parallel requests only work on JSON POST'
30
+ end
31
+
32
+ # Shared frozen headers — built once, never duped : this is to avoid huge memory costs
33
+ shared_headers = { **conn.headers, 'Content-Type' => 'application/json', **headers }.freeze
34
+
35
+ requests = params_list.map do |params|
36
+ Typhoeus::Request.new(
37
+ conn.url_prefix + path, method:, headers: shared_headers, body: params.fetch(:body).to_json
38
+ ).tap { |req| parallel_manager.queue(req) }
37
39
  end
38
40
 
39
- responses.map { |response| process_parallel_response(response) }
41
+ parallel_manager.run
42
+
43
+ process_parallel_requests(requests)
40
44
  end
41
45
 
42
46
  private
43
47
 
48
+ module FaradayResponseCompatibilyMethods
49
+ def status
50
+ code
51
+ end
52
+ end
53
+
44
54
  attr_reader :conn
45
55
 
46
56
  def configure_request(req, params)
@@ -65,7 +75,7 @@ module TreezorConnect
65
75
  def parallel_manager
66
76
  @parallel_manager ||= begin
67
77
  # Currently library default is 200 but this way we are future-proof
68
- max_concurrency = TreezorConnect.max_concurrency || Typhoeus::Hydra.new.max_concurrency
78
+ max_concurrency = TreezorConnect.bulk_max_concurrency || Typhoeus::Hydra.new.max_concurrency
69
79
  Typhoeus::Hydra.new(max_concurrency:)
70
80
  end
71
81
  end
@@ -84,13 +94,16 @@ module TreezorConnect
84
94
  end
85
95
  end
86
96
 
87
- def process_parallel_response(response)
88
- if response.success?
89
- response
90
- elsif response.status == 303
91
- AlreadyCreatedError.new(response)
92
- else
93
- build_api_error(http_status: response.status, http_body: JSON.parse(response.body))
97
+ def process_parallel_requests(requests)
98
+ requests.map do |request|
99
+ response = request.response
100
+ # For parallel calls we use Typhoeus requests, to play well with the rest of our code we mimic Faraday responses
101
+ response.extend(FaradayResponseCompatibilyMethods)
102
+ begin
103
+ process_response(response)
104
+ rescue AlreadyCreatedError, ApiError => e
105
+ e
106
+ end
94
107
  end
95
108
  end
96
109
 
@@ -4,11 +4,11 @@ module TreezorConnect
4
4
  class TreezorResponse
5
5
  attr_accessor :data, :http_body, :http_headers, :http_status
6
6
 
7
- def self.from_http_response(http_resp)
7
+ def self.from_http_response(http_resp, record_headers: true)
8
8
  resp = TreezorResponse.new
9
9
  resp.data = JSON.parse(http_resp.body) if http_resp.body.to_s != ''
10
10
  resp.http_body = http_resp.body
11
- resp.http_headers = http_resp.headers
11
+ resp.http_headers = http_resp.headers if record_headers
12
12
  resp.http_status = http_resp.status
13
13
  resp
14
14
  end
@@ -34,7 +34,7 @@ require 'treezor_connect/resources'
34
34
 
35
35
  module TreezorConnect
36
36
  class << self
37
- attr_accessor :api_base_url, :client_id, :client_secret, :max_concurrency
37
+ attr_accessor :api_base_url, :client_id, :client_secret, :bulk_max_concurrency, :bulk_record_headers
38
38
  end
39
39
 
40
40
  def self.configure
metadata CHANGED
@@ -1,15 +1,71 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: treezor_connect
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.24.0
4
+ version: 0.25.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - stefakins
8
8
  - jbauzone
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2026-06-17 00:00:00.000000000 Z
12
- dependencies: []
11
+ date: 2026-06-19 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: faraday
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '2.14'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '2.14'
27
+ - !ruby/object:Gem::Dependency
28
+ name: faraday-typhoeus
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '2.0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '2.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: jwt
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '2.7'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '2.7'
55
+ - !ruby/object:Gem::Dependency
56
+ name: oauth2
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '2.0'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '2.0'
13
69
  description: A gem for making HTTP calls to Treezor Connect.
14
70
  email: stefan.atkinson69@gmail.com
15
71
  executables: []