tangocard-raas 1.1.2

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.
Files changed (50) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE +175 -0
  3. data/README.md +542 -0
  4. data/lib/raas.rb +61 -0
  5. data/lib/raas/api_helper.rb +181 -0
  6. data/lib/raas/configuration.rb +72 -0
  7. data/lib/raas/controllers/accounts_controller.rb +189 -0
  8. data/lib/raas/controllers/base_controller.rb +68 -0
  9. data/lib/raas/controllers/catalog_controller.rb +47 -0
  10. data/lib/raas/controllers/customers_controller.rb +137 -0
  11. data/lib/raas/controllers/exchange_rates_controller.rb +36 -0
  12. data/lib/raas/controllers/orders_controller.rb +199 -0
  13. data/lib/raas/controllers/status_controller.rb +46 -0
  14. data/lib/raas/exceptions/api_exception.rb +16 -0
  15. data/lib/raas/exceptions/raas_client_exception.rb +58 -0
  16. data/lib/raas/exceptions/raas_generic_exception.rb +53 -0
  17. data/lib/raas/exceptions/raas_server_exception.rb +58 -0
  18. data/lib/raas/http/auth/basic_auth.rb +17 -0
  19. data/lib/raas/http/faraday_client.rb +43 -0
  20. data/lib/raas/http/http_call_back.rb +17 -0
  21. data/lib/raas/http/http_client.rb +84 -0
  22. data/lib/raas/http/http_context.rb +15 -0
  23. data/lib/raas/http/http_method_enum.rb +7 -0
  24. data/lib/raas/http/http_request.rb +44 -0
  25. data/lib/raas/http/http_response.rb +19 -0
  26. data/lib/raas/models/account_model.rb +88 -0
  27. data/lib/raas/models/account_summary_model.rb +61 -0
  28. data/lib/raas/models/base_model.rb +32 -0
  29. data/lib/raas/models/brand_model.rb +129 -0
  30. data/lib/raas/models/catalog_model.rb +47 -0
  31. data/lib/raas/models/create_account_request_model.rb +51 -0
  32. data/lib/raas/models/create_customer_request_model.rb +42 -0
  33. data/lib/raas/models/create_order_request_model.rb +132 -0
  34. data/lib/raas/models/currency_breakdown_model.rb +69 -0
  35. data/lib/raas/models/customer_model.rb +75 -0
  36. data/lib/raas/models/exchange_rate_model.rb +61 -0
  37. data/lib/raas/models/exchange_rate_response_model.rb +47 -0
  38. data/lib/raas/models/get_orders_response_model.rb +47 -0
  39. data/lib/raas/models/item_model.rb +133 -0
  40. data/lib/raas/models/name_email_model.rb +51 -0
  41. data/lib/raas/models/order_model.rb +187 -0
  42. data/lib/raas/models/page_model.rb +60 -0
  43. data/lib/raas/models/raas_client_error_model.rb +60 -0
  44. data/lib/raas/models/raas_server_error_model.rb +42 -0
  45. data/lib/raas/models/resend_order_response_model.rb +43 -0
  46. data/lib/raas/models/reward_credential_model.rb +51 -0
  47. data/lib/raas/models/reward_model.rb +56 -0
  48. data/lib/raas/models/system_status_response_model.rb +33 -0
  49. data/lib/raas/raas_client.rb +53 -0
  50. metadata +175 -0
data/lib/raas.rb ADDED
@@ -0,0 +1,61 @@
1
+ # This file was automatically generated for Tango Card, Inc. by APIMATIC v2.0 ( https://apimatic.io ).
2
+ require 'date'
3
+ require 'json'
4
+ require 'faraday'
5
+ require 'certifi'
6
+ require 'logging'
7
+
8
+ require_relative 'raas/api_helper.rb'
9
+ require_relative 'raas/raas_client.rb'
10
+
11
+ # Http
12
+ require_relative 'raas/http/http_call_back.rb'
13
+ require_relative 'raas/http/http_client.rb'
14
+ require_relative 'raas/http/http_method_enum.rb'
15
+ require_relative 'raas/http/http_request.rb'
16
+ require_relative 'raas/http/http_response.rb'
17
+ require_relative 'raas/http/http_context.rb'
18
+ require_relative 'raas/http/faraday_client.rb'
19
+ require_relative 'raas/http/auth/basic_auth.rb'
20
+
21
+ # Models
22
+ require_relative 'raas/models/base_model.rb'
23
+ require_relative 'raas/models/account_summary_model.rb'
24
+ require_relative 'raas/models/customer_model.rb'
25
+ require_relative 'raas/models/account_model.rb'
26
+ require_relative 'raas/models/create_customer_request_model.rb'
27
+ require_relative 'raas/models/create_account_request_model.rb'
28
+ require_relative 'raas/models/raas_server_error_model.rb'
29
+ require_relative 'raas/models/system_status_response_model.rb'
30
+ require_relative 'raas/models/catalog_model.rb'
31
+ require_relative 'raas/models/brand_model.rb'
32
+ require_relative 'raas/models/item_model.rb'
33
+ require_relative 'raas/models/order_model.rb'
34
+ require_relative 'raas/models/currency_breakdown_model.rb'
35
+ require_relative 'raas/models/name_email_model.rb'
36
+ require_relative 'raas/models/exchange_rate_response_model.rb'
37
+ require_relative 'raas/models/get_orders_response_model.rb'
38
+ require_relative 'raas/models/resend_order_response_model.rb'
39
+ require_relative 'raas/models/create_order_request_model.rb'
40
+ require_relative 'raas/models/reward_model.rb'
41
+ require_relative 'raas/models/reward_credential_model.rb'
42
+ require_relative 'raas/models/exchange_rate_model.rb'
43
+ require_relative 'raas/models/page_model.rb'
44
+ require_relative 'raas/models/raas_client_error_model.rb'
45
+
46
+ # Exceptions
47
+ require_relative 'raas/exceptions/api_exception.rb'
48
+ require_relative 'raas/exceptions/raas_generic_exception.rb'
49
+ require_relative 'raas/exceptions/raas_client_exception.rb'
50
+ require_relative 'raas/exceptions/raas_server_exception.rb'
51
+
52
+ require_relative 'raas/configuration.rb'
53
+
54
+ # Controllers
55
+ require_relative 'raas/controllers/base_controller.rb'
56
+ require_relative 'raas/controllers/accounts_controller.rb'
57
+ require_relative 'raas/controllers/orders_controller.rb'
58
+ require_relative 'raas/controllers/catalog_controller.rb'
59
+ require_relative 'raas/controllers/exchange_rates_controller.rb'
60
+ require_relative 'raas/controllers/status_controller.rb'
61
+ require_relative 'raas/controllers/customers_controller.rb'
@@ -0,0 +1,181 @@
1
+ # This file was automatically generated for Tango Card, Inc. by APIMATIC v2.0 ( https://apimatic.io ).
2
+
3
+ module Raas
4
+ class APIHelper
5
+ # Serializes an array parameter (creates key value pairs)
6
+ # @param [String] The name of the parameter
7
+ # @param [Array] The value of the parameter
8
+ # @param [String] The format of the serialization
9
+ def self.serialize_array(key, array, formatting: 'indexed')
10
+ tuples = []
11
+
12
+ if formatting == 'unindexed'
13
+ tuples += array.map { |element| ["#{key}[]", element] }
14
+ elsif formatting == 'indexed'
15
+ tuples += array.map.with_index { |element, index| ["#{key}[#{index}]", element] }
16
+ elsif formatting == 'plain'
17
+ tuples += array.map { |element| [key, element] }
18
+ else
19
+ raise ArgumentError, 'Invalid format provided.'
20
+ end
21
+ tuples
22
+ end
23
+
24
+ # Replaces template parameters in the given url
25
+ # @param [String] The query string builder to replace the template parameters
26
+ # @param [Hash] The parameters to replace in the url
27
+ def self.append_url_with_template_parameters(query_builder, parameters)
28
+ # perform parameter validation
29
+ raise ArgumentError, 'Given value for parameter \"query_builder\" is invalid.' unless query_builder.instance_of? String
30
+
31
+ # return if there are no parameters to replace
32
+ return query_builder if parameters.nil?
33
+
34
+ # iterate and append parameters
35
+ parameters.each do |key, value|
36
+ replace_value = ''
37
+
38
+ if value.nil?
39
+ replace_value = ''
40
+ elsif value.instance_of? Array
41
+ value.map! { |element| CGI.escape(element.to_s) }
42
+ replace_value = value.join('/')
43
+ else
44
+ replace_value = CGI.escape(value.to_s)
45
+ end
46
+
47
+ # find the template parameter and replace it with its value
48
+ query_builder = query_builder.gsub('{' + key.to_s + '}', replace_value)
49
+ end
50
+ query_builder
51
+ end
52
+
53
+ # Appends the given set of parameters to the given query string
54
+ # @param [String] The query string builder to add the query parameters to
55
+ # @param [Hash] The parameters to append
56
+ # @param [String] The format of array parameter serialization
57
+ def self.append_url_with_query_parameters(query_builder, parameters, array_serialization: 'indexed')
58
+ # perform parameter validation
59
+ raise ArgumentError, 'Given value for parameter \"query_builder\" is invalid.' unless query_builder.instance_of? String
60
+
61
+ # return if there are no parameters to replace
62
+ return query_builder if parameters.nil?
63
+
64
+ parameters.each do |key, value|
65
+ seperator = (query_builder.include? '?') ? '&' : '?'
66
+ if not value.nil?
67
+ if value.instance_of? Array
68
+ value.compact!
69
+ if array_serialization == 'csv'
70
+ query_builder += "#{seperator}#{key}=#{value.map { |element| CGI.escape(element.to_s) }.join(',')}"
71
+ elsif array_serialization == 'psv'
72
+ query_builder += "#{seperator}#{key}=#{value.map { |element| CGI.escape(element.to_s) }.join('|')}"
73
+ elsif array_serialization == 'tsv'
74
+ query_builder += "#{seperator}#{key}=#{value.map { |element| CGI.escape(element.to_s) }.join('\t')}"
75
+ else
76
+ query_builder += "#{seperator}#{APIHelper.serialize_array(key, value, formatting: array_serialization).
77
+ map { |k, v| "#{k}=#{CGI.escape(v.to_s)}" }.join('&')}"
78
+ end
79
+ else
80
+ query_builder += "#{seperator}#{key}=#{CGI.escape(value.to_s)}"
81
+ end
82
+ end
83
+ end
84
+ query_builder
85
+ end
86
+
87
+ # Validates and processes the given Url
88
+ # @param [String] The given Url to process
89
+ # @return [String] Pre-processed Url as string
90
+ def self.clean_url(url)
91
+ # perform parameter validation
92
+ raise ArgumentError, 'Invalid Url.' unless url.instance_of? String
93
+
94
+ # ensure that the urls are absolute
95
+ matches = url.match(%r{^(https?:\/\/[^\/]+)})
96
+ raise ArgumentError, 'Invalid Url format.' if matches.nil?
97
+
98
+ # get the http protocol match
99
+ protocol = matches[1]
100
+
101
+ # check if parameters exist
102
+ index = url.index('?')
103
+
104
+ # remove redundant forward slashes
105
+ query = url[protocol.length...(!index.nil? ? index : url.length)]
106
+ query.gsub!(%r{\/\/+}, '/')
107
+
108
+ # get the parameters
109
+ parameters = !index.nil? ? url[url.index('?')...url.length] : ''
110
+
111
+ # return processed url
112
+ protocol + query + parameters
113
+ end
114
+
115
+ # Parses JSON string.
116
+ # @param [String] A JSON string.
117
+ def self.json_deserialize(json)
118
+ return JSON.parse(json)
119
+ rescue
120
+ raise TypeError, 'Server responded with invalid JSON.'
121
+ end
122
+
123
+ # Removes elements with empty values from a hash.
124
+ # @param [Hash] The hash to clean.
125
+ def self.clean_hash(hash)
126
+ hash.delete_if { |_key, value| value.to_s.strip.empty? }
127
+ end
128
+
129
+ # Form encodes a hash of parameters.
130
+ # @param [Hash] The hash of parameters to encode.
131
+ # @return [Hash] A hash with the same parameters form encoded.
132
+ def self.form_encode_parameters(form_parameters)
133
+ encoded = {}
134
+ form_parameters.each do |key, value|
135
+ encoded.merge!(APIHelper.form_encode(value, key))
136
+ end
137
+ encoded
138
+ end
139
+
140
+ # Form encodes an object.
141
+ # @param [Dynamic] An object to form encode.
142
+ # @param [String] The name of the object.
143
+ # @return [Hash] A form encoded representation of the object in the form of a hash.
144
+ def self.form_encode(obj, instance_name)
145
+ retval = {}
146
+
147
+ # If this is a structure, resolve it's field names.
148
+ obj = obj.to_hash if obj.is_a? BaseModel
149
+
150
+ # Create a form encoded hash for this object.
151
+ if obj.nil?
152
+ nil
153
+ elsif obj.instance_of? Array
154
+ obj.each_with_index do |value, index|
155
+ retval.merge!(APIHelper.form_encode(value, instance_name + '[' + index.to_s + ']'))
156
+ end
157
+ elsif obj.instance_of? Hash
158
+ obj.each do |key, value|
159
+ retval.merge!(APIHelper.form_encode(value, instance_name + '[' + key + ']'))
160
+ end
161
+ else
162
+ retval[instance_name] = obj
163
+ end
164
+ retval
165
+ end
166
+ end
167
+ end
168
+
169
+ # extend types to support to_bool
170
+ module ToBoolean
171
+ def to_bool
172
+ return true if self == true || self.to_s.strip =~ /^(true|yes|y|1)$/i
173
+ return false
174
+ end
175
+ end
176
+
177
+ class NilClass; include ToBoolean; end
178
+ class TrueClass; include ToBoolean; end
179
+ class FalseClass; include ToBoolean; end
180
+ class Numeric; include ToBoolean; end
181
+ class String; include ToBoolean; end
@@ -0,0 +1,72 @@
1
+ # This file was automatically generated for Tango Card, Inc. by APIMATIC v2.0 ( https://apimatic.io ).
2
+
3
+ module Raas
4
+
5
+ Logging.logger.root.appenders = Logging.appenders.stdout
6
+ Logging.logger.root.level = :info
7
+
8
+ class Configuration
9
+ # Set the array parameter serialization method
10
+ # (allowed: indexed, unindexed, plain, csv, tsv, psv)
11
+ @array_serialization = 'indexed'
12
+
13
+ # An enum for SDK environments
14
+ class Environment
15
+ #SANDBOX: Sandbox (Fake) Environment
16
+ #PRODUCTION: Production (Live) Environment
17
+ #QA: Tango Card Internal Use Only
18
+ #GAMMA: Tango Card Internal Use Only
19
+ #LOCAL: Tango Card Internal Use Only
20
+ ENVIRONMENT = [SANDBOX = 0, PRODUCTION = 1, QA = 2, GAMMA = 3, LOCAL = 4]
21
+ end
22
+
23
+ # An enum for API servers
24
+ class Server
25
+ SERVER = [DEFAULT = 0]
26
+ end
27
+
28
+ # The environment in which the SDK is running
29
+ @environment = Environment::SANDBOX
30
+
31
+ # RaaS v2 API Platform Name
32
+ @platform_name = 'QAPlatform2'
33
+
34
+ # RaaS v2 API Platform Key
35
+ @platform_key = 'apYPfT6HNONpDRUj3CLGWYt7gvIHONpDRUYPfT6Hj'
36
+
37
+ # All the environments the SDK can run in
38
+ @environments = {
39
+ Environment::SANDBOX => {
40
+ Server::DEFAULT => 'https://integration-api.tangocard.com/raas/v2',
41
+ },
42
+ Environment::PRODUCTION => {
43
+ Server::DEFAULT => 'https://api.tangocard.com/raas/v2',
44
+ },
45
+ Environment::QA => {
46
+ Server::DEFAULT => 'https://qa-api.tangocard.com/raas/v2',
47
+ },
48
+ Environment::GAMMA => {
49
+ Server::DEFAULT => 'https://gamma-api.tangocard.com/raas/v2',
50
+ },
51
+ Environment::LOCAL => {
52
+ Server::DEFAULT => 'http://raastango.cc:8080/v2',
53
+ },
54
+ }
55
+
56
+ # Generates the appropriate base URI for the environment and the server.
57
+ # @param [Configuration::Server] The server enum for which the base URI is required.
58
+ # @return [String] The base URI.
59
+ def self.get_base_uri(server = Server::DEFAULT)
60
+ environments[environment][server]
61
+ end
62
+
63
+ # The attribute accessors for public properties
64
+ class << self
65
+ attr_accessor :array_serialization
66
+ attr_accessor :environment
67
+ attr_accessor :environments
68
+ attr_accessor :platform_name
69
+ attr_accessor :platform_key
70
+ end
71
+ end
72
+ end
@@ -0,0 +1,189 @@
1
+ # This file was automatically generated for Tango Card, Inc. by APIMATIC v2.0 ( https://apimatic.io ).
2
+
3
+ module Raas
4
+ class AccountsController < BaseController
5
+ @@instance = AccountsController.new
6
+ # Singleton instance of the controller class
7
+ def self.instance
8
+ @@instance
9
+ end
10
+
11
+ # Gets a list of accounts for a given customer
12
+ # @param [String] customer_identifier Required parameter: Customer Identifier
13
+ # @return List of AccountSummaryModel response from the API call
14
+ def get_accounts_by_customer(customer_identifier)
15
+ begin
16
+ @logger.info("get_accounts_by_customer called.")
17
+
18
+ # validate required parameters
19
+ @logger.info("Validating required parameters for get_accounts_by_customer.")
20
+ validate_parameters({
21
+ 'customer_identifier' => customer_identifier
22
+ })
23
+
24
+ # prepare query url
25
+ @logger.info("Preparing query URL for get_accounts_by_customer.")
26
+ _query_builder = Configuration.get_base_uri()
27
+ _query_builder << '/customers/{customerIdentifier}/accounts'
28
+ _query_builder = APIHelper.append_url_with_template_parameters _query_builder, {
29
+ 'customerIdentifier' => customer_identifier
30
+ }
31
+ _query_url = APIHelper.clean_url _query_builder
32
+
33
+ # prepare headers
34
+ @logger.info("Preparing headers for get_accounts_by_customer.")
35
+ _headers = {
36
+ 'accept' => 'application/json'
37
+ }
38
+
39
+ # prepare and execute HttpRequest
40
+ @logger.info('Preparing and executing HttpRequest for get_accounts_by_customer.')
41
+ _request = @http_client.get _query_url, headers: _headers
42
+ BasicAuth.apply(_request)
43
+ _context = execute_request(_request, name: 'get_accounts_by_customer')
44
+ validate_response(_context)
45
+
46
+ # return appropriate response type
47
+ @logger.info("Returning response for get_accounts_by_customer.")
48
+ decoded = APIHelper.json_deserialize(_context.response.raw_body)
49
+ return decoded.map{|element| AccountSummaryModel.from_hash(element)}
50
+
51
+ rescue Exception => e
52
+ @logger.error(e)
53
+ raise e
54
+ end
55
+ end
56
+
57
+ # Get an account
58
+ # @param [String] account_identifier Required parameter: Account Identifier
59
+ # @return AccountModel response from the API call
60
+ def get_account(account_identifier)
61
+ begin
62
+ @logger.info("get_account called.")
63
+
64
+ # validate required parameters
65
+ @logger.info("Validating required parameters for get_account.")
66
+ validate_parameters({
67
+ 'account_identifier' => account_identifier
68
+ })
69
+
70
+ # prepare query url
71
+ @logger.info("Preparing query URL for get_account.")
72
+ _query_builder = Configuration.get_base_uri()
73
+ _query_builder << '/accounts/{accountIdentifier}'
74
+ _query_builder = APIHelper.append_url_with_template_parameters _query_builder, {
75
+ 'accountIdentifier' => account_identifier
76
+ }
77
+ _query_url = APIHelper.clean_url _query_builder
78
+
79
+ # prepare headers
80
+ @logger.info("Preparing headers for get_account.")
81
+ _headers = {
82
+ 'accept' => 'application/json'
83
+ }
84
+
85
+ # prepare and execute HttpRequest
86
+ @logger.info('Preparing and executing HttpRequest for get_account.')
87
+ _request = @http_client.get _query_url, headers: _headers
88
+ BasicAuth.apply(_request)
89
+ _context = execute_request(_request, name: 'get_account')
90
+ validate_response(_context)
91
+
92
+ # return appropriate response type
93
+ @logger.info("Returning response for get_account.")
94
+ decoded = APIHelper.json_deserialize(_context.response.raw_body)
95
+ return AccountModel.from_hash(decoded)
96
+
97
+ rescue Exception => e
98
+ @logger.error(e)
99
+ raise e
100
+ end
101
+ end
102
+
103
+ # Create an account under a given customer
104
+ # @param [String] customer_identifier Required parameter: Customer Identifier
105
+ # @param [CreateAccountRequestModel] body Required parameter: Request Body
106
+ # @return AccountModel response from the API call
107
+ def create_account(customer_identifier,
108
+ body)
109
+ begin
110
+ @logger.info("create_account called.")
111
+
112
+ # validate required parameters
113
+ @logger.info("Validating required parameters for create_account.")
114
+ validate_parameters({
115
+ 'customer_identifier' => customer_identifier,
116
+ 'body' => body
117
+ })
118
+
119
+ # prepare query url
120
+ @logger.info("Preparing query URL for create_account.")
121
+ _query_builder = Configuration.get_base_uri()
122
+ _query_builder << '/customers/{customerIdentifier}/accounts'
123
+ _query_builder = APIHelper.append_url_with_template_parameters _query_builder, {
124
+ 'customerIdentifier' => customer_identifier
125
+ }
126
+ _query_url = APIHelper.clean_url _query_builder
127
+
128
+ # prepare headers
129
+ @logger.info("Preparing headers for create_account.")
130
+ _headers = {
131
+ 'accept' => 'application/json',
132
+ 'content-type' => 'application/json; charset=utf-8'
133
+ }
134
+
135
+ # prepare and execute HttpRequest
136
+ @logger.info('Preparing and executing HttpRequest for create_account.')
137
+ _request = @http_client.post _query_url, headers: _headers, parameters: body.to_json
138
+ BasicAuth.apply(_request)
139
+ _context = execute_request(_request, name: 'create_account')
140
+ validate_response(_context)
141
+
142
+ # return appropriate response type
143
+ @logger.info("Returning response for create_account.")
144
+ decoded = APIHelper.json_deserialize(_context.response.raw_body)
145
+ return AccountModel.from_hash(decoded)
146
+
147
+ rescue Exception => e
148
+ @logger.error(e)
149
+ raise e
150
+ end
151
+ end
152
+
153
+ # Gets all accounts under the platform
154
+ # @return List of AccountModel response from the API call
155
+ def get_all_accounts
156
+ begin
157
+ @logger.info("get_all_accounts called.")
158
+
159
+ # prepare query url
160
+ @logger.info("Preparing query URL for get_all_accounts.")
161
+ _query_builder = Configuration.get_base_uri()
162
+ _query_builder << '/accounts'
163
+ _query_url = APIHelper.clean_url _query_builder
164
+
165
+ # prepare headers
166
+ @logger.info("Preparing headers for get_all_accounts.")
167
+ _headers = {
168
+ 'accept' => 'application/json'
169
+ }
170
+
171
+ # prepare and execute HttpRequest
172
+ @logger.info('Preparing and executing HttpRequest for get_all_accounts.')
173
+ _request = @http_client.get _query_url, headers: _headers
174
+ BasicAuth.apply(_request)
175
+ _context = execute_request(_request, name: 'get_all_accounts')
176
+ validate_response(_context)
177
+
178
+ # return appropriate response type
179
+ @logger.info("Returning response for get_all_accounts.")
180
+ decoded = APIHelper.json_deserialize(_context.response.raw_body)
181
+ return decoded.map{|element| AccountModel.from_hash(element)}
182
+
183
+ rescue Exception => e
184
+ @logger.error(e)
185
+ raise e
186
+ end
187
+ end
188
+ end
189
+ end