moneykit 0.0.1

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 (214) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +291 -0
  3. data/lib/moneykit/api/access_token_api.rb +224 -0
  4. data/lib/moneykit/api/account_numbers_api.rb +88 -0
  5. data/lib/moneykit/api/accounts_api.rb +301 -0
  6. data/lib/moneykit/api/identity_api.rb +91 -0
  7. data/lib/moneykit/api/institutions_api.rb +234 -0
  8. data/lib/moneykit/api/link_session_api.rb +164 -0
  9. data/lib/moneykit/api/links_api.rb +297 -0
  10. data/lib/moneykit/api/products_api.rb +99 -0
  11. data/lib/moneykit/api/transactions_api.rb +297 -0
  12. data/lib/moneykit/api/users_api.rb +262 -0
  13. data/lib/moneykit/api_client.rb +428 -0
  14. data/lib/moneykit/api_error.rb +58 -0
  15. data/lib/moneykit/configuration.rb +404 -0
  16. data/lib/moneykit/models/account.rb +301 -0
  17. data/lib/moneykit/models/account_balances.rb +279 -0
  18. data/lib/moneykit/models/account_group.rb +237 -0
  19. data/lib/moneykit/models/account_identity.rb +318 -0
  20. data/lib/moneykit/models/account_numbers.rb +241 -0
  21. data/lib/moneykit/models/account_numbers_link_product.rb +246 -0
  22. data/lib/moneykit/models/account_numbers_product_settings.rb +234 -0
  23. data/lib/moneykit/models/account_type.rb +49 -0
  24. data/lib/moneykit/models/account_with_account_numbers.rb +315 -0
  25. data/lib/moneykit/models/accounts_link_product.rb +232 -0
  26. data/lib/moneykit/models/ach_number.rb +251 -0
  27. data/lib/moneykit/models/address.rb +277 -0
  28. data/lib/moneykit/models/api_error_auth_expired_access_token_response.rb +277 -0
  29. data/lib/moneykit/models/api_error_auth_unauthorized_response.rb +280 -0
  30. data/lib/moneykit/models/api_error_rate_limit_exceeded_response.rb +277 -0
  31. data/lib/moneykit/models/app.rb +248 -0
  32. data/lib/moneykit/models/bacs_number.rb +240 -0
  33. data/lib/moneykit/models/balances.rb +287 -0
  34. data/lib/moneykit/models/basic_account_details.rb +265 -0
  35. data/lib/moneykit/models/country.rb +41 -0
  36. data/lib/moneykit/models/create_link_session_request.rb +336 -0
  37. data/lib/moneykit/models/create_link_session_response.rb +225 -0
  38. data/lib/moneykit/models/currency.rb +219 -0
  39. data/lib/moneykit/models/cursor.rb +229 -0
  40. data/lib/moneykit/models/cursor_pagination.rb +221 -0
  41. data/lib/moneykit/models/cursors.rb +229 -0
  42. data/lib/moneykit/models/customer_app.rb +241 -0
  43. data/lib/moneykit/models/customer_user.rb +292 -0
  44. data/lib/moneykit/models/eft_number.rb +255 -0
  45. data/lib/moneykit/models/email.rb +237 -0
  46. data/lib/moneykit/models/email1.rb +283 -0
  47. data/lib/moneykit/models/exchange_token_request.rb +225 -0
  48. data/lib/moneykit/models/exchange_token_response.rb +239 -0
  49. data/lib/moneykit/models/generate_access_token_response.rb +256 -0
  50. data/lib/moneykit/models/get_account_numbers_response.rb +240 -0
  51. data/lib/moneykit/models/get_account_response.rb +238 -0
  52. data/lib/moneykit/models/get_accounts_response.rb +241 -0
  53. data/lib/moneykit/models/get_institutions_response.rb +241 -0
  54. data/lib/moneykit/models/get_transactions_response.rb +303 -0
  55. data/lib/moneykit/models/get_user_accounts_response.rb +227 -0
  56. data/lib/moneykit/models/get_user_links_response.rb +227 -0
  57. data/lib/moneykit/models/get_user_transactions_response.rb +287 -0
  58. data/lib/moneykit/models/http_validation_error.rb +293 -0
  59. data/lib/moneykit/models/identity.rb +241 -0
  60. data/lib/moneykit/models/identity_link_product.rb +246 -0
  61. data/lib/moneykit/models/identity_product_settings.rb +234 -0
  62. data/lib/moneykit/models/identity_response.rb +241 -0
  63. data/lib/moneykit/models/institution.rb +345 -0
  64. data/lib/moneykit/models/institution_error_not_found_response.rb +276 -0
  65. data/lib/moneykit/models/institution_styling_response.rb +310 -0
  66. data/lib/moneykit/models/international_number.rb +240 -0
  67. data/lib/moneykit/models/introspect_client_response.rb +281 -0
  68. data/lib/moneykit/models/jwk_set.rb +227 -0
  69. data/lib/moneykit/models/link.rb +347 -0
  70. data/lib/moneykit/models/link1.rb +347 -0
  71. data/lib/moneykit/models/link2.rb +347 -0
  72. data/lib/moneykit/models/link3.rb +347 -0
  73. data/lib/moneykit/models/link4.rb +347 -0
  74. data/lib/moneykit/models/link_common.rb +339 -0
  75. data/lib/moneykit/models/link_error.rb +45 -0
  76. data/lib/moneykit/models/link_error_bad_state_response.rb +294 -0
  77. data/lib/moneykit/models/link_error_deleted_response.rb +277 -0
  78. data/lib/moneykit/models/link_error_forbidden_action_response.rb +280 -0
  79. data/lib/moneykit/models/link_error_not_found_response.rb +276 -0
  80. data/lib/moneykit/models/link_error_unauthorized_access_response.rb +276 -0
  81. data/lib/moneykit/models/link_permission_scope.rb +42 -0
  82. data/lib/moneykit/models/link_permissions.rb +234 -0
  83. data/lib/moneykit/models/link_products.rb +246 -0
  84. data/lib/moneykit/models/link_response.rb +364 -0
  85. data/lib/moneykit/models/link_session_customer_user.rb +284 -0
  86. data/lib/moneykit/models/link_session_customer_user_email.rb +275 -0
  87. data/lib/moneykit/models/link_session_customer_user_phone.rb +307 -0
  88. data/lib/moneykit/models/link_session_error_forbidden_config_response.rb +280 -0
  89. data/lib/moneykit/models/link_session_error_invalid_token_exchange.rb +280 -0
  90. data/lib/moneykit/models/link_session_setting_overrides.rb +268 -0
  91. data/lib/moneykit/models/link_state.rb +43 -0
  92. data/lib/moneykit/models/link_state_changed_webhook.rb +392 -0
  93. data/lib/moneykit/models/location_inner.rb +230 -0
  94. data/lib/moneykit/models/money_kit_env.rb +40 -0
  95. data/lib/moneykit/models/money_link_features.rb +234 -0
  96. data/lib/moneykit/models/moneylink_features.rb +242 -0
  97. data/lib/moneykit/models/numbers.rb +286 -0
  98. data/lib/moneykit/models/owner.rb +278 -0
  99. data/lib/moneykit/models/phone.rb +315 -0
  100. data/lib/moneykit/models/phone_number.rb +273 -0
  101. data/lib/moneykit/models/phone_number_type.rb +42 -0
  102. data/lib/moneykit/models/product.rb +42 -0
  103. data/lib/moneykit/models/products.rb +254 -0
  104. data/lib/moneykit/models/products1.rb +245 -0
  105. data/lib/moneykit/models/products_settings.rb +237 -0
  106. data/lib/moneykit/models/provider.rb +43 -0
  107. data/lib/moneykit/models/refresh_products_request.rb +237 -0
  108. data/lib/moneykit/models/requested_link_permission.rb +276 -0
  109. data/lib/moneykit/models/response401_disconnect_links_id_delete.rb +302 -0
  110. data/lib/moneykit/models/response401_exchange_token_link_session_exchange_token_post.rb +300 -0
  111. data/lib/moneykit/models/response401_get_account_links_id_accounts_account_id_get.rb +302 -0
  112. data/lib/moneykit/models/response401_get_account_numbers_links_id_accounts_numbers_get.rb +302 -0
  113. data/lib/moneykit/models/response401_get_accounts_links_id_accounts_get.rb +302 -0
  114. data/lib/moneykit/models/response401_get_identities_links_id_identity_get.rb +302 -0
  115. data/lib/moneykit/models/response401_get_institution_institutions_institution_id_get.rb +300 -0
  116. data/lib/moneykit/models/response401_get_institution_styling_institutions_institution_id_styling_get.rb +300 -0
  117. data/lib/moneykit/models/response401_get_institutions_institutions_get.rb +300 -0
  118. data/lib/moneykit/models/response401_get_link_links_id_get.rb +302 -0
  119. data/lib/moneykit/models/response401_get_transactions_diff_links_id_transactions_sync_get.rb +302 -0
  120. data/lib/moneykit/models/response401_get_transactions_links_id_transactions_get.rb +302 -0
  121. data/lib/moneykit/models/response401_get_user_accounts_users_id_accounts_get.rb +300 -0
  122. data/lib/moneykit/models/response401_get_user_links_users_id_links_get.rb +300 -0
  123. data/lib/moneykit/models/response401_get_user_transactions_users_id_transactions_get.rb +300 -0
  124. data/lib/moneykit/models/response401_get_well_known_jwks_well_known_jwks_json_get.rb +300 -0
  125. data/lib/moneykit/models/response401_instrospect_client_auth_introspect_get.rb +300 -0
  126. data/lib/moneykit/models/response401_refresh_products_links_id_products_post.rb +302 -0
  127. data/lib/moneykit/models/response401_update_link_links_id_patch.rb +302 -0
  128. data/lib/moneykit/models/settings.rb +276 -0
  129. data/lib/moneykit/models/supported_version.rb +39 -0
  130. data/lib/moneykit/models/transaction.rb +369 -0
  131. data/lib/moneykit/models/transaction_diff.rb +261 -0
  132. data/lib/moneykit/models/transaction_sync_response.rb +267 -0
  133. data/lib/moneykit/models/transaction_type.rb +40 -0
  134. data/lib/moneykit/models/transaction_type_filter.rb +40 -0
  135. data/lib/moneykit/models/transactions.rb +253 -0
  136. data/lib/moneykit/models/transactions1.rb +269 -0
  137. data/lib/moneykit/models/transactions_link_product.rb +246 -0
  138. data/lib/moneykit/models/transactions_product_settings.rb +246 -0
  139. data/lib/moneykit/models/update_link_request.rb +258 -0
  140. data/lib/moneykit/models/user_accounts_out.rb +221 -0
  141. data/lib/moneykit/models/user_links_out.rb +221 -0
  142. data/lib/moneykit/models/user_transactions_paged_response.rb +221 -0
  143. data/lib/moneykit/models/validation_error.rb +254 -0
  144. data/lib/moneykit/version.rb +15 -0
  145. data/lib/moneykit.rb +180 -0
  146. data/lib/plaid_compatible/money_kit_plaid_compatible/api/plaid_api.rb +744 -0
  147. data/lib/plaid_compatible/money_kit_plaid_compatible/api_client.rb +400 -0
  148. data/lib/plaid_compatible/money_kit_plaid_compatible/api_error.rb +57 -0
  149. data/lib/plaid_compatible/money_kit_plaid_compatible/configuration.rb +287 -0
  150. data/lib/plaid_compatible/money_kit_plaid_compatible/models/account_balance.rb +254 -0
  151. data/lib/plaid_compatible/money_kit_plaid_compatible/models/account_base.rb +289 -0
  152. data/lib/plaid_compatible/money_kit_plaid_compatible/models/account_identity.rb +306 -0
  153. data/lib/plaid_compatible/money_kit_plaid_compatible/models/account_subtype.rb +110 -0
  154. data/lib/plaid_compatible/money_kit_plaid_compatible/models/account_type.rb +43 -0
  155. data/lib/plaid_compatible/money_kit_plaid_compatible/models/accounts_get_request.rb +256 -0
  156. data/lib/plaid_compatible/money_kit_plaid_compatible/models/accounts_get_request_options.rb +223 -0
  157. data/lib/plaid_compatible/money_kit_plaid_compatible/models/accounts_get_response.rb +256 -0
  158. data/lib/plaid_compatible/money_kit_plaid_compatible/models/address.rb +235 -0
  159. data/lib/plaid_compatible/money_kit_plaid_compatible/models/address_data.rb +269 -0
  160. data/lib/plaid_compatible/money_kit_plaid_compatible/models/auth_get_numbers.rb +278 -0
  161. data/lib/plaid_compatible/money_kit_plaid_compatible/models/auth_get_request.rb +256 -0
  162. data/lib/plaid_compatible/money_kit_plaid_compatible/models/auth_get_request_options.rb +223 -0
  163. data/lib/plaid_compatible/money_kit_plaid_compatible/models/auth_get_response.rb +270 -0
  164. data/lib/plaid_compatible/money_kit_plaid_compatible/models/country_code.rb +40 -0
  165. data/lib/plaid_compatible/money_kit_plaid_compatible/models/email.rb +240 -0
  166. data/lib/plaid_compatible/money_kit_plaid_compatible/models/http_validation_error.rb +220 -0
  167. data/lib/plaid_compatible/money_kit_plaid_compatible/models/identity_get_request.rb +256 -0
  168. data/lib/plaid_compatible/money_kit_plaid_compatible/models/identity_get_request_options.rb +223 -0
  169. data/lib/plaid_compatible/money_kit_plaid_compatible/models/identity_get_response.rb +256 -0
  170. data/lib/plaid_compatible/money_kit_plaid_compatible/models/institution.rb +279 -0
  171. data/lib/plaid_compatible/money_kit_plaid_compatible/models/institutions_get_by_id_request.rb +260 -0
  172. data/lib/plaid_compatible/money_kit_plaid_compatible/models/institutions_get_by_id_response.rb +239 -0
  173. data/lib/plaid_compatible/money_kit_plaid_compatible/models/item.rb +317 -0
  174. data/lib/plaid_compatible/money_kit_plaid_compatible/models/item_error_webhook.rb +279 -0
  175. data/lib/plaid_compatible/money_kit_plaid_compatible/models/item_get_request.rb +247 -0
  176. data/lib/plaid_compatible/money_kit_plaid_compatible/models/item_get_response.rb +249 -0
  177. data/lib/plaid_compatible/money_kit_plaid_compatible/models/item_public_token_exchange_request.rb +247 -0
  178. data/lib/plaid_compatible/money_kit_plaid_compatible/models/item_public_token_exchange_response.rb +255 -0
  179. data/lib/plaid_compatible/money_kit_plaid_compatible/models/item_remove_request.rb +247 -0
  180. data/lib/plaid_compatible/money_kit_plaid_compatible/models/item_remove_response.rb +225 -0
  181. data/lib/plaid_compatible/money_kit_plaid_compatible/models/item_status_investments.rb +232 -0
  182. data/lib/plaid_compatible/money_kit_plaid_compatible/models/item_status_last_webhook.rb +232 -0
  183. data/lib/plaid_compatible/money_kit_plaid_compatible/models/item_status_nullable.rb +240 -0
  184. data/lib/plaid_compatible/money_kit_plaid_compatible/models/item_status_transactions.rb +232 -0
  185. data/lib/plaid_compatible/money_kit_plaid_compatible/models/link_token_create_request.rb +352 -0
  186. data/lib/plaid_compatible/money_kit_plaid_compatible/models/link_token_create_request_user.rb +269 -0
  187. data/lib/plaid_compatible/money_kit_plaid_compatible/models/link_token_create_response.rb +255 -0
  188. data/lib/plaid_compatible/money_kit_plaid_compatible/models/numbers_ach.rb +266 -0
  189. data/lib/plaid_compatible/money_kit_plaid_compatible/models/numbers_bacs.rb +255 -0
  190. data/lib/plaid_compatible/money_kit_plaid_compatible/models/numbers_eft.rb +270 -0
  191. data/lib/plaid_compatible/money_kit_plaid_compatible/models/numbers_international.rb +255 -0
  192. data/lib/plaid_compatible/money_kit_plaid_compatible/models/owner.rb +278 -0
  193. data/lib/plaid_compatible/money_kit_plaid_compatible/models/personal_finance_category.rb +240 -0
  194. data/lib/plaid_compatible/money_kit_plaid_compatible/models/phone_number.rb +255 -0
  195. data/lib/plaid_compatible/money_kit_plaid_compatible/models/plaid_error.rb +322 -0
  196. data/lib/plaid_compatible/money_kit_plaid_compatible/models/plaid_error_type.rb +51 -0
  197. data/lib/plaid_compatible/money_kit_plaid_compatible/models/products.rb +41 -0
  198. data/lib/plaid_compatible/money_kit_plaid_compatible/models/removed_transaction.rb +221 -0
  199. data/lib/plaid_compatible/money_kit_plaid_compatible/models/transaction.rb +378 -0
  200. data/lib/plaid_compatible/money_kit_plaid_compatible/models/transactions_get_request.rb +286 -0
  201. data/lib/plaid_compatible/money_kit_plaid_compatible/models/transactions_get_request_options.rb +267 -0
  202. data/lib/plaid_compatible/money_kit_plaid_compatible/models/transactions_get_response.rb +288 -0
  203. data/lib/plaid_compatible/money_kit_plaid_compatible/models/transactions_refresh_request.rb +247 -0
  204. data/lib/plaid_compatible/money_kit_plaid_compatible/models/transactions_refresh_response.rb +225 -0
  205. data/lib/plaid_compatible/money_kit_plaid_compatible/models/transactions_sync_request.rb +278 -0
  206. data/lib/plaid_compatible/money_kit_plaid_compatible/models/transactions_sync_request_options.rb +232 -0
  207. data/lib/plaid_compatible/money_kit_plaid_compatible/models/transactions_sync_response.rb +306 -0
  208. data/lib/plaid_compatible/money_kit_plaid_compatible/models/validation_error.rb +253 -0
  209. data/lib/plaid_compatible/money_kit_plaid_compatible/models/webhook_environment_values.rb +40 -0
  210. data/lib/plaid_compatible/money_kit_plaid_compatible/version.rb +15 -0
  211. data/lib/plaid_compatible/money_kit_plaid_compatible.rb +100 -0
  212. data/moneykit-0.0.0.gem +0 -0
  213. data/moneykit.gemspec +39 -0
  214. metadata +309 -0
@@ -0,0 +1,400 @@
1
+ =begin
2
+ #Plaid Compatibility Layer
3
+
4
+ #No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
5
+
6
+ The version of the OpenAPI document: 0.1.0
7
+
8
+ Generated by: https://openapi-generator.tech
9
+ OpenAPI Generator version: 5.1.1
10
+
11
+ =end
12
+
13
+ require 'date'
14
+ require 'json'
15
+ require 'logger'
16
+ require 'tempfile'
17
+ require 'faraday'
18
+ require 'faraday/multipart'
19
+
20
+ module MoneyKit::PlaidCompatible
21
+ class ApiClient
22
+ # The Configuration object holding settings to be used in the API client.
23
+ attr_accessor :config
24
+
25
+ # Defines the headers to be used in HTTP requests of all API calls by default.
26
+ #
27
+ # @return [Hash]
28
+ attr_accessor :default_headers
29
+
30
+ # The Faraday::Connection object for fine tuning configuration options.
31
+ attr_reader :connection
32
+
33
+ # Initializes the ApiClient
34
+ # @option config [Configuration] Configuration for initializing the object, default to Configuration.default
35
+ def initialize(config = Configuration.default)
36
+ @config = config
37
+ @user_agent = "Plaid Ruby v1.0.0"
38
+ @default_headers = {
39
+ 'Content-Type' => 'application/json',
40
+ 'User-Agent' => @user_agent,
41
+ }
42
+ @connection = create_connection
43
+ end
44
+
45
+ def create_connection
46
+ @connection = Faraday.new(url: config.base_url) do |builder|
47
+ block_given? ? yield(builder) : builder.adapter(Faraday.default_adapter)
48
+ end
49
+ end
50
+
51
+ def self.default
52
+ @@default ||= ApiClient.new
53
+ end
54
+
55
+ # Call an API with given options.
56
+ #
57
+ # @return [Array<(Object, Integer, Hash)>] an array of 3 elements:
58
+ # the data deserialized from response body (could be nil), response status code and response headers.
59
+ def call_api(http_method, path, opts = {})
60
+ if opts[:header_params]["Content-Type"] == "multipart/form-data"
61
+ connection.request :multipart
62
+ connection.request :url_encoded
63
+ end
64
+
65
+ begin
66
+ response = connection.public_send(http_method.to_sym.downcase) do |req|
67
+ build_request(http_method, path, req, opts)
68
+ end
69
+
70
+ if @config.debugging
71
+ @config.logger.debug "HTTP response body ~BEGIN~\n#{response.body}\n~END~\n"
72
+ end
73
+
74
+ unless response.success?
75
+ if response.status == 0
76
+ # Errors from libcurl will be made visible here
77
+ fail ApiError.new(:code => 0,
78
+ :message => response.return_message)
79
+ else
80
+ raw_body = response.body
81
+ # Gracefully handle malformed body which is possible during API outage/maintanance
82
+ parsed_body = begin
83
+ JSON.parse(raw_body)
84
+ rescue JSON::ParserError
85
+ nil
86
+ end
87
+ fail ApiError.new(:code => response.status,
88
+ :response_headers => response.headers,
89
+ :response_body => raw_body,
90
+ :data => parsed_body),
91
+ response.reason_phrase
92
+ end
93
+ end
94
+ rescue Faraday::TimeoutError
95
+ fail ApiError.new('Connection timed out')
96
+ end
97
+
98
+ if opts[:return_type]
99
+ prepare_file(response) if opts[:return_type] == 'File'
100
+ data = deserialize(response, opts[:return_type])
101
+ else
102
+ data = nil
103
+ end
104
+ return data, response.status, response.headers
105
+ end
106
+
107
+ # Builds the HTTP request
108
+ #
109
+ # @param [String] http_method HTTP method/verb (e.g. POST)
110
+ # @param [String] path URL path (e.g. /account/new)
111
+ # @option opts [Hash] :header_params Header parameters
112
+ # @option opts [Hash] :query_params Query parameters
113
+ # @option opts [Hash] :form_params Query parameters
114
+ # @option opts [Object] :body HTTP body (JSON/XML)
115
+ # @return [Typhoeus::Request] A Typhoeus Request
116
+ def build_request(http_method, path, request, opts = {})
117
+ url = build_request_url(path)
118
+ http_method = http_method.to_sym.downcase
119
+
120
+ header_params = @default_headers.merge(opts[:header_params] || {})
121
+ query_params = opts[:query_params] || {}
122
+ form_params = opts[:form_params] || {}
123
+
124
+ update_params_for_auth! header_params, query_params, opts[:auth_names]
125
+
126
+ req_opts = {
127
+ :method => http_method,
128
+ :headers => header_params,
129
+ :params => query_params,
130
+ :params_encoding => @config.params_encoding,
131
+ :timeout => @config.timeout,
132
+ :verbose => @config.debugging
133
+ }
134
+
135
+ if [:post, :patch, :put, :delete].include?(http_method)
136
+ req_body = build_request_body(header_params, form_params, opts[:body])
137
+ req_opts.update :body => req_body
138
+ if @config.debugging
139
+ @config.logger.debug "HTTP request body param ~BEGIN~\n#{req_body}\n~END~\n"
140
+ end
141
+ end
142
+ request.headers = header_params
143
+ request.body = req_body
144
+ request.url url
145
+ request.params = query_params
146
+ request
147
+ end
148
+
149
+ # Builds the HTTP request body
150
+ #
151
+ # @param [Hash] header_params Header parameters
152
+ # @param [Hash] form_params Query parameters
153
+ # @param [Object] body HTTP body (JSON/XML)
154
+ # @return [String] HTTP body data in the form of string
155
+ def build_request_body(header_params, form_params, body)
156
+ # http form
157
+ if header_params['Content-Type'] == 'application/x-www-form-urlencoded'
158
+ data = URI.encode_www_form(form_params)
159
+ elsif header_params['Content-Type'] == 'multipart/form-data'
160
+ data = {}
161
+ form_params.each do |key, value|
162
+ case value
163
+ when ::File, ::Tempfile
164
+ # TODO hardcode to application/octet-stream, need better way to detect content type
165
+ data[key] = Faraday::Multipart::Post::UploadIO.new(value.path, 'application/octet-stream', value.path)
166
+ when ::Array, nil
167
+ # let Faraday handle Array and nil parameters
168
+ data[key] = value
169
+ else
170
+ data[key] = value.to_s
171
+ end
172
+ end
173
+ elsif body
174
+ data = body.is_a?(String) ? body : body.to_json
175
+ else
176
+ data = nil
177
+ end
178
+ data
179
+ end
180
+
181
+ # Check if the given MIME is a JSON MIME.
182
+ # JSON MIME examples:
183
+ # application/json
184
+ # application/json; charset=UTF8
185
+ # APPLICATION/JSON
186
+ # */*
187
+ # @param [String] mime MIME
188
+ # @return [Boolean] True if the MIME is application/json
189
+ def json_mime?(mime)
190
+ (mime == '*/*') || !(mime =~ /Application\/.*json(?!p)(;.*)?/i).nil?
191
+ end
192
+
193
+ # Deserialize the response to the given return type.
194
+ #
195
+ # @param [Response] response HTTP response
196
+ # @param [String] return_type some examples: "User", "Array<User>", "Hash<String, Integer>"
197
+ def deserialize(response, return_type)
198
+ body = response.body
199
+
200
+ # handle file downloading - return the File instance processed in request callbacks
201
+ # note that response body is empty when the file is written in chunks in request on_body callback
202
+ return @tempfile if return_type == 'File'
203
+
204
+ return nil if body.nil? || body.empty?
205
+
206
+ # return response body directly for String return type
207
+ return body if return_type == 'String'
208
+
209
+ # ensuring a default content type
210
+ content_type = response.headers['Content-Type'] || 'application/json'
211
+
212
+ fail "Content-Type is not supported: #{content_type}" unless json_mime?(content_type)
213
+
214
+ begin
215
+ data = JSON.parse("[#{body}]", :symbolize_names => true)[0]
216
+ rescue JSON::ParserError => e
217
+ if %w(String Date DateTime).include?(return_type)
218
+ data = body
219
+ else
220
+ raise e
221
+ end
222
+ end
223
+
224
+ convert_to_type data, return_type
225
+ end
226
+
227
+ # Convert data to the given return type.
228
+ # @param [Object] data Data to be converted
229
+ # @param [String] return_type Return type
230
+ # @return [Mixed] Data in a particular type
231
+ def convert_to_type(data, return_type)
232
+ return nil if data.nil?
233
+ case return_type
234
+ when 'String'
235
+ data.to_s
236
+ when 'Integer'
237
+ data.to_i
238
+ when 'Float'
239
+ data.to_f
240
+ when 'Boolean'
241
+ data == true
242
+ when 'DateTime'
243
+ # parse date time (expecting ISO 8601 format)
244
+ DateTime.parse data
245
+ when 'Date'
246
+ # parse date time (expecting ISO 8601 format)
247
+ Date.parse data
248
+ when 'Object'
249
+ # generic object (usually a Hash), return directly
250
+ data
251
+ when /\AArray<(.+)>\z/
252
+ # e.g. Array<Pet>
253
+ sub_type = $1
254
+ data.map { |item| convert_to_type(item, sub_type) }
255
+ when /\AHash\<String, (.+)\>\z/
256
+ # e.g. Hash<String, Integer>
257
+ sub_type = $1
258
+ {}.tap do |hash|
259
+ data.each { |k, v| hash[k] = convert_to_type(v, sub_type) }
260
+ end
261
+ else
262
+ # models, e.g. Pet
263
+ MoneyKit::PlaidCompatible.const_get(return_type).build_from_hash(data)
264
+ end
265
+ end
266
+
267
+ # Save response body into a file in (the defined) temporary folder, using the filename
268
+ # from the "Content-Disposition" header if provided, otherwise a random filename.
269
+ # The response body is written to the file in chunks in order to handle files which
270
+ # size is larger than maximum Ruby String or even larger than the maximum memory a Ruby
271
+ # process can use.
272
+ #
273
+ # @see Configuration#temp_folder_path
274
+ def prepare_file(response)
275
+ content_disposition = response.headers["Content-Disposition"]
276
+ if content_disposition && content_disposition =~ /filename=/i
277
+ filename = content_disposition[/filename=['"]?([^'"\s]+)['"]?/, 1]
278
+ prefix = sanitize_filename(filename)
279
+ else
280
+ prefix = "download-"
281
+ end
282
+ prefix = prefix + "-" unless prefix.end_with?("-")
283
+ encoding = response.body.encoding
284
+ tempfile = Tempfile.open(prefix, @config.temp_folder_path, encoding: encoding)
285
+ @tempfile = tempfile
286
+ tempfile.write(response.body)
287
+ tempfile.close if tempfile
288
+ @config.logger.info "Temp file written to #{tempfile.path}, please copy the file to a proper folder " \
289
+ "with e.g. `FileUtils.cp(tempfile.path, '/new/file/path')` otherwise the temp file " \
290
+ "will be deleted automatically with GC. It's also recommended to delete the temp file " \
291
+ "explicitly with `tempfile.delete`"
292
+ end
293
+
294
+ # Sanitize filename by removing path.
295
+ # e.g. ../../sun.gif becomes sun.gif
296
+ #
297
+ # @param [String] filename the filename to be sanitized
298
+ # @return [String] the sanitized filename
299
+ def sanitize_filename(filename)
300
+ filename.gsub(/.*[\/\\]/, '')
301
+ end
302
+
303
+ def build_request_url(path)
304
+ # Add leading and trailing slashes to path
305
+ path = "/#{path}".gsub(/\/+/, '/')
306
+ @config.base_url + path
307
+ end
308
+
309
+ # Update hearder and query params based on authentication settings.
310
+ #
311
+ # @param [Hash] header_params Header parameters
312
+ # @param [Hash] query_params Query parameters
313
+ # @param [String] auth_names Authentication scheme name
314
+ def update_params_for_auth!(header_params, query_params, auth_names)
315
+ Array(auth_names).each do |auth_name|
316
+ auth_setting = @config.auth_settings[auth_name]
317
+ next unless auth_setting
318
+ case auth_setting[:in]
319
+ when 'header' then header_params[auth_setting[:key]] = auth_setting[:value]
320
+ when 'query' then query_params[auth_setting[:key]] = auth_setting[:value]
321
+ else fail ArgumentError, 'Authentication token must be in `query` of `header`'
322
+ end
323
+ end
324
+ end
325
+
326
+ # Sets user agent in HTTP header
327
+ #
328
+ # @param [String] user_agent User agent (e.g. openapi-generator/ruby/1.0.0)
329
+ def user_agent=(user_agent)
330
+ @user_agent = user_agent
331
+ @default_headers['User-Agent'] = @user_agent
332
+ end
333
+
334
+ # Return Accept header based on an array of accepts provided.
335
+ # @param [Array] accepts array for Accept
336
+ # @return [String] the Accept header (e.g. application/json)
337
+ def select_header_accept(accepts)
338
+ return nil if accepts.nil? || accepts.empty?
339
+ # use JSON when present, otherwise use all of the provided
340
+ json_accept = accepts.find { |s| json_mime?(s) }
341
+ json_accept || accepts.join(',')
342
+ end
343
+
344
+ # Return Content-Type header based on an array of content types provided.
345
+ # @param [Array] content_types array for Content-Type
346
+ # @return [String] the Content-Type header (e.g. application/json)
347
+ def select_header_content_type(content_types)
348
+ # use application/json by default
349
+ return 'application/json' if content_types.nil? || content_types.empty?
350
+ # use JSON when present, otherwise use the first one
351
+ json_content_type = content_types.find { |s| json_mime?(s) }
352
+ json_content_type || content_types.first
353
+ end
354
+
355
+ # Convert object (array, hash, object, etc) to JSON string.
356
+ # @param [Object] model object to be converted into JSON string
357
+ # @return [String] JSON string representation of the object
358
+ def object_to_http_body(model)
359
+ return model if model.nil? || model.is_a?(String)
360
+ local_body = nil
361
+ if model.is_a?(Array)
362
+ local_body = model.map { |m| object_to_hash(m) }
363
+ else
364
+ local_body = object_to_hash(model)
365
+ end
366
+ local_body.to_json
367
+ end
368
+
369
+ # Convert object(non-array) to hash.
370
+ # @param [Object] obj object to be converted into JSON string
371
+ # @return [String] JSON string representation of the object
372
+ def object_to_hash(obj)
373
+ if obj.respond_to?(:to_hash)
374
+ obj.to_hash
375
+ else
376
+ obj
377
+ end
378
+ end
379
+
380
+ # Build parameter value according to the given collection format.
381
+ # @param [String] collection_format one of :csv, :ssv, :tsv, :pipes and :multi
382
+ def build_collection_param(param, collection_format)
383
+ case collection_format
384
+ when :csv
385
+ param.join(',')
386
+ when :ssv
387
+ param.join(' ')
388
+ when :tsv
389
+ param.join("\t")
390
+ when :pipes
391
+ param.join('|')
392
+ when :multi
393
+ # return the array directly as typhoeus will handle it as expected
394
+ param
395
+ else
396
+ fail "unknown collection format: #{collection_format.inspect}"
397
+ end
398
+ end
399
+ end
400
+ end
@@ -0,0 +1,57 @@
1
+ =begin
2
+ #Plaid Compatibility Layer
3
+
4
+ #No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
5
+
6
+ The version of the OpenAPI document: 0.1.0
7
+
8
+ Generated by: https://openapi-generator.tech
9
+ OpenAPI Generator version: 5.1.1
10
+
11
+ =end
12
+
13
+ module MoneyKit::PlaidCompatible
14
+ class ApiError < StandardError
15
+ attr_reader :code, :response_headers, :response_body, :data
16
+
17
+ # Usage examples:
18
+ # ApiError.new
19
+ # ApiError.new("message")
20
+ # ApiError.new(:code => 500, :response_headers => {}, :response_body => "")
21
+ # ApiError.new(:code => 404, :message => "Not Found")
22
+ def initialize(arg = nil)
23
+ if arg.is_a? Hash
24
+ if arg.key?(:message) || arg.key?('message')
25
+ super(arg[:message] || arg['message'])
26
+ else
27
+ super arg
28
+ end
29
+
30
+ arg.each do |k, v|
31
+ instance_variable_set "@#{k}", v
32
+ end
33
+ else
34
+ super arg
35
+ end
36
+ end
37
+
38
+ # Override to_s to display a friendly error message
39
+ def to_s
40
+ message
41
+ end
42
+
43
+ def message
44
+ if @message.nil?
45
+ msg = "Error message: the server returns an error"
46
+ else
47
+ msg = @message
48
+ end
49
+
50
+ msg += "\nHTTP status code: #{code}" if code
51
+ msg += "\nResponse headers: #{response_headers}" if response_headers
52
+ msg += "\nResponse body: #{response_body}" if response_body
53
+
54
+ msg
55
+ end
56
+ end
57
+ end