apimatic_calculator_test_ruby2 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: '08c356f35b0fd535093d0908939a8d36ac194e1f36095527f89a39f0f4cc9e2f'
4
+ data.tar.gz: 4f73d467f4d0250d11d8a932d68ad880825c6bd23e871957524a16a0577e25c7
5
+ SHA512:
6
+ metadata.gz: 38d3457e6a6fc6092c8ecab370d7b66a133008d0c17bbf1aeadadb7fca7a4428ce789fb4c66e04c43096501ed81759b462cbce112b89806404d18ff671df375e
7
+ data.tar.gz: 6766d6a8c3e458c1ff214ed49d12673bc29cfaef10fcbb87a7824a014bd46b48cded5d4ac5daeda6867779d1c24ba5748fc1e63a87024985d91159218a8fa2d9
data/LICENSE ADDED
@@ -0,0 +1,28 @@
1
+ License:
2
+ ========
3
+ The MIT License (MIT)
4
+ http://opensource.org/licenses/MIT
5
+
6
+ Copyright (c) 2014 - 2023 APIMATIC Limited
7
+
8
+ Permission is hereby granted, free of charge, to any person obtaining a copy
9
+ of this software and associated documentation files (the "Software"), to deal
10
+ in the Software without restriction, including without limitation the rights
11
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
12
+ copies of the Software, and to permit persons to whom the Software is
13
+ furnished to do so, subject to the following conditions:
14
+
15
+ The above copyright notice and this permission notice shall be included in
16
+ all copies or substantial portions of the Software.
17
+
18
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
19
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
20
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
21
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
22
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
23
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
24
+ THE SOFTWARE.
25
+
26
+ Trade Mark:
27
+ ==========
28
+ APIMATIC is a trade mark for APIMATIC Limited
data/README.md ADDED
@@ -0,0 +1,110 @@
1
+
2
+ # Getting Started with APIMATIC Calculator
3
+
4
+ ## Introduction
5
+
6
+ Simple calculator API hosted on APIMATIC
7
+
8
+ ## Building
9
+
10
+ The generated code depends on a few Ruby gems. The references to these gems are added in the gemspec file. The easiest way to resolve the dependencies, build the gem and install it is through Rake:
11
+
12
+ 1. Install Rake if not already installed: `gem install rake`
13
+ 2. Install Bundler if not already installed: `gem install bundler`
14
+ 3. From terminal/cmd navigate to the root directory of the SDK.
15
+ 4. Invoke: `rake install`
16
+
17
+ Alternatively, you can build and install the gem manually:
18
+
19
+ 1. From terminal/cmd navigate to the root directory of the SDK.
20
+ 2. Run the build command: `gem build apimatic_calculator.gemspec`
21
+ 3. Run the install command: `gem install apimatic_calculator-1.0.0.gem`
22
+
23
+ ![Installing Gem](https://apidocs.io/illustration/ruby?workspaceFolder=ApimaticCalculator&gemVer=1.0.0&gemName=apimatic_calculator&step=buildSDK)
24
+
25
+ ## Installation
26
+
27
+ The following section explains how to use the apimatic_calculator ruby gem in a new Rails project using RubyMine™. The basic workflow presented here is also applicable if you prefer using a different editor or IDE.
28
+
29
+ ### 1. Starting a new project
30
+
31
+ Close any existing projects in RubyMine™ by selecting `File -> Close Project`. Next, click on `Create New Project` to create a new project from scratch.
32
+
33
+ ![Create a new project in RubyMine - Step 1](https://apidocs.io/illustration/ruby?workspaceFolder=ApimaticCalculator&step=createNewProject0)
34
+
35
+ Next, provide `TestApp` as the project name, choose `Rails Application` as the project type, and click `OK`.
36
+
37
+ ![Create a new Rails Application in RubyMine - Step 2](https://apidocs.io/illustration/ruby?workspaceFolder=ApimaticCalculator&step=createNewProject1)
38
+
39
+ In the next dialog make sure that the correct Ruby SDK is being used (>= 2.6 and < 3.1) and click `OK`.
40
+
41
+ ![Create a new Rails Application in RubyMine - Step 3](https://apidocs.io/illustration/ruby?workspaceFolder=ApimaticCalculator&step=createNewProject2)
42
+
43
+ ### 2. Add reference of the gem
44
+
45
+ In order to use the Tester gem in the new project we must add a gem reference. Locate the `Gemfile` in the Project Explorer window under the `TestApp` project node. The file contains references to all gems being used in the project. Here, add the reference to the library gem by adding the following line: `gem 'apimatic_calculator', '1.0.0'`
46
+
47
+ ![Add new reference to the Gemfile](https://apidocs.io/illustration/ruby?workspaceFolder=ApimaticCalculator&gemVer=1.0.0&gemName=apimatic_calculator&step=addReference)
48
+
49
+ ### 3. Adding a new Rails Controller
50
+
51
+ Once the `TestApp` project is created, a folder named `controllers` will be visible in the *Project Explorer* under the following path: `TestApp > app > controllers`. Right click on this folder and select `New -> Run Rails Generator...`.
52
+
53
+ ![Run Rails Generator on Controllers Folder](https://apidocs.io/illustration/ruby?workspaceFolder=ApimaticCalculator&gemVer=1.0.0&gemName=apimatic_calculator&step=addCode0)
54
+
55
+ Selecting the said option will popup a small window where the generator names are displayed. Here, select the `controller` template.
56
+
57
+ ![Create a new Controller](https://apidocs.io/illustration/ruby?workspaceFolder=ApimaticCalculator&step=addCode1)
58
+
59
+ Next, a popup window will ask you for a Controller name and included Actions. For controller name provide `Hello` and include an action named `Index` and click `OK`.
60
+
61
+ ![Add a new Controller](https://apidocs.io/illustration/ruby?workspaceFolder=ApimaticCalculator&gemVer=1.0.0&gemName=apimatic_calculator&step=addCode2)
62
+
63
+ A new controller class named `HelloController` will be created in a file named `hello_controller.rb` containing a method named `Index`. In this method, add code for initialization and a sample for its usage.
64
+
65
+ ![Initialize the library](https://apidocs.io/illustration/ruby?workspaceFolder=ApimaticCalculator&gemName=apimatic_calculator&step=addCode3)
66
+
67
+ ## Test the SDK
68
+
69
+ To run the tests, navigate to the root directory of the SDK in your terminal and execute the following command:
70
+
71
+ ```
72
+ rake
73
+ ```
74
+
75
+ ## Initialize the API Client
76
+
77
+ **_Note:_** Documentation for the client can be found [here.](doc/client.md)
78
+
79
+ The following parameters are configurable for the API Client:
80
+
81
+ | Parameter | Type | Description |
82
+ | --- | --- | --- |
83
+ | `environment` | Environment | The API environment. <br> **Default: `Environment.PRODUCTION`** |
84
+ | `connection` | `Faraday::Connection` | The Faraday connection object passed by the SDK user for making requests |
85
+ | `adapter` | `Faraday::Adapter` | The Faraday adapter object passed by the SDK user for performing http requests |
86
+ | `timeout` | `Float` | The value to use for connection timeout. <br> **Default: 60** |
87
+ | `max_retries` | `Integer` | The number of times to retry an endpoint call if it fails. <br> **Default: 0** |
88
+ | `retry_interval` | `Float` | Pause in seconds between retries. <br> **Default: 1** |
89
+ | `backoff_factor` | `Float` | The amount to multiply each successive retry's interval amount by in order to provide backoff. <br> **Default: 2** |
90
+ | `retry_statuses` | `Array` | A list of HTTP statuses to retry. <br> **Default: [408, 413, 429, 500, 502, 503, 504, 521, 522, 524]** |
91
+ | `retry_methods` | `Array` | A list of HTTP methods to retry. <br> **Default: %i[get put]** |
92
+
93
+ The API client can be initialized as follows:
94
+
95
+ ```ruby
96
+ client = ApimaticCalculator::Client.new(
97
+ environment: Environment::PRODUCTION,
98
+ )
99
+ ```
100
+
101
+ ## List of APIs
102
+
103
+ * [Simple Calculator](doc/controllers/simple-calculator.md)
104
+
105
+ ## Classes Documentation
106
+
107
+ * [Utility Classes](doc/utility-classes.md)
108
+ * [HttpResponse](doc/http-response.md)
109
+ * [HttpRequest](doc/http-request.md)
110
+
@@ -0,0 +1,449 @@
1
+ # apimatic_calculator
2
+ #
3
+ # This file was automatically generated by APIMATIC v2.0
4
+ # ( https://apimatic.io ).
5
+
6
+ module ApimaticCalculator
7
+ # API utility class
8
+ class APIHelper
9
+ # Serializes an array parameter (creates key value pairs).
10
+ # @param [String] The name of the parameter.
11
+ # @param [Array] The value of the parameter.
12
+ # @param [String] The format of the serialization.
13
+ def self.serialize_array(key, array, formatting: 'indexed')
14
+ tuples = []
15
+
16
+ tuples += case formatting
17
+ when 'csv'
18
+ [[key, array.map { |element| CGI.escape(element.to_s) }.join(',')]]
19
+ when 'psv'
20
+ [[key, array.map { |element| CGI.escape(element.to_s) }.join('|')]]
21
+ when 'tsv'
22
+ [[key, array.map { |element| CGI.escape(element.to_s) }.join("\t")]]
23
+ else
24
+ array.map { |element| [key, element] }
25
+ end
26
+ tuples
27
+ end
28
+
29
+ # Replaces template parameters in the given url.
30
+ # @param [String] The query string builder to replace the template
31
+ # parameters.
32
+ # @param [Hash] The parameters to replace in the url.
33
+ def self.append_url_with_template_parameters(query_builder, parameters)
34
+ # perform parameter validation
35
+ unless query_builder.instance_of? String
36
+ raise ArgumentError, 'Given value for parameter \"query_builder\" is
37
+ invalid.'
38
+ end
39
+
40
+ # Return if there are no parameters to replace.
41
+ return query_builder if parameters.nil?
42
+
43
+ parameters.each do |key, val|
44
+ if val.nil?
45
+ replace_value = ''
46
+ elsif val['value'].instance_of? Array
47
+ if val['encode'] == true
48
+ val['value'].map! { |element| CGI.escape(element.to_s) }
49
+ else
50
+ val['value'].map!(&:to_s)
51
+ end
52
+ replace_value = val['value'].join('/')
53
+ else
54
+ replace_value = if val['encode'] == true
55
+ CGI.escape(val['value'].to_s)
56
+ else
57
+ val['value'].to_s
58
+ end
59
+ end
60
+
61
+ # Find the template parameter and replace it with its value.
62
+ query_builder = query_builder.gsub("{#{key}}", replace_value)
63
+ end
64
+ query_builder
65
+ end
66
+
67
+ # Appends the given set of parameters to the given query string.
68
+ # @param [String] The query string builder to add the query parameters to.
69
+ # @param [Hash] The parameters to append.
70
+ def self.append_url_with_query_parameters(query_builder, parameters)
71
+ # Perform parameter validation.
72
+ unless query_builder.instance_of? String
73
+ raise ArgumentError, 'Given value for parameter \"query_builder\"
74
+ is invalid.'
75
+ end
76
+
77
+ # Return if there are no parameters to replace.
78
+ return query_builder if parameters.nil?
79
+
80
+ array_serialization = 'indexed'
81
+ parameters = process_complex_types_parameters(parameters, array_serialization)
82
+
83
+ parameters.each do |key, value|
84
+ seperator = query_builder.include?('?') ? '&' : '?'
85
+ unless value.nil?
86
+ if value.instance_of? Array
87
+ value.compact!
88
+ APIHelper.serialize_array(
89
+ key, value, formatting: array_serialization
90
+ ).each do |element|
91
+ seperator = query_builder.include?('?') ? '&' : '?'
92
+ query_builder += "#{seperator}#{element[0]}=#{element[1]}"
93
+ end
94
+ else
95
+ query_builder += "#{seperator}#{key}=#{CGI.escape(value.to_s)}"
96
+ end
97
+ end
98
+ end
99
+ query_builder
100
+ end
101
+
102
+ # Validates and processes the given Url.
103
+ # @param [String] The given Url to process.
104
+ # @return [String] Pre-processed Url as string.
105
+ def self.clean_url(url)
106
+ # Perform parameter validation.
107
+ raise ArgumentError, 'Invalid Url.' unless url.instance_of? String
108
+
109
+ # Ensure that the urls are absolute.
110
+ matches = url.match(%r{^(https?://[^/]+)})
111
+ raise ArgumentError, 'Invalid Url format.' if matches.nil?
112
+
113
+ # Get the http protocol match.
114
+ protocol = matches[1]
115
+
116
+ # Check if parameters exist.
117
+ index = url.index('?')
118
+
119
+ # Remove redundant forward slashes.
120
+ query = url[protocol.length...(!index.nil? ? index : url.length)]
121
+ query.gsub!(%r{//+}, '/')
122
+
123
+ # Get the parameters.
124
+ parameters = !index.nil? ? url[url.index('?')...url.length] : ''
125
+
126
+ # Return processed url.
127
+ protocol + query + parameters
128
+ end
129
+
130
+ # Parses JSON string.
131
+ # @param [String] A JSON string.
132
+ def self.json_deserialize(json)
133
+ JSON.parse(json)
134
+ rescue StandardError
135
+ raise TypeError, 'Server responded with invalid JSON.'
136
+ end
137
+
138
+ # Parses JSON string.
139
+ # @param [object] The object to serialize.
140
+ def self.json_serialize(obj)
141
+ serializable_types.map { |x| obj.is_a? x }.any? ? obj.to_s : obj.to_json
142
+ end
143
+
144
+ # Removes elements with empty values from a hash.
145
+ # @param [Hash] The hash to clean.
146
+ def self.clean_hash(hash)
147
+ hash.delete_if { |_key, value| value.to_s.strip.empty? }
148
+ end
149
+
150
+ # Form encodes a hash of parameters.
151
+ # @param [Hash] The hash of parameters to encode.
152
+ # @return [Hash] A hash with the same parameters form encoded.
153
+ def self.form_encode_parameters(form_parameters)
154
+ array_serialization = 'indexed'
155
+ encoded = {}
156
+ form_parameters.each do |key, value|
157
+ encoded.merge!(APIHelper.form_encode(value, key, formatting:
158
+ array_serialization))
159
+ end
160
+ encoded
161
+ end
162
+
163
+ # Process complex types in query_params.
164
+ # @param [Hash] The hash of query parameters.
165
+ # @return [Hash] A hash with the processed query parameters.
166
+ def self.process_complex_types_parameters(query_parameters, array_serialization)
167
+ processed_params = {}
168
+ query_parameters.each do |key, value|
169
+ processed_params.merge!(APIHelper.form_encode(value, key, formatting:
170
+ array_serialization))
171
+ end
172
+ processed_params
173
+ end
174
+
175
+ def self.custom_merge(a, b)
176
+ x = {}
177
+ a.each do |key, value_a|
178
+ b.each do |k, value_b|
179
+ next unless key == k
180
+
181
+ x[k] = []
182
+ if value_a.instance_of? Array
183
+ value_a.each do |v|
184
+ x[k].push(v)
185
+ end
186
+ else
187
+ x[k].push(value_a)
188
+ end
189
+ if value_b.instance_of? Array
190
+ value_b.each do |v|
191
+ x[k].push(v)
192
+ end
193
+ else
194
+ x[k].push(value_b)
195
+ end
196
+ a.delete(k)
197
+ b.delete(k)
198
+ end
199
+ end
200
+ x.merge!(a)
201
+ x.merge!(b)
202
+ x
203
+ end
204
+
205
+ # Form encodes an object.
206
+ # @param [Dynamic] An object to form encode.
207
+ # @param [String] The name of the object.
208
+ # @return [Hash] A form encoded representation of the object in the form
209
+ # of a hash.
210
+ def self.form_encode(obj, instance_name, formatting: 'indexed')
211
+ retval = {}
212
+
213
+ # If this is a structure, resolve it's field names.
214
+ obj = obj.to_hash if obj.is_a? BaseModel
215
+
216
+ # Create a form encoded hash for this object.
217
+ if obj.nil?
218
+ nil
219
+ elsif obj.instance_of? Array
220
+ if formatting == 'indexed'
221
+ obj.each_with_index do |value, index|
222
+ retval.merge!(APIHelper.form_encode(value, "#{instance_name}[#{index}]"))
223
+ end
224
+ elsif APIHelper.serializable_types.map { |x| obj[0].is_a? x }.any?
225
+ obj.each do |value|
226
+ abc = if formatting == 'unindexed'
227
+ APIHelper.form_encode(value, "#{instance_name}[]",
228
+ formatting: formatting)
229
+ else
230
+ APIHelper.form_encode(value, instance_name,
231
+ formatting: formatting)
232
+ end
233
+ retval = APIHelper.custom_merge(retval, abc)
234
+ end
235
+ else
236
+ obj.each_with_index do |value, index|
237
+ retval.merge!(APIHelper.form_encode(value, "#{instance_name}[#{index}]",
238
+ formatting: formatting))
239
+ end
240
+ end
241
+ elsif obj.instance_of? Hash
242
+ obj.each do |key, value|
243
+ retval.merge!(APIHelper.form_encode(value, "#{instance_name}[#{key}]",
244
+ formatting: formatting))
245
+ end
246
+ elsif obj.instance_of? File
247
+ retval[instance_name] = UploadIO.new(
248
+ obj, 'application/octet-stream', File.basename(obj.path)
249
+ )
250
+ else
251
+ retval[instance_name] = obj
252
+ end
253
+ retval
254
+ end
255
+
256
+ # Retrieves a field from a Hash/Array based on an Array of keys/indexes
257
+ # @param [Hash, Array] The hash to extract data from
258
+ # @param [Array<String, Integer>] The keys/indexes to use
259
+ # @return [Object] The extracted value
260
+ def self.map_response(obj, keys)
261
+ val = obj
262
+ begin
263
+ keys.each do |key|
264
+ val = if val.is_a? Array
265
+ if key.to_i.to_s == key
266
+ val[key.to_i]
267
+ else
268
+ val = nil
269
+ end
270
+ else
271
+ val.fetch(key.to_sym)
272
+ end
273
+ end
274
+ rescue NoMethodError, TypeError, IndexError
275
+ val = nil
276
+ end
277
+ val
278
+ end
279
+
280
+ # Deserialize the value against the template (group of types).
281
+ # @param [String] The value to be deserialized.
282
+ # @param [String] The parameter indicates the type-combination
283
+ # against which the value will be mapped (oneOf(Integer, String)).
284
+ def self.deserialize(template, value)
285
+ decoded = APIHelper.json_deserialize(value)
286
+ map_types(decoded, template)
287
+ end
288
+
289
+ # Validates and processes the value against the template(group of types).
290
+ # @param [String] The value to be mapped against the template.
291
+ # @param [String] The parameter indicates the group of types (oneOf(Integer, String)).
292
+ # @param [String] The parameter indicates the group (oneOf|anyOf).
293
+ def self.map_types(value, template, group_name: nil)
294
+ result_value = nil
295
+ matches = 0
296
+ types = []
297
+ group_name = template.partition('(').first if group_name.nil? && template.match?(/anyOf|oneOf/)
298
+
299
+ return if value.nil?
300
+
301
+ if template.end_with?('{}') || template.end_with?('[]')
302
+ types = template.split(group_name, 2).last.gsub(/\s+/, '').split
303
+ else
304
+ template = template.split(group_name, 2).last.delete_prefix('(').delete_suffix(')')
305
+ types = template.scan(/(anyOf|oneOf)[(]([^[)]]*)[)]/).flatten.combination(2).map { |a, b| "#{a}(#{b})" }
306
+ types.each { |t| template = template.gsub(", #{t}", '') }
307
+ types = template.gsub(/\s+/, '').split(',').push(*types)
308
+ end
309
+ types.each do |element|
310
+ if element.match?(/^(oneOf|anyOf)[(].*$/)
311
+ begin
312
+ result_value = map_types(value, element, matches)
313
+ matches += 1
314
+ rescue ValidationException
315
+ next
316
+ end
317
+ elsif element.end_with?('{}')
318
+ result_value, matches = map_hash_type(value, element, group_name, matches)
319
+ elsif element.end_with?('[]')
320
+ result_value, matches = map_array_type(value, element, group_name, matches)
321
+ else
322
+ begin
323
+ result_value, matches = map_type(value, element, group_name, matches)
324
+ rescue StandardError
325
+ next
326
+ end
327
+ end
328
+ break if group_name == 'anyOf' && matches == 1
329
+ end
330
+ raise ValidationException.new(value, template) unless matches == 1
331
+
332
+ value = result_value unless result_value.nil?
333
+ value
334
+ end
335
+
336
+ # Validates and processes the value against the [Hash] type.
337
+ # @param [String] The value to be mapped against the type.
338
+ # @param [String] The possible type of the value.
339
+ # @param [String] The parameter indicates the group (oneOf|anyOf).
340
+ # @param [Integer] The parameter indicates the number of matches of value against types.
341
+ def self.map_hash_type(value, type, group_name, matches)
342
+ if value.instance_of? Hash
343
+ decoded = {}
344
+ value.each do |key, val|
345
+ type = type.chomp('{}').to_s
346
+ val = map_types(val, type, group_name: group_name)
347
+ decoded[key] = val unless type.empty?
348
+ rescue ValidationException
349
+ next
350
+ end
351
+ matches += 1 if decoded.length == value.length
352
+ value = decoded unless decoded.empty?
353
+ end
354
+ [value, matches]
355
+ end
356
+
357
+ # Validates and processes the value against the [Array] type.
358
+ # @param [String] The value to be mapped against the type.
359
+ # @param [String] The possible type of the value.
360
+ # @param [String] The parameter indicates the group (oneOf|anyOf).
361
+ # @param [Integer] The parameter indicates the number of matches of value against types.
362
+ def self.map_array_type(value, type, group_name, matches)
363
+ if value.instance_of? Array
364
+ decoded = []
365
+ value.each do |val|
366
+ type = type.chomp('[]').to_s
367
+ val = map_types(val, type, group_name: group_name)
368
+ decoded.append(val) unless type.empty?
369
+ rescue ValidationException
370
+ next
371
+ end
372
+ matches += 1 if decoded.length == value.length
373
+ value = decoded unless decoded.empty?
374
+ end
375
+ [value, matches]
376
+ end
377
+
378
+ # Validates and processes the value against the type.
379
+ # @param [String] The value to be mapped against the type.
380
+ # @param [String] The possible type of the value.
381
+ # @param [String] The parameter indicates the group (oneOf|anyOf).
382
+ # @param [Integer] The parameter indicates the number of matches of value against types.
383
+ def self.map_type(value, type, _group_name, matches)
384
+ if ApimaticCalculator.constants.select do |c|
385
+ ApimaticCalculator.const_get(c).to_s == "ApimaticCalculator::#{type}"
386
+ end.empty?
387
+ value, matches = map_data_type(value, type, matches)
388
+ else
389
+ value, matches = map_complex_type(value, type, matches)
390
+ end
391
+ [value, matches]
392
+ end
393
+
394
+ # Validates and processes the value against the complex types.
395
+ # @param [String] The value to be mapped against the type.
396
+ # @param [String] The possible type of the value.
397
+ # @param [Integer] The parameter indicates the number of matches of value against types.
398
+ def self.map_complex_type(value, type, matches)
399
+ obj = ApimaticCalculator.const_get(type)
400
+ value = if obj.respond_to? 'from_hash'
401
+ obj.send('from_hash', value)
402
+ else
403
+ obj.constants.find { |k| obj.const_get(k) == value }
404
+ end
405
+ matches += 1 unless value.nil?
406
+ [value, matches]
407
+ end
408
+
409
+ # Validates and processes the value against the data types.
410
+ # @param [String] The value to be mapped against the type.
411
+ # @param [String] The possible type of the value.
412
+ # @param [Integer] The parameter indicates the number of matches of value against types.
413
+ def self.map_data_type(value, element, matches)
414
+ element = element.split('|').map { |x| Object.const_get x }
415
+ matches += 1 if element.all? { |x| APIHelper.data_types.include?(x) } &&
416
+ element.any? { |x| (value.instance_of? x) || (value.class.ancestors.include? x) }
417
+ [value, matches]
418
+ end
419
+
420
+ # Validates the value against the template(group of types).
421
+ # @param [String] The value to be mapped against the type.
422
+ # @param [String] The parameter indicates the group of types (oneOf(Integer, String)).
423
+ def self.validate_types(value, template)
424
+ map_types(APIHelper.json_deserialize(value.to_json), template)
425
+ end
426
+
427
+ # Get content-type depending on the value
428
+ def self.get_content_type(value)
429
+ if serializable_types.map { |x| value.is_a? x }.any?
430
+ 'text/plain; charset=utf-8'
431
+ else
432
+ 'application/json; charset=utf-8'
433
+ end
434
+ end
435
+
436
+ # Array of serializable types
437
+ def self.serializable_types
438
+ [String, Numeric, TrueClass,
439
+ FalseClass, Date, DateTime]
440
+ end
441
+
442
+ # Array of supported data types
443
+ def self.data_types
444
+ [String, Float, Integer,
445
+ TrueClass, FalseClass, Date,
446
+ DateTime, Array, Hash, Object]
447
+ end
448
+ end
449
+ end
@@ -0,0 +1,35 @@
1
+ # apimatic_calculator
2
+ #
3
+ # This file was automatically generated by APIMATIC v2.0
4
+ # ( https://apimatic.io ).
5
+
6
+ module ApimaticCalculator
7
+ # apimatic_calculator client class.
8
+ class Client
9
+ attr_reader :config
10
+
11
+ # Access to simple_calculator controller.
12
+ # @return [SimpleCalculatorController] Returns the controller instance.
13
+ def simple_calculator
14
+ @simple_calculator ||= SimpleCalculatorController.new config
15
+ end
16
+
17
+ def initialize(connection: nil, adapter: :net_http_persistent, timeout: 60,
18
+ max_retries: 0, retry_interval: 1, backoff_factor: 2,
19
+ retry_statuses: [408, 413, 429, 500, 502, 503, 504, 521, 522, 524],
20
+ retry_methods: %i[get put],
21
+ environment: Environment::PRODUCTION, config: nil)
22
+ @config = if config.nil?
23
+ Configuration.new(connection: connection, adapter: adapter,
24
+ timeout: timeout, max_retries: max_retries,
25
+ retry_interval: retry_interval,
26
+ backoff_factor: backoff_factor,
27
+ retry_statuses: retry_statuses,
28
+ retry_methods: retry_methods,
29
+ environment: environment)
30
+ else
31
+ config
32
+ end
33
+ end
34
+ end
35
+ end