treezor_connect 0.21.0 → 0.22.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:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: af881cf032f896376706c821ec29e3a7a9d2c41b1720e474ff609d3edcefe01d
|
|
4
|
+
data.tar.gz: 00f85ff778af5d215a42ce9ebece82db614a0fc3826a29a9b5412560dd7bf038
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 6895c953b9a931be42a543bd3ff53c841621899a3e2ec071d7443a9ebc2925a3b3f339e738a83e67dd4e907456dc8438e441c280fb9db85bd121df14b775d7c7
|
|
7
|
+
data.tar.gz: 45a00902e1468f9dbab98c926a91cd5fe2402cc96b935b729828715745c57c7adf408006bb2ee6bf529946107ae1fd55777fa217e8fc629a21e79f7ccc7d91e0
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module TreezorConnect
|
|
4
|
+
module ApiOperations
|
|
5
|
+
module BulkCreate
|
|
6
|
+
def bulk_create(params_list, access_token = nil)
|
|
7
|
+
params_list = params_list.map { |params| { body: params } }
|
|
8
|
+
treezor_responses = parallel_request(:post, resource_url, params_list:, access_token:)
|
|
9
|
+
treezor_responses.map do |treezor_response|
|
|
10
|
+
if treezor_response.is_a?(ApiError)
|
|
11
|
+
treezor_response
|
|
12
|
+
else
|
|
13
|
+
data = extract_response_data(treezor_response, extract_all_objects: false)
|
|
14
|
+
Util.convert_to_treezor_object(data, { object_class: self::OBJECT_NAME })
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
@@ -7,14 +7,19 @@ module TreezorConnect
|
|
|
7
7
|
def request(method, url, params: {}, headers: {}, access_token: nil)
|
|
8
8
|
params = Util.normalize_params(params)
|
|
9
9
|
client = TreezorConnect::Client.new(access_token)
|
|
10
|
-
response = client.execute_request(
|
|
11
|
-
method, url,
|
|
12
|
-
headers:,
|
|
13
|
-
params:
|
|
14
|
-
)
|
|
10
|
+
response = client.execute_request(method, url, headers:, params:)
|
|
15
11
|
TreezorResponse.from_http_response(response)
|
|
16
12
|
end
|
|
17
13
|
|
|
14
|
+
def parallel_request(method, url, params_list: {}, headers: {}, access_token: nil)
|
|
15
|
+
params_list = params_list.map { |params| Util.normalize_params(params) }
|
|
16
|
+
client = TreezorConnect::Client.new(access_token)
|
|
17
|
+
responses = client.execute_parallel_requests(method, url, headers:, params_list:)
|
|
18
|
+
responses.map do |response|
|
|
19
|
+
response.is_a?(ApiError) ? response : TreezorResponse.from_http_response(response)
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
18
23
|
def extract_response_data(response, extract_all_objects: true)
|
|
19
24
|
if defined?(self::OBJECT_KEY) && response.data.key?(self::OBJECT_KEY)
|
|
20
25
|
objects = response.data.fetch(self::OBJECT_KEY)
|
|
@@ -8,28 +8,43 @@ module TreezorConnect
|
|
|
8
8
|
@access_token = access_token.nil? ? default_access_token : access_token
|
|
9
9
|
@conn = Faraday.new(
|
|
10
10
|
url: TreezorConnect.api_base_url,
|
|
11
|
-
headers: { 'Authorization' => "Bearer #{@access_token}" }
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
11
|
+
headers: { 'Authorization' => "Bearer #{@access_token}" },
|
|
12
|
+
parallel_manager:
|
|
13
|
+
) do |faraday|
|
|
14
|
+
faraday.response :logger, Logger.new($stdout) if ENV['ENABLE_HTTP_LOGGING']
|
|
15
|
+
faraday.adapter :typhoeus
|
|
15
16
|
end
|
|
16
17
|
end
|
|
17
18
|
|
|
18
19
|
def execute_request(method, path, headers: {}, params: {})
|
|
19
20
|
response = conn.public_send(method, path) do |req|
|
|
20
21
|
req.headers.merge!(headers)
|
|
21
|
-
req
|
|
22
|
-
apply_body(req, params)
|
|
22
|
+
configure_request(req, params)
|
|
23
23
|
end
|
|
24
24
|
|
|
25
25
|
process_response(response)
|
|
26
26
|
end
|
|
27
27
|
|
|
28
|
+
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
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
responses.map { |response| process_parallel_response(response) }
|
|
40
|
+
end
|
|
41
|
+
|
|
28
42
|
private
|
|
29
43
|
|
|
30
44
|
attr_reader :conn
|
|
31
45
|
|
|
32
|
-
def
|
|
46
|
+
def configure_request(req, params)
|
|
47
|
+
req.params.merge!(params[:query]) if params[:query]
|
|
33
48
|
if params[:form]
|
|
34
49
|
req.headers['Content-Type'] = 'application/x-www-form-urlencoded'
|
|
35
50
|
req.body = URI.encode_www_form(params[:form])
|
|
@@ -47,6 +62,14 @@ module TreezorConnect
|
|
|
47
62
|
)
|
|
48
63
|
end
|
|
49
64
|
|
|
65
|
+
def parallel_manager
|
|
66
|
+
@parallel_manager ||= begin
|
|
67
|
+
# Currently library default is 200 but this way we are future-proof
|
|
68
|
+
max_concurrency = TreezorConnect.max_concurrency || Typhoeus::Hydra.new.max_concurrency
|
|
69
|
+
Typhoeus::Hydra.new(max_concurrency:)
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
|
|
50
73
|
def fetch_access_token
|
|
51
74
|
oauth_client.client_credentials.get_token.token
|
|
52
75
|
end
|
|
@@ -57,12 +80,22 @@ module TreezorConnect
|
|
|
57
80
|
elsif response.status == 303
|
|
58
81
|
raise AlreadyCreatedError, response
|
|
59
82
|
else
|
|
60
|
-
|
|
83
|
+
raise build_api_error(http_status: response.status, http_body: JSON.parse(response.body))
|
|
84
|
+
end
|
|
85
|
+
end
|
|
86
|
+
|
|
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))
|
|
61
94
|
end
|
|
62
95
|
end
|
|
63
96
|
|
|
64
|
-
def
|
|
65
|
-
|
|
97
|
+
def build_api_error(http_status:, http_body:)
|
|
98
|
+
ApiError.new(
|
|
66
99
|
"API request failed: #{http_body.inspect} (HTTP response code was #{http_status})",
|
|
67
100
|
http_body,
|
|
68
101
|
http_status
|
data/lib/treezor_connect.rb
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
require 'faraday'
|
|
4
|
+
require 'faraday/typhoeus'
|
|
4
5
|
require 'oauth2'
|
|
5
6
|
require 'logger'
|
|
6
7
|
|
|
@@ -19,6 +20,7 @@ require 'treezor_connect/errors'
|
|
|
19
20
|
require 'treezor_connect/api_operations/fetch'
|
|
20
21
|
require 'treezor_connect/api_operations/list'
|
|
21
22
|
require 'treezor_connect/api_operations/create'
|
|
23
|
+
require 'treezor_connect/api_operations/bulk_create'
|
|
22
24
|
require 'treezor_connect/api_operations/request'
|
|
23
25
|
require 'treezor_connect/api_operations/update'
|
|
24
26
|
require 'treezor_connect/api_operations/delete'
|
|
@@ -29,7 +31,7 @@ require 'treezor_connect/resources'
|
|
|
29
31
|
|
|
30
32
|
module TreezorConnect
|
|
31
33
|
class << self
|
|
32
|
-
attr_accessor :api_base_url, :client_id, :client_secret
|
|
34
|
+
attr_accessor :api_base_url, :client_id, :client_secret, :max_concurrency
|
|
33
35
|
end
|
|
34
36
|
|
|
35
37
|
def self.configure
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: treezor_connect
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.22.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-
|
|
11
|
+
date: 2026-06-10 00:00:00.000000000 Z
|
|
12
12
|
dependencies: []
|
|
13
13
|
description: A gem for making HTTP calls to Treezor Connect.
|
|
14
14
|
email: stefan.atkinson69@gmail.com
|
|
@@ -17,6 +17,7 @@ extensions: []
|
|
|
17
17
|
extra_rdoc_files: []
|
|
18
18
|
files:
|
|
19
19
|
- lib/treezor_connect.rb
|
|
20
|
+
- lib/treezor_connect/api_operations/bulk_create.rb
|
|
20
21
|
- lib/treezor_connect/api_operations/create.rb
|
|
21
22
|
- lib/treezor_connect/api_operations/delete.rb
|
|
22
23
|
- lib/treezor_connect/api_operations/fetch.rb
|