mt-sdk 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 (318) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE +28 -0
  3. data/README.md +188 -0
  4. data/bin/console +15 -0
  5. data/lib/modern_treasury/api_helper.rb +10 -0
  6. data/lib/modern_treasury/client.rb +275 -0
  7. data/lib/modern_treasury/configuration.rb +206 -0
  8. data/lib/modern_treasury/controllers/account_collection_flow_controller.rb +130 -0
  9. data/lib/modern_treasury/controllers/account_detail_controller.rb +131 -0
  10. data/lib/modern_treasury/controllers/balance_report_controller.rb +76 -0
  11. data/lib/modern_treasury/controllers/base_controller.rb +60 -0
  12. data/lib/modern_treasury/controllers/connection_controller.rb +40 -0
  13. data/lib/modern_treasury/controllers/counterparty_controller.rb +188 -0
  14. data/lib/modern_treasury/controllers/document_controller.rb +285 -0
  15. data/lib/modern_treasury/controllers/event_controller.rb +72 -0
  16. data/lib/modern_treasury/controllers/expected_payment_controller.rb +162 -0
  17. data/lib/modern_treasury/controllers/external_account_controller.rb +202 -0
  18. data/lib/modern_treasury/controllers/incoming_payment_detail_controller.rb +150 -0
  19. data/lib/modern_treasury/controllers/internal_account_controller.rb +134 -0
  20. data/lib/modern_treasury/controllers/invoice_controller.rb +98 -0
  21. data/lib/modern_treasury/controllers/invoice_line_item_controller.rb +136 -0
  22. data/lib/modern_treasury/controllers/ledger_account_category_controller.rb +292 -0
  23. data/lib/modern_treasury/controllers/ledger_account_controller.rb +202 -0
  24. data/lib/modern_treasury/controllers/ledger_account_payout_controller.rb +126 -0
  25. data/lib/modern_treasury/controllers/ledger_account_statement_controller.rb +60 -0
  26. data/lib/modern_treasury/controllers/ledger_controller.rb +152 -0
  27. data/lib/modern_treasury/controllers/ledger_entry_controller.rb +148 -0
  28. data/lib/modern_treasury/controllers/ledger_event_handler_controller.rb +119 -0
  29. data/lib/modern_treasury/controllers/ledger_transaction_controller.rb +328 -0
  30. data/lib/modern_treasury/controllers/ledgerable_event_controller.rb +61 -0
  31. data/lib/modern_treasury/controllers/line_item_controller.rb +107 -0
  32. data/lib/modern_treasury/controllers/paper_item_controller.rb +69 -0
  33. data/lib/modern_treasury/controllers/payment_flow_controller.rb +138 -0
  34. data/lib/modern_treasury/controllers/payment_order_controller.rb +368 -0
  35. data/lib/modern_treasury/controllers/payment_reference_controller.rb +64 -0
  36. data/lib/modern_treasury/controllers/ping_controller.rb +34 -0
  37. data/lib/modern_treasury/controllers/return_controller.rb +105 -0
  38. data/lib/modern_treasury/controllers/reversal_controller.rb +99 -0
  39. data/lib/modern_treasury/controllers/routing_detail_controller.rb +131 -0
  40. data/lib/modern_treasury/controllers/transaction_controller.rb +133 -0
  41. data/lib/modern_treasury/controllers/transaction_line_item_controller.rb +39 -0
  42. data/lib/modern_treasury/controllers/validation_controller.rb +41 -0
  43. data/lib/modern_treasury/controllers/virtual_account_controller.rb +142 -0
  44. data/lib/modern_treasury/exceptions/api_exception.rb +21 -0
  45. data/lib/modern_treasury/exceptions/error_message_exception.rb +46 -0
  46. data/lib/modern_treasury/http/auth/basic_auth.rb +62 -0
  47. data/lib/modern_treasury/http/http_call_back.rb +10 -0
  48. data/lib/modern_treasury/http/http_method_enum.rb +10 -0
  49. data/lib/modern_treasury/http/http_request.rb +10 -0
  50. data/lib/modern_treasury/http/http_response.rb +10 -0
  51. data/lib/modern_treasury/http/proxy_settings.rb +22 -0
  52. data/lib/modern_treasury/models/account.rb +304 -0
  53. data/lib/modern_treasury/models/account1.rb +217 -0
  54. data/lib/modern_treasury/models/account_collection_flow.rb +178 -0
  55. data/lib/modern_treasury/models/account_collection_flow_create_request.rb +70 -0
  56. data/lib/modern_treasury/models/account_collection_flow_update_request.rb +61 -0
  57. data/lib/modern_treasury/models/account_detail.rb +211 -0
  58. data/lib/modern_treasury/models/account_detail1.rb +74 -0
  59. data/lib/modern_treasury/models/account_detail_create_request.rb +75 -0
  60. data/lib/modern_treasury/models/account_number_type2_enum.rb +48 -0
  61. data/lib/modern_treasury/models/account_number_type_enum.rb +49 -0
  62. data/lib/modern_treasury/models/account_type5_enum.rb +56 -0
  63. data/lib/modern_treasury/models/account_type_enum.rb +56 -0
  64. data/lib/modern_treasury/models/accounting.rb +88 -0
  65. data/lib/modern_treasury/models/accounting1.rb +63 -0
  66. data/lib/modern_treasury/models/accounts_type1_enum.rb +26 -0
  67. data/lib/modern_treasury/models/accounts_type_enum.rb +36 -0
  68. data/lib/modern_treasury/models/address.rb +231 -0
  69. data/lib/modern_treasury/models/address_request.rb +118 -0
  70. data/lib/modern_treasury/models/async_response.rb +68 -0
  71. data/lib/modern_treasury/models/balance.rb +164 -0
  72. data/lib/modern_treasury/models/balance_report.rb +178 -0
  73. data/lib/modern_treasury/models/balance_report_type1_enum.rb +44 -0
  74. data/lib/modern_treasury/models/balance_report_type_enum.rb +45 -0
  75. data/lib/modern_treasury/models/balance_type_enum.rb +63 -0
  76. data/lib/modern_treasury/models/balances.rb +71 -0
  77. data/lib/modern_treasury/models/balances1.rb +81 -0
  78. data/lib/modern_treasury/models/balances2.rb +120 -0
  79. data/lib/modern_treasury/models/balances3.rb +130 -0
  80. data/lib/modern_treasury/models/base_model.rb +110 -0
  81. data/lib/modern_treasury/models/charge_bearer_enum.rb +42 -0
  82. data/lib/modern_treasury/models/code1_enum.rb +200 -0
  83. data/lib/modern_treasury/models/code_enum.rb +68 -0
  84. data/lib/modern_treasury/models/connection.rb +209 -0
  85. data/lib/modern_treasury/models/contact_detail.rb +200 -0
  86. data/lib/modern_treasury/models/contact_detail_create_request.rb +75 -0
  87. data/lib/modern_treasury/models/contact_identifier_type_enum.rb +40 -0
  88. data/lib/modern_treasury/models/content_type_enum.rb +36 -0
  89. data/lib/modern_treasury/models/counterparty.rb +200 -0
  90. data/lib/modern_treasury/models/counterparty_billing_address.rb +106 -0
  91. data/lib/modern_treasury/models/counterparty_collect_account_request.rb +104 -0
  92. data/lib/modern_treasury/models/counterparty_collect_account_response.rb +82 -0
  93. data/lib/modern_treasury/models/counterparty_create_request.rb +161 -0
  94. data/lib/modern_treasury/models/counterparty_shipping_address.rb +107 -0
  95. data/lib/modern_treasury/models/counterparty_update_request.rb +107 -0
  96. data/lib/modern_treasury/models/created_at_enum.rb +36 -0
  97. data/lib/modern_treasury/models/currency1_enum.rb +37 -0
  98. data/lib/modern_treasury/models/currency_enum.rb +784 -0
  99. data/lib/modern_treasury/models/direction10_enum.rb +38 -0
  100. data/lib/modern_treasury/models/direction14_enum.rb +36 -0
  101. data/lib/modern_treasury/models/direction15_enum.rb +36 -0
  102. data/lib/modern_treasury/models/direction1_enum.rb +37 -0
  103. data/lib/modern_treasury/models/direction4_enum.rb +36 -0
  104. data/lib/modern_treasury/models/direction5_enum.rb +39 -0
  105. data/lib/modern_treasury/models/direction9_enum.rb +37 -0
  106. data/lib/modern_treasury/models/direction_enum.rb +38 -0
  107. data/lib/modern_treasury/models/document.rb +207 -0
  108. data/lib/modern_treasury/models/document_create_request.rb +92 -0
  109. data/lib/modern_treasury/models/document_detail.rb +154 -0
  110. data/lib/modern_treasury/models/documentable_type1_enum.rb +72 -0
  111. data/lib/modern_treasury/models/documentable_type2_enum.rb +72 -0
  112. data/lib/modern_treasury/models/documentable_type_enum.rb +75 -0
  113. data/lib/modern_treasury/models/effective_at_enum.rb +36 -0
  114. data/lib/modern_treasury/models/errors.rb +81 -0
  115. data/lib/modern_treasury/models/event.rb +162 -0
  116. data/lib/modern_treasury/models/expected_payment.rb +343 -0
  117. data/lib/modern_treasury/models/expected_payment_create_request.rb +254 -0
  118. data/lib/modern_treasury/models/expected_payment_update_request.rb +239 -0
  119. data/lib/modern_treasury/models/external_account.rb +283 -0
  120. data/lib/modern_treasury/models/external_account_complete_verification_request.rb +62 -0
  121. data/lib/modern_treasury/models/external_account_create_request.rb +230 -0
  122. data/lib/modern_treasury/models/external_account_update_request.rb +132 -0
  123. data/lib/modern_treasury/models/external_account_verify_request.rb +83 -0
  124. data/lib/modern_treasury/models/fallback_type_enum.rb +28 -0
  125. data/lib/modern_treasury/models/field_enum.rb +112 -0
  126. data/lib/modern_treasury/models/file.rb +81 -0
  127. data/lib/modern_treasury/models/foreign_exchange_indicator_enum.rb +38 -0
  128. data/lib/modern_treasury/models/incoming_payment_detail.rb +348 -0
  129. data/lib/modern_treasury/models/incoming_payment_detail_create_request.rb +141 -0
  130. data/lib/modern_treasury/models/incoming_payment_detail_update_request.rb +63 -0
  131. data/lib/modern_treasury/models/internal_account.rb +361 -0
  132. data/lib/modern_treasury/models/internal_account_create_request.rb +135 -0
  133. data/lib/modern_treasury/models/internal_account_update_request.rb +95 -0
  134. data/lib/modern_treasury/models/invoice.rb +342 -0
  135. data/lib/modern_treasury/models/invoice_create_request.rb +235 -0
  136. data/lib/modern_treasury/models/invoice_line_item.rb +171 -0
  137. data/lib/modern_treasury/models/invoice_line_item_create_request.rb +104 -0
  138. data/lib/modern_treasury/models/invoice_line_item_update_request.rb +240 -0
  139. data/lib/modern_treasury/models/invoice_update_request.rb +251 -0
  140. data/lib/modern_treasury/models/invoicer_address.rb +106 -0
  141. data/lib/modern_treasury/models/itemizable_type1_enum.rb +36 -0
  142. data/lib/modern_treasury/models/itemizable_type_enum.rb +36 -0
  143. data/lib/modern_treasury/models/ledger.rb +158 -0
  144. data/lib/modern_treasury/models/ledger_account.rb +220 -0
  145. data/lib/modern_treasury/models/ledger_account_category.rb +187 -0
  146. data/lib/modern_treasury/models/ledger_account_category_create_request.rb +125 -0
  147. data/lib/modern_treasury/models/ledger_account_category_update_request.rb +84 -0
  148. data/lib/modern_treasury/models/ledger_account_create_request.rb +150 -0
  149. data/lib/modern_treasury/models/ledger_account_normal_balance_enum.rb +36 -0
  150. data/lib/modern_treasury/models/ledger_account_payout.rb +238 -0
  151. data/lib/modern_treasury/models/ledger_account_payout_create_request.rb +152 -0
  152. data/lib/modern_treasury/models/ledger_account_payout_update_request.rb +85 -0
  153. data/lib/modern_treasury/models/ledger_account_statement.rb +233 -0
  154. data/lib/modern_treasury/models/ledger_account_statement_create_request.rb +122 -0
  155. data/lib/modern_treasury/models/ledger_account_update_request.rb +84 -0
  156. data/lib/modern_treasury/models/ledger_balance.rb +97 -0
  157. data/lib/modern_treasury/models/ledger_balances.rb +81 -0
  158. data/lib/modern_treasury/models/ledger_balances_with_effective_at.rb +123 -0
  159. data/lib/modern_treasury/models/ledger_create_request.rb +83 -0
  160. data/lib/modern_treasury/models/ledger_entry.rb +247 -0
  161. data/lib/modern_treasury/models/ledger_entry_create_request.rb +177 -0
  162. data/lib/modern_treasury/models/ledger_entry_of_transaction_version.rb +214 -0
  163. data/lib/modern_treasury/models/ledger_event_handler.rb +182 -0
  164. data/lib/modern_treasury/models/ledger_event_handler_conditions.rb +78 -0
  165. data/lib/modern_treasury/models/ledger_event_handler_create_request.rb +119 -0
  166. data/lib/modern_treasury/models/ledger_event_handler_ledger_entries.rb +80 -0
  167. data/lib/modern_treasury/models/ledger_event_handler_ledger_transaction_template.rb +103 -0
  168. data/lib/modern_treasury/models/ledger_transaction.rb +259 -0
  169. data/lib/modern_treasury/models/ledger_transaction_create_request.rb +164 -0
  170. data/lib/modern_treasury/models/ledger_transaction_reversal_create_request.rb +142 -0
  171. data/lib/modern_treasury/models/ledger_transaction_update_request.rb +115 -0
  172. data/lib/modern_treasury/models/ledger_transaction_version.rb +254 -0
  173. data/lib/modern_treasury/models/ledger_type_enum.rb +37 -0
  174. data/lib/modern_treasury/models/ledger_update_request.rb +84 -0
  175. data/lib/modern_treasury/models/ledgerable_event.rb +206 -0
  176. data/lib/modern_treasury/models/ledgerable_event_create_request.rb +140 -0
  177. data/lib/modern_treasury/models/ledgerable_type2_enum.rb +71 -0
  178. data/lib/modern_treasury/models/ledgerable_type5_enum.rb +69 -0
  179. data/lib/modern_treasury/models/ledgerable_type6_enum.rb +68 -0
  180. data/lib/modern_treasury/models/ledgerable_type_enum.rb +38 -0
  181. data/lib/modern_treasury/models/legacy_document_create_request.rb +70 -0
  182. data/lib/modern_treasury/models/line_item.rb +200 -0
  183. data/lib/modern_treasury/models/line_item_request.rb +98 -0
  184. data/lib/modern_treasury/models/line_item_update_request.rb +63 -0
  185. data/lib/modern_treasury/models/mreturn.rb +425 -0
  186. data/lib/modern_treasury/models/normal_balance2_enum.rb +36 -0
  187. data/lib/modern_treasury/models/normal_balance_enum.rb +36 -0
  188. data/lib/modern_treasury/models/order_by.rb +72 -0
  189. data/lib/modern_treasury/models/originating_account_number_type_enum.rb +48 -0
  190. data/lib/modern_treasury/models/originating_routing_number_type_enum.rb +68 -0
  191. data/lib/modern_treasury/models/paper_item.rb +249 -0
  192. data/lib/modern_treasury/models/party_address.rb +106 -0
  193. data/lib/modern_treasury/models/party_type5_enum.rb +36 -0
  194. data/lib/modern_treasury/models/party_type_enum.rb +36 -0
  195. data/lib/modern_treasury/models/payment_direction_enum.rb +36 -0
  196. data/lib/modern_treasury/models/payment_flow.rb +230 -0
  197. data/lib/modern_treasury/models/payment_flow_create_request.rb +103 -0
  198. data/lib/modern_treasury/models/payment_flow_update_request.rb +61 -0
  199. data/lib/modern_treasury/models/payment_method1_enum.rb +46 -0
  200. data/lib/modern_treasury/models/payment_method_enum.rb +42 -0
  201. data/lib/modern_treasury/models/payment_order.rb +820 -0
  202. data/lib/modern_treasury/models/payment_order_async_create_request.rb +536 -0
  203. data/lib/modern_treasury/models/payment_order_create_request.rb +556 -0
  204. data/lib/modern_treasury/models/payment_order_update_request.rb +543 -0
  205. data/lib/modern_treasury/models/payment_reference.rb +175 -0
  206. data/lib/modern_treasury/models/payment_reference_object.rb +156 -0
  207. data/lib/modern_treasury/models/payment_type13_enum.rb +96 -0
  208. data/lib/modern_treasury/models/payment_type1_enum.rb +97 -0
  209. data/lib/modern_treasury/models/payment_type2_enum.rb +96 -0
  210. data/lib/modern_treasury/models/payment_type4_enum.rb +96 -0
  211. data/lib/modern_treasury/models/payment_type5_enum.rb +36 -0
  212. data/lib/modern_treasury/models/payment_type6_enum.rb +97 -0
  213. data/lib/modern_treasury/models/payment_type_enum.rb +37 -0
  214. data/lib/modern_treasury/models/ping_response.rb +60 -0
  215. data/lib/modern_treasury/models/priority4_enum.rb +36 -0
  216. data/lib/modern_treasury/models/priority_enum.rb +38 -0
  217. data/lib/modern_treasury/models/reason1_enum.rb +50 -0
  218. data/lib/modern_treasury/models/reason_enum.rb +48 -0
  219. data/lib/modern_treasury/models/receiving_account.rb +304 -0
  220. data/lib/modern_treasury/models/receiving_account1.rb +219 -0
  221. data/lib/modern_treasury/models/receiving_account_type_enum.rb +36 -0
  222. data/lib/modern_treasury/models/reconciliation_method_enum.rb +38 -0
  223. data/lib/modern_treasury/models/reference_number_type1_enum.rb +248 -0
  224. data/lib/modern_treasury/models/reference_number_type_enum.rb +248 -0
  225. data/lib/modern_treasury/models/referenceable_type1_enum.rb +40 -0
  226. data/lib/modern_treasury/models/referenceable_type_enum.rb +41 -0
  227. data/lib/modern_treasury/models/return_create_request.rb +119 -0
  228. data/lib/modern_treasury/models/returnable_type1_enum.rb +48 -0
  229. data/lib/modern_treasury/models/returnable_type_enum.rb +48 -0
  230. data/lib/modern_treasury/models/reversal.rb +151 -0
  231. data/lib/modern_treasury/models/reversal_create_request.rb +86 -0
  232. data/lib/modern_treasury/models/role_enum.rb +36 -0
  233. data/lib/modern_treasury/models/routing_detail.rb +242 -0
  234. data/lib/modern_treasury/models/routing_detail1.rb +83 -0
  235. data/lib/modern_treasury/models/routing_detail_create_request.rb +87 -0
  236. data/lib/modern_treasury/models/routing_number_lookup_request.rb +124 -0
  237. data/lib/modern_treasury/models/routing_number_type1_enum.rb +68 -0
  238. data/lib/modern_treasury/models/routing_number_type7_enum.rb +55 -0
  239. data/lib/modern_treasury/models/routing_number_type8_enum.rb +68 -0
  240. data/lib/modern_treasury/models/routing_number_type_enum.rb +69 -0
  241. data/lib/modern_treasury/models/status11_enum.rb +40 -0
  242. data/lib/modern_treasury/models/status12_enum.rb +40 -0
  243. data/lib/modern_treasury/models/status15_enum.rb +41 -0
  244. data/lib/modern_treasury/models/status16_enum.rb +41 -0
  245. data/lib/modern_treasury/models/status17_enum.rb +45 -0
  246. data/lib/modern_treasury/models/status18_enum.rb +74 -0
  247. data/lib/modern_treasury/models/status19_enum.rb +52 -0
  248. data/lib/modern_treasury/models/status1_enum.rb +40 -0
  249. data/lib/modern_treasury/models/status20_enum.rb +40 -0
  250. data/lib/modern_treasury/models/status21_enum.rb +40 -0
  251. data/lib/modern_treasury/models/status22_enum.rb +40 -0
  252. data/lib/modern_treasury/models/status24_enum.rb +72 -0
  253. data/lib/modern_treasury/models/status2_enum.rb +41 -0
  254. data/lib/modern_treasury/models/status3_enum.rb +72 -0
  255. data/lib/modern_treasury/models/status4_enum.rb +52 -0
  256. data/lib/modern_treasury/models/status5_enum.rb +48 -0
  257. data/lib/modern_treasury/models/status6_enum.rb +49 -0
  258. data/lib/modern_treasury/models/status7_enum.rb +37 -0
  259. data/lib/modern_treasury/models/status8_enum.rb +37 -0
  260. data/lib/modern_treasury/models/status9_enum.rb +41 -0
  261. data/lib/modern_treasury/models/status_enum.rb +45 -0
  262. data/lib/modern_treasury/models/subtype_enum.rb +71 -0
  263. data/lib/modern_treasury/models/supported_payment_type_enum.rb +96 -0
  264. data/lib/modern_treasury/models/transactable_type_enum.rb +53 -0
  265. data/lib/modern_treasury/models/transaction.rb +311 -0
  266. data/lib/modern_treasury/models/transaction_line_item.rb +211 -0
  267. data/lib/modern_treasury/models/type10_enum.rb +64 -0
  268. data/lib/modern_treasury/models/type11_enum.rb +97 -0
  269. data/lib/modern_treasury/models/type12_enum.rb +37 -0
  270. data/lib/modern_treasury/models/type13_enum.rb +96 -0
  271. data/lib/modern_treasury/models/type14_enum.rb +64 -0
  272. data/lib/modern_treasury/models/type16_enum.rb +36 -0
  273. data/lib/modern_treasury/models/type1_enum.rb +97 -0
  274. data/lib/modern_treasury/models/type4_enum.rb +65 -0
  275. data/lib/modern_treasury/models/type5_enum.rb +97 -0
  276. data/lib/modern_treasury/models/type6_enum.rb +77 -0
  277. data/lib/modern_treasury/models/type_enum.rb +37 -0
  278. data/lib/modern_treasury/models/vendor_code_type1_enum.rb +111 -0
  279. data/lib/modern_treasury/models/vendor_code_type_enum.rb +108 -0
  280. data/lib/modern_treasury/models/verification_status1_enum.rb +44 -0
  281. data/lib/modern_treasury/models/verification_status_enum.rb +40 -0
  282. data/lib/modern_treasury/models/virtual_account.rb +247 -0
  283. data/lib/modern_treasury/models/virtual_account_create_request.rb +172 -0
  284. data/lib/modern_treasury/models/virtual_account_update_request.rb +85 -0
  285. data/lib/modern_treasury/utilities/date_time_helper.rb +11 -0
  286. data/lib/modern_treasury/utilities/file_wrapper.rb +28 -0
  287. data/lib/modern_treasury/utilities/union_type_lookup.rb +32 -0
  288. data/lib/modern_treasury.rb +316 -0
  289. data/test/controllers/controller_test_base.rb +23 -0
  290. data/test/controllers/test_account_collection_flow_controller.rb +64 -0
  291. data/test/controllers/test_connection_controller.rb +41 -0
  292. data/test/controllers/test_counterparty_controller.rb +65 -0
  293. data/test/controllers/test_document_controller.rb +41 -0
  294. data/test/controllers/test_event_controller.rb +46 -0
  295. data/test/controllers/test_expected_payment_controller.rb +71 -0
  296. data/test/controllers/test_external_account_controller.rb +63 -0
  297. data/test/controllers/test_incoming_payment_detail_controller.rb +68 -0
  298. data/test/controllers/test_internal_account_controller.rb +65 -0
  299. data/test/controllers/test_invoice_controller.rb +56 -0
  300. data/test/controllers/test_ledger_account_category_controller.rb +67 -0
  301. data/test/controllers/test_ledger_account_controller.rb +70 -0
  302. data/test/controllers/test_ledger_account_payout_controller.rb +62 -0
  303. data/test/controllers/test_ledger_account_statement_controller.rb +36 -0
  304. data/test/controllers/test_ledger_controller.rb +59 -0
  305. data/test/controllers/test_ledger_entry_controller.rb +65 -0
  306. data/test/controllers/test_ledger_event_handler_controller.rb +63 -0
  307. data/test/controllers/test_ledger_transaction_controller.rb +112 -0
  308. data/test/controllers/test_ledgerable_event_controller.rb +36 -0
  309. data/test/controllers/test_paper_item_controller.rb +43 -0
  310. data/test/controllers/test_payment_flow_controller.rb +67 -0
  311. data/test/controllers/test_payment_order_controller.rb +76 -0
  312. data/test/controllers/test_payment_reference_controller.rb +43 -0
  313. data/test/controllers/test_ping_controller.rb +31 -0
  314. data/test/controllers/test_return_controller.rb +64 -0
  315. data/test/controllers/test_transaction_controller.rb +56 -0
  316. data/test/controllers/test_virtual_account_controller.rb +63 -0
  317. data/test/http_response_catcher.rb +19 -0
  318. metadata +429 -0
@@ -0,0 +1,75 @@
1
+ # modern_treasury
2
+ #
3
+ # This file was automatically generated by APIMATIC v3.0 (
4
+ # https://www.apimatic.io ).
5
+
6
+ module ModernTreasury
7
+ # ContactDetailCreateRequest Model.
8
+ class ContactDetailCreateRequest < BaseModel
9
+ SKIP = Object.new
10
+ private_constant :SKIP
11
+
12
+ # TODO: Write general description for this method
13
+ # @return [String]
14
+ attr_accessor :contact_identifier
15
+
16
+ # TODO: Write general description for this method
17
+ # @return [ContactIdentifierTypeEnum]
18
+ attr_accessor :contact_identifier_type
19
+
20
+ # A mapping from model property names to API property names.
21
+ def self.names
22
+ @_hash = {} if @_hash.nil?
23
+ @_hash['contact_identifier'] = 'contact_identifier'
24
+ @_hash['contact_identifier_type'] = 'contact_identifier_type'
25
+ @_hash
26
+ end
27
+
28
+ # An array for optional fields
29
+ def self.optionals
30
+ %w[
31
+ contact_identifier
32
+ contact_identifier_type
33
+ ]
34
+ end
35
+
36
+ # An array for nullable fields
37
+ def self.nullables
38
+ []
39
+ end
40
+
41
+ def initialize(contact_identifier = SKIP, contact_identifier_type = SKIP)
42
+ @contact_identifier = contact_identifier unless contact_identifier == SKIP
43
+ @contact_identifier_type = contact_identifier_type unless contact_identifier_type == SKIP
44
+ end
45
+
46
+ # Creates an instance of the object from a hash.
47
+ def self.from_hash(hash)
48
+ return nil unless hash
49
+
50
+ # Extract variables from the hash.
51
+ contact_identifier =
52
+ hash.key?('contact_identifier') ? hash['contact_identifier'] : SKIP
53
+ contact_identifier_type =
54
+ hash.key?('contact_identifier_type') ? hash['contact_identifier_type'] : SKIP
55
+
56
+ # Create object from extracted values.
57
+ ContactDetailCreateRequest.new(contact_identifier,
58
+ contact_identifier_type)
59
+ end
60
+
61
+ # Provides a human-readable string representation of the object.
62
+ def to_s
63
+ class_name = self.class.name.split('::').last
64
+ "<#{class_name} contact_identifier: #{@contact_identifier}, contact_identifier_type:"\
65
+ " #{@contact_identifier_type}>"
66
+ end
67
+
68
+ # Provides a debugging-friendly string with detailed object information.
69
+ def inspect
70
+ class_name = self.class.name.split('::').last
71
+ "<#{class_name} contact_identifier: #{@contact_identifier.inspect},"\
72
+ " contact_identifier_type: #{@contact_identifier_type.inspect}>"
73
+ end
74
+ end
75
+ end
@@ -0,0 +1,40 @@
1
+ # modern_treasury
2
+ #
3
+ # This file was automatically generated by APIMATIC v3.0 (
4
+ # https://www.apimatic.io ).
5
+
6
+ module ModernTreasury
7
+ # ContactIdentifierType.
8
+ class ContactIdentifierTypeEnum
9
+ CONTACT_IDENTIFIER_TYPE_ENUM = [
10
+ # TODO: Write general description for EMAIL
11
+ EMAIL = 'email'.freeze,
12
+
13
+ # TODO: Write general description for PHONE_NUMBER
14
+ PHONE_NUMBER = 'phone_number'.freeze,
15
+
16
+ # TODO: Write general description for WEBSITE
17
+ WEBSITE = 'website'.freeze
18
+ ].freeze
19
+
20
+ def self.validate(value)
21
+ return false if value.nil?
22
+
23
+ CONTACT_IDENTIFIER_TYPE_ENUM.include?(value)
24
+ end
25
+
26
+ def self.from_value(value, default_value = EMAIL)
27
+ return default_value if value.nil?
28
+
29
+ str = value.to_s.strip
30
+
31
+ case str.downcase
32
+ when 'email' then EMAIL
33
+ when 'phone_number' then PHONE_NUMBER
34
+ when 'website' then WEBSITE
35
+ else
36
+ default_value
37
+ end
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,36 @@
1
+ # modern_treasury
2
+ #
3
+ # This file was automatically generated by APIMATIC v3.0 (
4
+ # https://www.apimatic.io ).
5
+
6
+ module ModernTreasury
7
+ # Content-Type.
8
+ class ContentTypeEnum
9
+ CONTENT_TYPE_ENUM = [
10
+ # TODO: Write general description for ENUM_APPLICATIONJSON
11
+ ENUM_APPLICATIONJSON = 'application/json'.freeze,
12
+
13
+ # TODO: Write general description for ENUM_MULTIPARTFORMDATA
14
+ ENUM_MULTIPARTFORMDATA = 'multipart/form-data'.freeze
15
+ ].freeze
16
+
17
+ def self.validate(value)
18
+ return false if value.nil?
19
+
20
+ CONTENT_TYPE_ENUM.include?(value)
21
+ end
22
+
23
+ def self.from_value(value, default_value = ENUM_APPLICATIONJSON)
24
+ return default_value if value.nil?
25
+
26
+ str = value.to_s.strip
27
+
28
+ case str.downcase
29
+ when 'enum_applicationjson' then ENUM_APPLICATIONJSON
30
+ when 'enum_multipartformdata' then ENUM_MULTIPARTFORMDATA
31
+ else
32
+ default_value
33
+ end
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,200 @@
1
+ # modern_treasury
2
+ #
3
+ # This file was automatically generated by APIMATIC v3.0 (
4
+ # https://www.apimatic.io ).
5
+
6
+ require 'date'
7
+ module ModernTreasury
8
+ # Counterparty Model.
9
+ class Counterparty < BaseModel
10
+ SKIP = Object.new
11
+ private_constant :SKIP
12
+
13
+ # TODO: Write general description for this method
14
+ # @return [UUID | String]
15
+ attr_accessor :id
16
+
17
+ # TODO: Write general description for this method
18
+ # @return [String]
19
+ attr_accessor :object
20
+
21
+ # This field will be true if this object exists in the live environment or
22
+ # false if it exists in the test environment.
23
+ # @return [TrueClass | FalseClass]
24
+ attr_accessor :live_mode
25
+
26
+ # This field will be true if this object exists in the live environment or
27
+ # false if it exists in the test environment.
28
+ # @return [DateTime]
29
+ attr_accessor :created_at
30
+
31
+ # This field will be true if this object exists in the live environment or
32
+ # false if it exists in the test environment.
33
+ # @return [DateTime]
34
+ attr_accessor :updated_at
35
+
36
+ # This field will be true if this object exists in the live environment or
37
+ # false if it exists in the test environment.
38
+ # @return [DateTime]
39
+ attr_accessor :discarded_at
40
+
41
+ # A human friendly name for this counterparty.
42
+ # @return [String]
43
+ attr_accessor :name
44
+
45
+ # The accounts for this counterparty.
46
+ # @return [Array[Account]]
47
+ attr_accessor :accounts
48
+
49
+ # The counterparty's email.
50
+ # @return [String]
51
+ attr_accessor :email
52
+
53
+ # Additional data represented as key-value pairs. Both the key and value
54
+ # must be strings.
55
+ # @return [Hash[String, String]]
56
+ attr_accessor :metadata
57
+
58
+ # Send an email to the counterparty whenever an associated payment order is
59
+ # sent to the bank.
60
+ # @return [TrueClass | FalseClass]
61
+ attr_accessor :send_remittance_advice
62
+
63
+ # The verification status of the counterparty.
64
+ # @return [VerificationStatus1Enum]
65
+ attr_accessor :verification_status
66
+
67
+ # A mapping from model property names to API property names.
68
+ def self.names
69
+ @_hash = {} if @_hash.nil?
70
+ @_hash['id'] = 'id'
71
+ @_hash['object'] = 'object'
72
+ @_hash['live_mode'] = 'live_mode'
73
+ @_hash['created_at'] = 'created_at'
74
+ @_hash['updated_at'] = 'updated_at'
75
+ @_hash['discarded_at'] = 'discarded_at'
76
+ @_hash['name'] = 'name'
77
+ @_hash['accounts'] = 'accounts'
78
+ @_hash['email'] = 'email'
79
+ @_hash['metadata'] = 'metadata'
80
+ @_hash['send_remittance_advice'] = 'send_remittance_advice'
81
+ @_hash['verification_status'] = 'verification_status'
82
+ @_hash
83
+ end
84
+
85
+ # An array for optional fields
86
+ def self.optionals
87
+ []
88
+ end
89
+
90
+ # An array for nullable fields
91
+ def self.nullables
92
+ %w[
93
+ discarded_at
94
+ name
95
+ email
96
+ ]
97
+ end
98
+
99
+ def initialize(id = nil, object = nil, live_mode = nil, created_at = nil,
100
+ updated_at = nil, discarded_at = nil, name = nil,
101
+ accounts = nil, email = nil, metadata = nil,
102
+ send_remittance_advice = nil, verification_status = nil)
103
+ @id = id
104
+ @object = object
105
+ @live_mode = live_mode
106
+ @created_at = created_at
107
+ @updated_at = updated_at
108
+ @discarded_at = discarded_at
109
+ @name = name
110
+ @accounts = accounts
111
+ @email = email
112
+ @metadata = metadata
113
+ @send_remittance_advice = send_remittance_advice
114
+ @verification_status = verification_status
115
+ end
116
+
117
+ # Creates an instance of the object from a hash.
118
+ def self.from_hash(hash)
119
+ return nil unless hash
120
+
121
+ # Extract variables from the hash.
122
+ id = hash.key?('id') ? hash['id'] : nil
123
+ object = hash.key?('object') ? hash['object'] : nil
124
+ live_mode = hash.key?('live_mode') ? hash['live_mode'] : nil
125
+ created_at = if hash.key?('created_at')
126
+ (DateTimeHelper.from_rfc3339(hash['created_at']) if hash['created_at'])
127
+ end
128
+ updated_at = if hash.key?('updated_at')
129
+ (DateTimeHelper.from_rfc3339(hash['updated_at']) if hash['updated_at'])
130
+ end
131
+ discarded_at = if hash.key?('discarded_at')
132
+ (DateTimeHelper.from_rfc3339(hash['discarded_at']) if hash['discarded_at'])
133
+ end
134
+ name = hash.key?('name') ? hash['name'] : nil
135
+ # Parameter is an array, so we need to iterate through it
136
+ accounts = nil
137
+ unless hash['accounts'].nil?
138
+ accounts = []
139
+ hash['accounts'].each do |structure|
140
+ accounts << (Account.from_hash(structure) if structure)
141
+ end
142
+ end
143
+
144
+ accounts = nil unless hash.key?('accounts')
145
+ email = hash.key?('email') ? hash['email'] : nil
146
+ metadata = hash.key?('metadata') ? hash['metadata'] : nil
147
+ send_remittance_advice =
148
+ hash.key?('send_remittance_advice') ? hash['send_remittance_advice'] : nil
149
+ verification_status =
150
+ hash.key?('verification_status') ? hash['verification_status'] : nil
151
+
152
+ # Create object from extracted values.
153
+ Counterparty.new(id,
154
+ object,
155
+ live_mode,
156
+ created_at,
157
+ updated_at,
158
+ discarded_at,
159
+ name,
160
+ accounts,
161
+ email,
162
+ metadata,
163
+ send_remittance_advice,
164
+ verification_status)
165
+ end
166
+
167
+ def to_custom_created_at
168
+ DateTimeHelper.to_rfc3339(created_at)
169
+ end
170
+
171
+ def to_custom_updated_at
172
+ DateTimeHelper.to_rfc3339(updated_at)
173
+ end
174
+
175
+ def to_custom_discarded_at
176
+ DateTimeHelper.to_rfc3339(discarded_at)
177
+ end
178
+
179
+ # Provides a human-readable string representation of the object.
180
+ def to_s
181
+ class_name = self.class.name.split('::').last
182
+ "<#{class_name} id: #{@id}, object: #{@object}, live_mode: #{@live_mode}, created_at:"\
183
+ " #{@created_at}, updated_at: #{@updated_at}, discarded_at: #{@discarded_at}, name:"\
184
+ " #{@name}, accounts: #{@accounts}, email: #{@email}, metadata: #{@metadata},"\
185
+ " send_remittance_advice: #{@send_remittance_advice}, verification_status:"\
186
+ " #{@verification_status}>"
187
+ end
188
+
189
+ # Provides a debugging-friendly string with detailed object information.
190
+ def inspect
191
+ class_name = self.class.name.split('::').last
192
+ "<#{class_name} id: #{@id.inspect}, object: #{@object.inspect}, live_mode:"\
193
+ " #{@live_mode.inspect}, created_at: #{@created_at.inspect}, updated_at:"\
194
+ " #{@updated_at.inspect}, discarded_at: #{@discarded_at.inspect}, name: #{@name.inspect},"\
195
+ " accounts: #{@accounts.inspect}, email: #{@email.inspect}, metadata: #{@metadata.inspect},"\
196
+ " send_remittance_advice: #{@send_remittance_advice.inspect}, verification_status:"\
197
+ " #{@verification_status.inspect}>"
198
+ end
199
+ end
200
+ end
@@ -0,0 +1,106 @@
1
+ # modern_treasury
2
+ #
3
+ # This file was automatically generated by APIMATIC v3.0 (
4
+ # https://www.apimatic.io ).
5
+
6
+ module ModernTreasury
7
+ # The counterparty's billing address.
8
+ class CounterpartyBillingAddress < BaseModel
9
+ SKIP = Object.new
10
+ private_constant :SKIP
11
+
12
+ # TODO: Write general description for this method
13
+ # @return [String]
14
+ attr_accessor :line1
15
+
16
+ # TODO: Write general description for this method
17
+ # @return [String]
18
+ attr_accessor :line2
19
+
20
+ # Locality or City.
21
+ # @return [String]
22
+ attr_accessor :locality
23
+
24
+ # Region or State.
25
+ # @return [String]
26
+ attr_accessor :region
27
+
28
+ # The postal code of the address.
29
+ # @return [String]
30
+ attr_accessor :postal_code
31
+
32
+ # Country code conforms to [ISO 3166-1 alpha-2]
33
+ # @return [String]
34
+ attr_accessor :country
35
+
36
+ # A mapping from model property names to API property names.
37
+ def self.names
38
+ @_hash = {} if @_hash.nil?
39
+ @_hash['line1'] = 'line1'
40
+ @_hash['line2'] = 'line2'
41
+ @_hash['locality'] = 'locality'
42
+ @_hash['region'] = 'region'
43
+ @_hash['postal_code'] = 'postal_code'
44
+ @_hash['country'] = 'country'
45
+ @_hash
46
+ end
47
+
48
+ # An array for optional fields
49
+ def self.optionals
50
+ %w[
51
+ line2
52
+ ]
53
+ end
54
+
55
+ # An array for nullable fields
56
+ def self.nullables
57
+ []
58
+ end
59
+
60
+ def initialize(line1 = nil, locality = nil, region = nil, postal_code = nil,
61
+ country = nil, line2 = SKIP)
62
+ @line1 = line1
63
+ @line2 = line2 unless line2 == SKIP
64
+ @locality = locality
65
+ @region = region
66
+ @postal_code = postal_code
67
+ @country = country
68
+ end
69
+
70
+ # Creates an instance of the object from a hash.
71
+ def self.from_hash(hash)
72
+ return nil unless hash
73
+
74
+ # Extract variables from the hash.
75
+ line1 = hash.key?('line1') ? hash['line1'] : nil
76
+ locality = hash.key?('locality') ? hash['locality'] : nil
77
+ region = hash.key?('region') ? hash['region'] : nil
78
+ postal_code = hash.key?('postal_code') ? hash['postal_code'] : nil
79
+ country = hash.key?('country') ? hash['country'] : nil
80
+ line2 = hash.key?('line2') ? hash['line2'] : SKIP
81
+
82
+ # Create object from extracted values.
83
+ CounterpartyBillingAddress.new(line1,
84
+ locality,
85
+ region,
86
+ postal_code,
87
+ country,
88
+ line2)
89
+ end
90
+
91
+ # Provides a human-readable string representation of the object.
92
+ def to_s
93
+ class_name = self.class.name.split('::').last
94
+ "<#{class_name} line1: #{@line1}, line2: #{@line2}, locality: #{@locality}, region:"\
95
+ " #{@region}, postal_code: #{@postal_code}, country: #{@country}>"
96
+ end
97
+
98
+ # Provides a debugging-friendly string with detailed object information.
99
+ def inspect
100
+ class_name = self.class.name.split('::').last
101
+ "<#{class_name} line1: #{@line1.inspect}, line2: #{@line2.inspect}, locality:"\
102
+ " #{@locality.inspect}, region: #{@region.inspect}, postal_code: #{@postal_code.inspect},"\
103
+ " country: #{@country.inspect}>"
104
+ end
105
+ end
106
+ end
@@ -0,0 +1,104 @@
1
+ # modern_treasury
2
+ #
3
+ # This file was automatically generated by APIMATIC v3.0 (
4
+ # https://www.apimatic.io ).
5
+
6
+ module ModernTreasury
7
+ # CounterpartyCollectAccountRequest Model.
8
+ class CounterpartyCollectAccountRequest < BaseModel
9
+ SKIP = Object.new
10
+ private_constant :SKIP
11
+
12
+ # One of `credit` or `debit`. Use `credit` when you want to pay a
13
+ # counterparty. Use `debit` when you need to charge a counterparty. This
14
+ # field helps us send a more tailored email to your counterparties."
15
+ # @return [DirectionEnum]
16
+ attr_accessor :direction
17
+
18
+ # By default, Modern Treasury will send an email to your counterparty that
19
+ # includes a link to the form they must fill out. However, if you would like
20
+ # to send the counterparty the link, you can set this parameter to `false`.
21
+ # The JSON body will include the link to the secure Modern Treasury form.
22
+ # @return [TrueClass | FalseClass]
23
+ attr_accessor :send_email
24
+
25
+ # The list of fields you want on the form. This field is optional and if it
26
+ # is not set, will default to [\"nameOnAccount\", \"accountType\",
27
+ # \"accountNumber\", \"routingNumber\", \"address\"]. The full list of
28
+ # options is [\"name\", \"nameOnAccount\", \"taxpayerIdentifier\",
29
+ # \"accountType\", \"accountNumber\", \"routingNumber\", \"address\",
30
+ # \"ibanNumber\", \"swiftCode\"].
31
+ # @return [Array[FieldEnum]]
32
+ attr_accessor :fields
33
+
34
+ # The URL you want your customer to visit upon filling out the form. By
35
+ # default, they will be sent to a Modern Treasury landing page. This must be
36
+ # a valid HTTPS URL if set.
37
+ # @return [String]
38
+ attr_accessor :custom_redirect
39
+
40
+ # A mapping from model property names to API property names.
41
+ def self.names
42
+ @_hash = {} if @_hash.nil?
43
+ @_hash['direction'] = 'direction'
44
+ @_hash['send_email'] = 'send_email'
45
+ @_hash['fields'] = 'fields'
46
+ @_hash['custom_redirect'] = 'custom_redirect'
47
+ @_hash
48
+ end
49
+
50
+ # An array for optional fields
51
+ def self.optionals
52
+ %w[
53
+ send_email
54
+ fields
55
+ custom_redirect
56
+ ]
57
+ end
58
+
59
+ # An array for nullable fields
60
+ def self.nullables
61
+ []
62
+ end
63
+
64
+ def initialize(direction = nil, send_email = SKIP, fields = SKIP,
65
+ custom_redirect = SKIP)
66
+ @direction = direction
67
+ @send_email = send_email unless send_email == SKIP
68
+ @fields = fields unless fields == SKIP
69
+ @custom_redirect = custom_redirect unless custom_redirect == SKIP
70
+ end
71
+
72
+ # Creates an instance of the object from a hash.
73
+ def self.from_hash(hash)
74
+ return nil unless hash
75
+
76
+ # Extract variables from the hash.
77
+ direction = hash.key?('direction') ? hash['direction'] : nil
78
+ send_email = hash.key?('send_email') ? hash['send_email'] : SKIP
79
+ fields = hash.key?('fields') ? hash['fields'] : SKIP
80
+ custom_redirect =
81
+ hash.key?('custom_redirect') ? hash['custom_redirect'] : SKIP
82
+
83
+ # Create object from extracted values.
84
+ CounterpartyCollectAccountRequest.new(direction,
85
+ send_email,
86
+ fields,
87
+ custom_redirect)
88
+ end
89
+
90
+ # Provides a human-readable string representation of the object.
91
+ def to_s
92
+ class_name = self.class.name.split('::').last
93
+ "<#{class_name} direction: #{@direction}, send_email: #{@send_email}, fields: #{@fields},"\
94
+ " custom_redirect: #{@custom_redirect}>"
95
+ end
96
+
97
+ # Provides a debugging-friendly string with detailed object information.
98
+ def inspect
99
+ class_name = self.class.name.split('::').last
100
+ "<#{class_name} direction: #{@direction.inspect}, send_email: #{@send_email.inspect},"\
101
+ " fields: #{@fields.inspect}, custom_redirect: #{@custom_redirect.inspect}>"
102
+ end
103
+ end
104
+ end
@@ -0,0 +1,82 @@
1
+ # modern_treasury
2
+ #
3
+ # This file was automatically generated by APIMATIC v3.0 (
4
+ # https://www.apimatic.io ).
5
+
6
+ module ModernTreasury
7
+ # CounterpartyCollectAccountResponse Model.
8
+ class CounterpartyCollectAccountResponse < BaseModel
9
+ SKIP = Object.new
10
+ private_constant :SKIP
11
+
12
+ # The id of the existing counterparty.
13
+ # @return [String]
14
+ attr_accessor :id
15
+
16
+ # This field will be `true` if an email requesting account details has
17
+ # already been sent to this counterparty.
18
+ # @return [TrueClass | FalseClass]
19
+ attr_accessor :is_resend
20
+
21
+ # This is the link to the secure Modern Treasury form. By default, Modern
22
+ # Treasury will send an email to your counterparty that includes a link to
23
+ # this form. However, if `send_email` is passed as `false` in the body then
24
+ # Modern Treasury will not send the email and you can send it to the
25
+ # counterparty directly.
26
+ # @return [String]
27
+ attr_accessor :form_link
28
+
29
+ # A mapping from model property names to API property names.
30
+ def self.names
31
+ @_hash = {} if @_hash.nil?
32
+ @_hash['id'] = 'id'
33
+ @_hash['is_resend'] = 'is_resend'
34
+ @_hash['form_link'] = 'form_link'
35
+ @_hash
36
+ end
37
+
38
+ # An array for optional fields
39
+ def self.optionals
40
+ []
41
+ end
42
+
43
+ # An array for nullable fields
44
+ def self.nullables
45
+ []
46
+ end
47
+
48
+ def initialize(id = nil, is_resend = nil, form_link = nil)
49
+ @id = id
50
+ @is_resend = is_resend
51
+ @form_link = form_link
52
+ end
53
+
54
+ # Creates an instance of the object from a hash.
55
+ def self.from_hash(hash)
56
+ return nil unless hash
57
+
58
+ # Extract variables from the hash.
59
+ id = hash.key?('id') ? hash['id'] : nil
60
+ is_resend = hash.key?('is_resend') ? hash['is_resend'] : nil
61
+ form_link = hash.key?('form_link') ? hash['form_link'] : nil
62
+
63
+ # Create object from extracted values.
64
+ CounterpartyCollectAccountResponse.new(id,
65
+ is_resend,
66
+ form_link)
67
+ end
68
+
69
+ # Provides a human-readable string representation of the object.
70
+ def to_s
71
+ class_name = self.class.name.split('::').last
72
+ "<#{class_name} id: #{@id}, is_resend: #{@is_resend}, form_link: #{@form_link}>"
73
+ end
74
+
75
+ # Provides a debugging-friendly string with detailed object information.
76
+ def inspect
77
+ class_name = self.class.name.split('::').last
78
+ "<#{class_name} id: #{@id.inspect}, is_resend: #{@is_resend.inspect}, form_link:"\
79
+ " #{@form_link.inspect}>"
80
+ end
81
+ end
82
+ end