transferzero-sdk 1.19.2 → 1.19.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (41) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +4 -4
  3. data/docs/CurrencyExchangeAllOf.md +17 -0
  4. data/docs/CurrencyOppositeAllOf.md +21 -0
  5. data/docs/DocumentWebhookAllOf.md +17 -0
  6. data/docs/PayinMethod.md +1 -1
  7. data/docs/PayinMethodsApi.md +1 -1
  8. data/docs/PayoutMethodWebhookAllOf.md +17 -0
  9. data/docs/PayoutMethodsApi.md +1 -1
  10. data/docs/RecipientWebhookAllOf.md +17 -0
  11. data/docs/SenderWebhookAllOf.md +17 -0
  12. data/docs/SendersApi.md +1 -1
  13. data/docs/TransactionWebhookAllOf.md +17 -0
  14. data/lib/transferzero-sdk/api/payin_methods_api.rb +2 -2
  15. data/lib/transferzero-sdk/api/payout_methods_api.rb +2 -2
  16. data/lib/transferzero-sdk/api/senders_api.rb +2 -2
  17. data/lib/transferzero-sdk/api_client.rb +124 -89
  18. data/lib/transferzero-sdk/configuration.rb +95 -19
  19. data/lib/transferzero-sdk/models/currency_exchange_all_of.rb +205 -0
  20. data/lib/transferzero-sdk/models/currency_opposite_all_of.rb +223 -0
  21. data/lib/transferzero-sdk/models/document_webhook_all_of.rb +202 -0
  22. data/lib/transferzero-sdk/models/payin_method.rb +1 -1
  23. data/lib/transferzero-sdk/models/payin_method_ux_flow.rb +1 -0
  24. data/lib/transferzero-sdk/models/payout_method_country_enum.rb +1 -1
  25. data/lib/transferzero-sdk/models/payout_method_webhook_all_of.rb +202 -0
  26. data/lib/transferzero-sdk/models/recipient_webhook_all_of.rb +202 -0
  27. data/lib/transferzero-sdk/models/sender_webhook_all_of.rb +202 -0
  28. data/lib/transferzero-sdk/models/transaction_webhook_all_of.rb +202 -0
  29. data/lib/transferzero-sdk/version.rb +1 -1
  30. data/spec/models/currency_exchange_all_of_spec.rb +41 -0
  31. data/spec/models/currency_opposite_all_of_spec.rb +53 -0
  32. data/spec/models/document_webhook_all_of_spec.rb +41 -0
  33. data/spec/models/payout_method_webhook_all_of_spec.rb +41 -0
  34. data/spec/models/recipient_webhook_all_of_spec.rb +41 -0
  35. data/spec/models/sender_webhook_all_of_spec.rb +41 -0
  36. data/spec/models/transaction_webhook_all_of_spec.rb +41 -0
  37. data/transferzero-sdk-1.19.2.gem +0 -0
  38. data/transferzero-sdk-1.19.3.gem +0 -0
  39. data/transferzero-sdk-1.19.4.gem +0 -0
  40. data/transferzero-sdk.gemspec +2 -8
  41. metadata +40 -123
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: '0812c5257c325705bfa9e2432f72cf21ca96f5d24069586b24671e5194a1c250'
4
- data.tar.gz: d18bed4cc5d05afe7307b2bb200d36399cd16ec835e00c7ece7d0c8845449ab3
3
+ metadata.gz: 711cab66de6f674b4c8a26cb49d592b823b1157823780e44d17dd86cb3c4f1e2
4
+ data.tar.gz: c8cbfdc26f64b1d8e76974cfce5f6b136ea027b2cd01bbff5d52294b8b8878cc
5
5
  SHA512:
6
- metadata.gz: e64cc5a2e82023fd5dc29010c7b89df1beeac80cd0375f426389619c775b654b4d0db9e23595dbf7a6fe790c30da94dea11a6f48f098abbbbb120753214e0d97
7
- data.tar.gz: a171d6704db8e11b503df0ec67409eafcddff3140bf2b455aa2f0718b61732d6405da0e16503c9c62e3b2229f99e70a8ba02f4839264228a3bc150fc3be035aa
6
+ metadata.gz: 7195f09b3c82779a5c741bf583c5d007d270c065b3175469a7f5e1e07be4972c55bef885efafc99a6382bbada07a8677bcd22fc542ed27cf9cf2e6ba6828ad58
7
+ data.tar.gz: 86661a8a92640e8b76f6aa4a2291d145632cf8d76d8b322cc9bc0fc1b4a47000fec36acc0a0b49e616bf64cad80aa74075363928711fe05b6e3c948b054c8810
data/README.md CHANGED
@@ -7,7 +7,7 @@ Reference documentation for the TransferZero API V1
7
7
  This SDK is automatically generated by the [OpenAPI Generator](https://openapi-generator.tech) project:
8
8
 
9
9
  - API version: 1.0
10
- - Package version: 1.19.2
10
+ - Package version: 1.19.5
11
11
  - Build package: org.openapitools.codegen.languages.RubyClientCodegen
12
12
 
13
13
  For more information, please visit:
@@ -31,15 +31,15 @@ gem build transferzero-sdk.gemspec
31
31
  Then either install the gem locally:
32
32
 
33
33
  ```shell
34
- gem install ./transferzero-sdk-1.19.2.gem
34
+ gem install ./transferzero-sdk-1.19.5.gem
35
35
  ```
36
- (for development, run `gem install --dev ./transferzero-sdk-1.19.2.gem` to install the development dependencies)
36
+ (for development, run `gem install --dev ./transferzero-sdk-1.19.5.gem` to install the development dependencies)
37
37
 
38
38
  or publish the gem to a gem hosting service, e.g. [RubyGems](https://rubygems.org/).
39
39
 
40
40
  Finally add this to the Gemfile:
41
41
 
42
- gem 'transferzero-sdk', '~> 1.19.2'
42
+ gem 'transferzero-sdk', '~> 1.19.5'
43
43
 
44
44
  ### Install from Git
45
45
 
@@ -0,0 +1,17 @@
1
+ # TransferZero::CurrencyExchangeAllOf
2
+
3
+ ## Properties
4
+
5
+ Name | Type | Description | Notes
6
+ ------------ | ------------- | ------------- | -------------
7
+ **opposites** | [**Array<CurrencyOpposite>**](CurrencyOpposite.md) | Lists the currencies where you can exchange from this one | [optional]
8
+
9
+ ## Code Sample
10
+
11
+ ```ruby
12
+ require 'TransferZero'
13
+
14
+ instance = TransferZero::CurrencyExchangeAllOf.new(opposites: null)
15
+ ```
16
+
17
+
@@ -0,0 +1,21 @@
1
+ # TransferZero::CurrencyOppositeAllOf
2
+
3
+ ## Properties
4
+
5
+ Name | Type | Description | Notes
6
+ ------------ | ------------- | ------------- | -------------
7
+ **rate** | **Float** | The rate of this particular currency with the base one | [optional]
8
+ **mtm_rate** | **Float** | Mark to market rate of this particular currency against the base one with the margin factored in | [optional]
9
+ **margin** | **String** | The margin set for transactions of this particular currency with the base one | [optional]
10
+
11
+ ## Code Sample
12
+
13
+ ```ruby
14
+ require 'TransferZero'
15
+
16
+ instance = TransferZero::CurrencyOppositeAllOf.new(rate: null,
17
+ mtm_rate: null,
18
+ margin: null)
19
+ ```
20
+
21
+
@@ -0,0 +1,17 @@
1
+ # TransferZero::DocumentWebhookAllOf
2
+
3
+ ## Properties
4
+
5
+ Name | Type | Description | Notes
6
+ ------------ | ------------- | ------------- | -------------
7
+ **object** | [**Document**](Document.md) | | [optional]
8
+
9
+ ## Code Sample
10
+
11
+ ```ruby
12
+ require 'TransferZero'
13
+
14
+ instance = TransferZero::DocumentWebhookAllOf.new(object: null)
15
+ ```
16
+
17
+
data/docs/PayinMethod.md CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  Name | Type | Description | Notes
6
6
  ------------ | ------------- | ------------- | -------------
7
- **type** | **String** | Describes how the payment should be requested from the sender. Possible values: - `GHS::Mobile`: GHS mobile collections - `UGX::Mobile`: UGX mobile collections - `EUR::Bank`: EUR IBAN collections - `GBP::Bank`: GBP IBAN collections | [optional]
7
+ **type** | **String** | Describes how the payment should be requested from the sender. Possible values: - `GHS::Mobile`: GHS mobile collections - `UGX::Mobile`: UGX mobile collections - `XOF::Mobile`: XOF mobile collections - `EUR::Bank`: EUR IBAN collections - `GBP::Bank`: GBP IBAN collections | [optional]
8
8
  **ux_flow** | [**PayinMethodUxFlow**](PayinMethodUxFlow.md) | | [optional]
9
9
  **in_details** | [**PayinMethodDetails**](PayinMethodDetails.md) | | [optional]
10
10
  **id** | **String** | | [optional]
@@ -137,7 +137,7 @@ end
137
137
 
138
138
  Updating a payin method
139
139
 
140
- Updates the payin method specified in the URL path.
140
+ Updates a single payin method by the Payin Method ID
141
141
 
142
142
  ### Example
143
143
  ```ruby
@@ -0,0 +1,17 @@
1
+ # TransferZero::PayoutMethodWebhookAllOf
2
+
3
+ ## Properties
4
+
5
+ Name | Type | Description | Notes
6
+ ------------ | ------------- | ------------- | -------------
7
+ **object** | [**PayoutMethod**](PayoutMethod.md) | | [optional]
8
+
9
+ ## Code Sample
10
+
11
+ ```ruby
12
+ require 'TransferZero'
13
+
14
+ instance = TransferZero::PayoutMethodWebhookAllOf.new(object: null)
15
+ ```
16
+
17
+
@@ -214,7 +214,7 @@ end
214
214
 
215
215
  Updating a payout method
216
216
 
217
- Updates the payout method specified in the URL path.
217
+ Updates a single payout method by the Payout Method ID
218
218
 
219
219
  ### Example
220
220
  ```ruby
@@ -0,0 +1,17 @@
1
+ # TransferZero::RecipientWebhookAllOf
2
+
3
+ ## Properties
4
+
5
+ Name | Type | Description | Notes
6
+ ------------ | ------------- | ------------- | -------------
7
+ **object** | [**Recipient**](Recipient.md) | | [optional]
8
+
9
+ ## Code Sample
10
+
11
+ ```ruby
12
+ require 'TransferZero'
13
+
14
+ instance = TransferZero::RecipientWebhookAllOf.new(object: null)
15
+ ```
16
+
17
+
@@ -0,0 +1,17 @@
1
+ # TransferZero::SenderWebhookAllOf
2
+
3
+ ## Properties
4
+
5
+ Name | Type | Description | Notes
6
+ ------------ | ------------- | ------------- | -------------
7
+ **object** | [**Sender**](Sender.md) | | [optional]
8
+
9
+ ## Code Sample
10
+
11
+ ```ruby
12
+ require 'TransferZero'
13
+
14
+ instance = TransferZero::SenderWebhookAllOf.new(object: null)
15
+ ```
16
+
17
+
data/docs/SendersApi.md CHANGED
@@ -210,7 +210,7 @@ end
210
210
 
211
211
  Updating a sender
212
212
 
213
- Updates the sender specified in the URL path.
213
+ Updates a single sender by the Sender ID
214
214
 
215
215
  ### Example
216
216
  ```ruby
@@ -0,0 +1,17 @@
1
+ # TransferZero::TransactionWebhookAllOf
2
+
3
+ ## Properties
4
+
5
+ Name | Type | Description | Notes
6
+ ------------ | ------------- | ------------- | -------------
7
+ **object** | [**Transaction**](Transaction.md) | | [optional]
8
+
9
+ ## Code Sample
10
+
11
+ ```ruby
12
+ require 'TransferZero'
13
+
14
+ instance = TransferZero::TransactionWebhookAllOf.new(object: null)
15
+ ```
16
+
17
+
@@ -130,7 +130,7 @@ module TransferZero
130
130
 
131
131
 
132
132
  # Updating a payin method
133
- # Updates the payin method specified in the URL path.
133
+ # Updates a single payin method by the Payin Method ID
134
134
  # @param payin_method_id ID of the payin method to get. Example: `/v1/payin_methods/bf9ff782-e182-45ac-abea-5bce83ad6670`
135
135
  # @param payin_method
136
136
  # @param [Hash] opts the optional parameters
@@ -141,7 +141,7 @@ module TransferZero
141
141
  end
142
142
 
143
143
  # Updating a payin method
144
- # Updates the payin method specified in the URL path.
144
+ # Updates a single payin method by the Payin Method ID
145
145
  # @param payin_method_id ID of the payin method to get. Example: `/v1/payin_methods/bf9ff782-e182-45ac-abea-5bce83ad6670`
146
146
  # @param payin_method
147
147
  # @param [Hash] opts the optional parameters
@@ -202,7 +202,7 @@ module TransferZero
202
202
 
203
203
 
204
204
  # Updating a payout method
205
- # Updates the payout method specified in the URL path.
205
+ # Updates a single payout method by the Payout Method ID
206
206
  # @param payout_method_id ID of the payout method to get. Example: `/v1/payout_methods/bf9ff782-e182-45ac-abea-5bce83ad6670`
207
207
  # @param payout_method
208
208
  # @param [Hash] opts the optional parameters
@@ -213,7 +213,7 @@ module TransferZero
213
213
  end
214
214
 
215
215
  # Updating a payout method
216
- # Updates the payout method specified in the URL path.
216
+ # Updates a single payout method by the Payout Method ID
217
217
  # @param payout_method_id ID of the payout method to get. Example: `/v1/payout_methods/bf9ff782-e182-45ac-abea-5bce83ad6670`
218
218
  # @param payout_method
219
219
  # @param [Hash] opts the optional parameters
@@ -203,7 +203,7 @@ module TransferZero
203
203
 
204
204
 
205
205
  # Updating a sender
206
- # Updates the sender specified in the URL path.
206
+ # Updates a single sender by the Sender ID
207
207
  # @param sender_id ID of the sender to get. Example: `/v1/senders/bf9ff782-e182-45ac-abea-5bce83ad6670`
208
208
  # @param sender_request
209
209
  # @param [Hash] opts the optional parameters
@@ -214,7 +214,7 @@ module TransferZero
214
214
  end
215
215
 
216
216
  # Updating a sender
217
- # Updates the sender specified in the URL path.
217
+ # Updates a single sender by the Sender ID
218
218
  # @param sender_id ID of the sender to get. Example: `/v1/senders/bf9ff782-e182-45ac-abea-5bce83ad6670`
219
219
  # @param sender_request
220
220
  # @param [Hash] opts the optional parameters
@@ -14,7 +14,8 @@ require 'date'
14
14
  require 'json'
15
15
  require 'logger'
16
16
  require 'tempfile'
17
- require 'typhoeus'
17
+ require 'time'
18
+ require 'faraday'
18
19
  require 'uri'
19
20
  require 'openssl'
20
21
  require 'securerandom'
@@ -35,7 +36,7 @@ module TransferZero
35
36
  # @option config [Configuration] Configuration for initializing the object, default to Configuration.default
36
37
  def initialize(config = Configuration.default)
37
38
  @config = config
38
- @user_agent = "TransferZero-SDK/Ruby/1.19.2"
39
+ @user_agent = "TransferZero-SDK/Ruby/1.19.5"
39
40
  @default_headers = {
40
41
  'Content-Type' => 'application/json',
41
42
  'User-Agent' => @user_agent
@@ -51,33 +52,51 @@ module TransferZero
51
52
  # @return [Array<(Object, Fixnum, Hash)>] an array of 3 elements:
52
53
  # the data deserialized from response body (could be nil), response status code and response headers.
53
54
  def call_api(http_method, path, opts = {})
54
- request = build_request(http_method, path, opts)
55
- response = request.run
55
+ ssl_options = {
56
+ :ca_file => @config.ssl_ca_file,
57
+ :verify => @config.ssl_verify,
58
+ :verify_mode => @config.ssl_verify_mode,
59
+ :client_cert => @config.ssl_client_cert,
60
+ :client_key => @config.ssl_client_key
61
+ }
56
62
 
57
- if @config.debugging
58
- @config.logger.debug "HTTP response body ~BEGIN~\n#{response.body}\n~END~\n"
63
+ connection = Faraday.new(:url => config.base_url, :ssl => ssl_options) do |conn|
64
+ if opts[:header_params]["Content-Type"] == "multipart/form-data"
65
+ conn.request :multipart
66
+ conn.request :url_encoded
67
+ end
68
+ conn.adapter(Faraday.default_adapter)
59
69
  end
60
70
 
61
- unless response.success?
62
- if response.timed_out?
63
- fail ApiError.new('Connection timed out')
64
- elsif response.code == 0
65
- # Errors from libcurl will be made visible here
66
- fail ApiError.new(:code => 0,
67
- :message => response.return_message)
68
- elsif response.code == 422
69
- fail ApiError.new(:code => response.code,
70
- :response_headers => response.headers,
71
- :response_body => response.body,
72
- :validation_error => true
73
- )
74
- else
75
- fail ApiError.new(:code => response.code,
76
- :response_headers => response.headers,
77
- :response_body => response.body,
78
- :validation_error => false),
79
- response.status_message
71
+ begin
72
+ response = connection.public_send(http_method.to_sym.downcase) do |req|
73
+ build_request(http_method, path, req, opts)
74
+ end
75
+
76
+ if @config.debugging
77
+ @config.logger.debug "HTTP response body ~BEGIN~\n#{response.body}\n~END~\n"
78
+ end
79
+
80
+ unless response.success?
81
+ if response.status == 0 || response.status.nil?
82
+ # Errors from libcurl will be made visible here
83
+ fail ApiError.new(:code => 0,
84
+ :message => response.return_message)
85
+ elsif response.status == 422
86
+ fail ApiError.new(:code => response.status,
87
+ :response_headers => response.headers,
88
+ :response_body => response.body,
89
+ :validation_error => true
90
+ )
91
+ else
92
+ fail ApiError.new(:code => response.status,
93
+ :response_headers => response.headers,
94
+ :response_body => response.body),
95
+ response.reason_phrase
96
+ end
80
97
  end
98
+ rescue Faraday::TimeoutError
99
+ fail ApiError.new('Connection timed out')
81
100
  end
82
101
 
83
102
  if opts[:return_type]
@@ -85,7 +104,7 @@ module TransferZero
85
104
  else
86
105
  data = nil
87
106
  end
88
- return data, response.code, response.headers
107
+ return data, response.status, response.headers
89
108
  end
90
109
 
91
110
  # Builds the HTTP request
@@ -97,57 +116,49 @@ module TransferZero
97
116
  # @option opts [Hash] :form_params Query parameters
98
117
  # @option opts [Object] :body HTTP body (JSON/XML)
99
118
  # @return [Typhoeus::Request] A Typhoeus Request
100
- def build_request(http_method, path, opts = {})
101
- url = build_request_url(path)
119
+ def build_request(http_method, path, request, opts = {})
120
+ url = build_request_url(path, opts)
102
121
  http_method = http_method.to_sym.downcase
103
122
 
104
123
  header_params = @default_headers.merge(opts[:header_params] || {})
105
124
  query_params = opts[:query_params] || {}
106
- url_with_params = add_query(url, query_params)
107
125
  form_params = opts[:form_params] || {}
108
-
109
- request_body = opts[:body].to_s.gsub(/[[:space:]]+/, ' ').strip
110
-
111
- request_nonce = SecureRandom.uuid
112
- request_signature = sign_request([
113
- request_nonce,
114
- http_method.to_s.upcase,
115
- url_with_params,
116
- DIGEST.hexdigest(request_body)
117
- ])
118
-
119
- header_params['Authorization-Nonce'] = request_nonce
120
- header_params['Authorization-Signature'] = request_signature
121
- header_params['Authorization-Key'] = @config.api_key
122
-
123
- # set ssl_verifyhosts option based on @config.verify_ssl_host (true/false)
124
- _verify_ssl_host = @config.verify_ssl_host ? 2 : 0
126
+ url_with_params = add_query(url, query_params)
125
127
 
126
128
  req_opts = {
127
129
  :method => http_method,
128
130
  :headers => header_params,
129
- :params => {}, # removed and params added to url string
131
+ :params => query_params,
130
132
  :params_encoding => @config.params_encoding,
131
133
  :timeout => @config.timeout,
132
- :ssl_verifypeer => @config.verify_ssl,
133
- :ssl_verifyhost => _verify_ssl_host,
134
- :sslcert => @config.cert_file,
135
- :sslkey => @config.key_file,
136
134
  :verbose => @config.debugging
137
135
  }
138
136
 
139
- # set custom cert, if provided
140
- req_opts[:cainfo] = @config.ssl_ca_cert if @config.ssl_ca_cert
141
-
137
+ req_body = ''
142
138
  if [:post, :patch, :put, :delete].include?(http_method)
143
- req_body = build_request_body(header_params, form_params, request_body)
139
+ req_body = build_request_body(header_params, form_params, opts[:body])
144
140
  req_opts.update :body => req_body
145
141
  if @config.debugging
146
142
  @config.logger.debug "HTTP request body param ~BEGIN~\n#{req_body}\n~END~\n"
147
143
  end
148
144
  end
149
145
 
150
- request = Typhoeus::Request.new(url_with_params, req_opts)
146
+ request_nonce = SecureRandom.uuid
147
+ request_signature = sign_request([
148
+ request_nonce,
149
+ http_method.to_s.upcase,
150
+ url_with_params,
151
+ DIGEST.hexdigest(req_body)
152
+ ])
153
+
154
+ header_params['Authorization-Nonce'] = request_nonce
155
+ header_params['Authorization-Signature'] = request_signature
156
+ header_params['Authorization-Key'] = @config.api_key
157
+
158
+ request.headers = header_params
159
+ request.body = req_body
160
+ request.url url
161
+ request.params = query_params
151
162
  download_file(request) if opts[:return_type] == 'File'
152
163
  request
153
164
  end
@@ -214,7 +225,25 @@ module TransferZero
214
225
 
215
226
  # handle file downloading - return the File instance processed in request callbacks
216
227
  # note that response body is empty when the file is written in chunks in request on_body callback
217
- return @tempfile if return_type == 'File'
228
+ if return_type == 'File'
229
+ content_disposition = response.headers['Content-Disposition']
230
+ if content_disposition && content_disposition =~ /filename=/i
231
+ filename = content_disposition[/filename=['"]?([^'"\s]+)['"]?/, 1]
232
+ prefix = sanitize_filename(filename)
233
+ else
234
+ prefix = 'download-'
235
+ end
236
+ prefix = prefix + '-' unless prefix.end_with?('-')
237
+ encoding = body.encoding
238
+ @tempfile = Tempfile.open(prefix, @config.temp_folder_path, encoding: encoding)
239
+ @tempfile.write(@stream.join.force_encoding(encoding))
240
+ @tempfile.close
241
+ @config.logger.info "Temp file written to #{@tempfile.path}, please copy the file to a proper folder "\
242
+ "with e.g. `FileUtils.cp(tempfile.path, '/new/file/path')` otherwise the temp file "\
243
+ "will be deleted automatically with GC. It's also recommended to delete the temp file "\
244
+ "explicitly with `tempfile.delete`"
245
+ return @tempfile
246
+ end
218
247
 
219
248
  return nil if body.nil? || body.empty?
220
249
 
@@ -281,39 +310,45 @@ module TransferZero
281
310
  end
282
311
  end
283
312
 
284
- # Save response body into a file in (the defined) temporary folder, using the filename
285
- # from the "Content-Disposition" header if provided, otherwise a random filename.
286
- # The response body is written to the file in chunks in order to handle files which
287
- # size is larger than maximum Ruby String or even larger than the maximum memory a Ruby
288
- # process can use.
313
+
314
+ # Builds the HTTP request body
289
315
  #
290
- # @see Configuration#temp_folder_path
291
- def download_file(request)
292
- tempfile = nil
293
- encoding = nil
294
- request.on_headers do |response|
295
- content_disposition = response.headers['Content-Disposition']
296
- if content_disposition && content_disposition =~ /filename=/i
297
- filename = content_disposition[/filename=['"]?([^'"\s]+)['"]?/, 1]
298
- prefix = sanitize_filename(filename)
299
- else
300
- prefix = 'download-'
316
+ # @param [Hash] header_params Header parameters
317
+ # @param [Hash] form_params Query parameters
318
+ # @param [Object] body HTTP body (JSON/XML)
319
+ # @return [String] HTTP body data in the form of string
320
+ def build_request_body(header_params, form_params, body)
321
+ # http form
322
+ if header_params['Content-Type'] == 'application/x-www-form-urlencoded'
323
+ data = URI.encode_www_form(form_params)
324
+ elsif header_params['Content-Type'] == 'multipart/form-data'
325
+ data = {}
326
+ form_params.each do |key, value|
327
+ case value
328
+ when ::File, ::Tempfile
329
+ # TODO hardcode to application/octet-stream, need better way to detect content type
330
+ data[key] = Faraday::UploadIO.new(value.path, 'application/octet-stream', value.path)
331
+ when ::Array, nil
332
+ # let Faraday handle Array and nil parameters
333
+ data[key] = value
334
+ else
335
+ data[key] = value.to_s
336
+ end
301
337
  end
302
- prefix = prefix + '-' unless prefix.end_with?('-')
303
- encoding = response.body.encoding
304
- tempfile = Tempfile.open(prefix, @config.temp_folder_path, encoding: encoding)
305
- @tempfile = tempfile
306
- end
307
- request.on_body do |chunk|
308
- chunk.force_encoding(encoding)
309
- tempfile.write(chunk)
338
+ elsif body
339
+ data = body.is_a?(String) ? body : body.to_json
340
+ else
341
+ data = nil
310
342
  end
311
- request.on_complete do |response|
312
- tempfile.close
313
- @config.logger.info "Temp file written to #{tempfile.path}, please copy the file to a proper folder "\
314
- "with e.g. `FileUtils.cp(tempfile.path, '/new/file/path')` otherwise the temp file "\
315
- "will be deleted automatically with GC. It's also recommended to delete the temp file "\
316
- "explicitly with `tempfile.delete`"
343
+ data
344
+ end
345
+
346
+ def download_file(request)
347
+ @stream = []
348
+
349
+ # handle streaming Responses
350
+ request.options.on_data = Proc.new do |chunk, overall_received_bytes|
351
+ @stream << chunk
317
352
  end
318
353
  end
319
354
 
@@ -326,10 +361,10 @@ module TransferZero
326
361
  filename.gsub(/.*[\/\\]/, '')
327
362
  end
328
363
 
329
- def build_request_url(path)
364
+ def build_request_url(path, opts = {})
330
365
  # Add leading and trailing slashes to path
331
366
  path = "/#{path}".gsub(/\/+/, '/')
332
- URI.encode(@config.base_url + path)
367
+ @config.base_url(opts[:operation]) + path
333
368
  end
334
369
 
335
370
  # Builds the HTTP request body