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,188 @@
1
+ # modern_treasury
2
+ #
3
+ # This file was automatically generated by APIMATIC v3.0 (
4
+ # https://www.apimatic.io ).
5
+
6
+ module ModernTreasury
7
+ # CounterpartyController
8
+ class CounterpartyController < BaseController
9
+ # Send an email requesting account details.
10
+ # @param [String] id Required parameter: counterparty id
11
+ # @param [String] idempotency_key Optional parameter: This key should be
12
+ # something unique, preferably something like an UUID.
13
+ # @param [CounterpartyCollectAccountRequest] body Optional parameter: TODO:
14
+ # type description here
15
+ # @return [CounterpartyCollectAccountResponse] Response from the API call.
16
+ def collect_account_details(id,
17
+ idempotency_key: nil,
18
+ body: nil)
19
+ @api_call
20
+ .request(new_request_builder(HttpMethodEnum::POST,
21
+ '/api/counterparties/{id}/collect_account',
22
+ Server::DEFAULT)
23
+ .template_param(new_parameter(id, key: 'id')
24
+ .should_encode(true))
25
+ .header_param(new_parameter('application/json', key: 'Content-Type'))
26
+ .header_param(new_parameter(idempotency_key, key: 'Idempotency-Key'))
27
+ .body_param(new_parameter(body))
28
+ .header_param(new_parameter('application/json', key: 'accept'))
29
+ .body_serializer(proc do |param| param.to_json unless param.nil? end)
30
+ .auth(Single.new('basic_auth')))
31
+ .response(new_response_handler
32
+ .deserializer(APIHelper.method(:custom_type_deserializer))
33
+ .deserialize_into(CounterpartyCollectAccountResponse.method(:from_hash))
34
+ .local_error('422',
35
+ 'unsuccessful',
36
+ ErrorMessageException))
37
+ .execute
38
+ end
39
+
40
+ # Get a paginated list of all counterparties.
41
+ # @param [Integer] per_page Optional parameter: TODO: type description
42
+ # here
43
+ # @param [String] name Optional parameter: Performs a partial string match
44
+ # of the name field. This is also case insensitive.
45
+ # @param [String] email Optional parameter: Performs a partial string match
46
+ # of the email field. This is also case insensitive.
47
+ # @param [Hash[String, String]] metadata Optional parameter: For example, if
48
+ # you want to query for records with metadata key `Type` and value `Loan`,
49
+ # the query would be `metadata%5BType%5D=Loan`. This encodes the query
50
+ # parameters.
51
+ # @param [DateTime] created_at_lower_bound Optional parameter: Used to
52
+ # return counterparties created after some datetime.
53
+ # @param [DateTime] created_at_upper_bound Optional parameter: Used to
54
+ # return counterparties created before some datetime.
55
+ # @param [String] after_cursor Optional parameter: TODO: type description
56
+ # here
57
+ # @return [Array[Counterparty]] Response from the API call.
58
+ def list_counterparties(per_page: nil,
59
+ name: nil,
60
+ email: nil,
61
+ metadata: nil,
62
+ created_at_lower_bound: nil,
63
+ created_at_upper_bound: nil,
64
+ after_cursor: nil)
65
+ @api_call
66
+ .request(new_request_builder(HttpMethodEnum::GET,
67
+ '/api/counterparties',
68
+ Server::DEFAULT)
69
+ .query_param(new_parameter(per_page, key: 'per_page'))
70
+ .query_param(new_parameter(name, key: 'name'))
71
+ .query_param(new_parameter(email, key: 'email'))
72
+ .query_param(new_parameter(metadata, key: 'metadata'))
73
+ .query_param(new_parameter(created_at_lower_bound, key: 'created_at_lower_bound'))
74
+ .query_param(new_parameter(created_at_upper_bound, key: 'created_at_upper_bound'))
75
+ .query_param(new_parameter(after_cursor, key: 'after_cursor'))
76
+ .header_param(new_parameter('application/json', key: 'accept'))
77
+ .auth(Single.new('basic_auth')))
78
+ .response(new_response_handler
79
+ .deserializer(APIHelper.method(:custom_type_deserializer))
80
+ .deserialize_into(Counterparty.method(:from_hash))
81
+ .is_response_array(true)
82
+ .local_error('400',
83
+ 'bad_request',
84
+ APIException)
85
+ .local_error('401',
86
+ 'unsuccessful',
87
+ ErrorMessageException))
88
+ .execute
89
+ end
90
+
91
+ # Create a new counterparty.
92
+ # @param [String] idempotency_key Optional parameter: This key should be
93
+ # something unique, preferably something like an UUID.
94
+ # @param [CounterpartyCreateRequest] body Optional parameter: TODO: type
95
+ # description here
96
+ # @return [Counterparty] Response from the API call.
97
+ def create_counterparty(idempotency_key: nil,
98
+ body: nil)
99
+ @api_call
100
+ .request(new_request_builder(HttpMethodEnum::POST,
101
+ '/api/counterparties',
102
+ Server::DEFAULT)
103
+ .header_param(new_parameter('application/json', key: 'Content-Type'))
104
+ .header_param(new_parameter(idempotency_key, key: 'Idempotency-Key'))
105
+ .body_param(new_parameter(body))
106
+ .header_param(new_parameter('application/json', key: 'accept'))
107
+ .body_serializer(proc do |param| param.to_json unless param.nil? end)
108
+ .auth(Single.new('basic_auth')))
109
+ .response(new_response_handler
110
+ .deserializer(APIHelper.method(:custom_type_deserializer))
111
+ .deserialize_into(Counterparty.method(:from_hash))
112
+ .local_error('415',
113
+ 'unsuccessful',
114
+ ErrorMessageException)
115
+ .local_error('422',
116
+ 'unsuccessful',
117
+ ErrorMessageException))
118
+ .execute
119
+ end
120
+
121
+ # Get details on a single counterparty.
122
+ # @param [String] id Required parameter: The id of an existing
123
+ # counterparty.
124
+ # @return [Counterparty] Response from the API call.
125
+ def get_counterparty(id)
126
+ @api_call
127
+ .request(new_request_builder(HttpMethodEnum::GET,
128
+ '/api/counterparties/{id}',
129
+ Server::DEFAULT)
130
+ .template_param(new_parameter(id, key: 'id')
131
+ .should_encode(true))
132
+ .header_param(new_parameter('application/json', key: 'accept'))
133
+ .auth(Single.new('basic_auth')))
134
+ .response(new_response_handler
135
+ .deserializer(APIHelper.method(:custom_type_deserializer))
136
+ .deserialize_into(Counterparty.method(:from_hash))
137
+ .local_error('404',
138
+ 'not found',
139
+ ErrorMessageException))
140
+ .execute
141
+ end
142
+
143
+ # Updates a given counterparty with new information.
144
+ # @param [String] id Required parameter: The id of an existing
145
+ # counterparty.
146
+ # @param [CounterpartyUpdateRequest] body Optional parameter: TODO: type
147
+ # description here
148
+ # @return [Counterparty] Response from the API call.
149
+ def update_counterparty(id,
150
+ body: nil)
151
+ @api_call
152
+ .request(new_request_builder(HttpMethodEnum::PATCH,
153
+ '/api/counterparties/{id}',
154
+ Server::DEFAULT)
155
+ .template_param(new_parameter(id, key: 'id')
156
+ .should_encode(true))
157
+ .header_param(new_parameter('application/json', key: 'Content-Type'))
158
+ .body_param(new_parameter(body))
159
+ .header_param(new_parameter('application/json', key: 'accept'))
160
+ .body_serializer(proc do |param| param.to_json unless param.nil? end)
161
+ .auth(Single.new('basic_auth')))
162
+ .response(new_response_handler
163
+ .deserializer(APIHelper.method(:custom_type_deserializer))
164
+ .deserialize_into(Counterparty.method(:from_hash))
165
+ .local_error('404',
166
+ 'not found',
167
+ ErrorMessageException))
168
+ .execute
169
+ end
170
+
171
+ # Deletes a given counterparty.
172
+ # @param [String] id Required parameter: The id of an existing
173
+ # counterparty.
174
+ # @return [void] Response from the API call.
175
+ def delete_counterparty(id)
176
+ @api_call
177
+ .request(new_request_builder(HttpMethodEnum::DELETE,
178
+ '/api/counterparties/{id}',
179
+ Server::DEFAULT)
180
+ .template_param(new_parameter(id, key: 'id')
181
+ .should_encode(true))
182
+ .auth(Single.new('basic_auth')))
183
+ .response(new_response_handler
184
+ .is_response_void(true))
185
+ .execute
186
+ end
187
+ end
188
+ end
@@ -0,0 +1,285 @@
1
+ # modern_treasury
2
+ #
3
+ # This file was automatically generated by APIMATIC v3.0 (
4
+ # https://www.apimatic.io ).
5
+
6
+ module ModernTreasury
7
+ # DocumentController
8
+ class DocumentController < BaseController
9
+ # Get a list of documents.
10
+ # @param [String] documentable_id Optional parameter: The unique identifier
11
+ # for the associated object.
12
+ # @param [DocumentableType2Enum] documentable_type Optional parameter: The
13
+ # type of the associated object. Currently can be one of `payment_order`,
14
+ # `transaction`, `paper_item`, `expected_payment`, `counterparty`,
15
+ # `organization`, `case`, `internal_account`, `decision`, or
16
+ # `external_account`.
17
+ # @param [Integer] per_page Optional parameter: TODO: type description
18
+ # here
19
+ # @param [String] after_cursor Optional parameter: TODO: type description
20
+ # here
21
+ # @return [Array[Document]] Response from the API call.
22
+ def list_documents(documentable_id: nil,
23
+ documentable_type: nil,
24
+ per_page: nil,
25
+ after_cursor: nil)
26
+ @api_call
27
+ .request(new_request_builder(HttpMethodEnum::GET,
28
+ '/api/documents',
29
+ Server::DEFAULT)
30
+ .query_param(new_parameter(documentable_id, key: 'documentable_id'))
31
+ .query_param(new_parameter(documentable_type, key: 'documentable_type'))
32
+ .query_param(new_parameter(per_page, key: 'per_page'))
33
+ .query_param(new_parameter(after_cursor, key: 'after_cursor'))
34
+ .header_param(new_parameter('application/json', key: 'accept'))
35
+ .auth(Single.new('basic_auth')))
36
+ .response(new_response_handler
37
+ .deserializer(APIHelper.method(:custom_type_deserializer))
38
+ .deserialize_into(Document.method(:from_hash))
39
+ .is_response_array(true)
40
+ .local_error('404',
41
+ 'not found',
42
+ ErrorMessageException))
43
+ .execute
44
+ end
45
+
46
+ # Create a document.
47
+ # @param [String] documentable_id Required parameter: The unique identifier
48
+ # for the associated object.
49
+ # @param [DocumentableType1Enum] documentable_type Required parameter: TODO:
50
+ # type description here
51
+ # @param [File | UploadIO] file Required parameter: TODO: type description
52
+ # here
53
+ # @param [String] idempotency_key Optional parameter: This key should be
54
+ # something unique, preferably something like an UUID.
55
+ # @param [String] document_type Optional parameter: A category given to the
56
+ # document, can be `null`.
57
+ # @return [Document] Response from the API call.
58
+ def create_document(documentable_id,
59
+ documentable_type,
60
+ file,
61
+ idempotency_key: nil,
62
+ document_type: nil)
63
+ @api_call
64
+ .request(new_request_builder(HttpMethodEnum::POST,
65
+ '/api/documents',
66
+ Server::DEFAULT)
67
+ .form_param(new_parameter(documentable_id, key: 'documentable_id'))
68
+ .form_param(new_parameter(documentable_type, key: 'documentable_type'))
69
+ .multipart_param(new_parameter(file, key: 'file')
70
+ .default_content_type('application/octet-stream'))
71
+ .header_param(new_parameter(idempotency_key, key: 'Idempotency-Key'))
72
+ .form_param(new_parameter(document_type, key: 'document_type'))
73
+ .header_param(new_parameter('application/json', key: 'accept'))
74
+ .auth(Single.new('basic_auth')))
75
+ .response(new_response_handler
76
+ .deserializer(APIHelper.method(:custom_type_deserializer))
77
+ .deserialize_into(Document.method(:from_hash))
78
+ .local_error('403',
79
+ 'forbidden',
80
+ ErrorMessageException)
81
+ .local_error('404',
82
+ 'not found',
83
+ ErrorMessageException))
84
+ .execute
85
+ end
86
+
87
+ # Get a list of documents.
88
+ # @param [String] documentable_id Required parameter: The unique identifier
89
+ # for the associated object.
90
+ # @param [DocumentableType2Enum] documentable_type Required parameter: The
91
+ # type of the associated object. Currently can be one of `payment_order`,
92
+ # `transaction`, `paper_item`, `expected_payment`, `counterparty`,
93
+ # `organization`, `case`, `internal_account`, `decision`, or
94
+ # `external_account`.
95
+ # @param [String] document_type Optional parameter: A category given to the
96
+ # document, can be `null`.
97
+ # @param [String] after_cursor Optional parameter: TODO: type description
98
+ # here
99
+ # @param [Integer] per_page Optional parameter: TODO: type description
100
+ # here
101
+ # @return [Array[Document]] Response from the API call.
102
+ def list_documents1(documentable_id,
103
+ documentable_type,
104
+ document_type: nil,
105
+ after_cursor: nil,
106
+ per_page: nil)
107
+ @api_call
108
+ .request(new_request_builder(HttpMethodEnum::GET,
109
+ '/api/{documentable_type}/{documentable_id}/documents',
110
+ Server::DEFAULT)
111
+ .template_param(new_parameter(documentable_id, key: 'documentable_id')
112
+ .should_encode(true))
113
+ .template_param(new_parameter(documentable_type, key: 'documentable_type')
114
+ .should_encode(true))
115
+ .query_param(new_parameter(document_type, key: 'document_type'))
116
+ .query_param(new_parameter(after_cursor, key: 'after_cursor'))
117
+ .query_param(new_parameter(per_page, key: 'per_page'))
118
+ .header_param(new_parameter('application/json', key: 'accept'))
119
+ .auth(Single.new('basic_auth')))
120
+ .response(new_response_handler
121
+ .deserializer(APIHelper.method(:custom_type_deserializer))
122
+ .deserialize_into(Document.method(:from_hash))
123
+ .is_response_array(true))
124
+ .execute
125
+ end
126
+
127
+ # Create a document.
128
+ # @param [String] documentable_id Required parameter: The unique identifier
129
+ # for the associated object.
130
+ # @param [DocumentableType2Enum] documentable_type Required parameter: The
131
+ # type of the associated object. Currently can be one of `payment_order`,
132
+ # `transaction`, `paper_item`, `expected_payment`, `counterparty`,
133
+ # `organization`, `case`, `internal_account`, `decision`, or
134
+ # `external_account`.
135
+ # @param [File | UploadIO] file Required parameter: TODO: type description
136
+ # here
137
+ # @param [String] idempotency_key Optional parameter: This key should be
138
+ # something unique, preferably something like an UUID.
139
+ # @param [String] document_type Optional parameter: A category given to the
140
+ # document, can be `null`.
141
+ # @return [Document] Response from the API call.
142
+ def create_document1(documentable_id,
143
+ documentable_type,
144
+ file,
145
+ idempotency_key: nil,
146
+ document_type: nil)
147
+ @api_call
148
+ .request(new_request_builder(HttpMethodEnum::POST,
149
+ '/api/{documentable_type}/{documentable_id}/documents',
150
+ Server::DEFAULT)
151
+ .template_param(new_parameter(documentable_id, key: 'documentable_id')
152
+ .should_encode(true))
153
+ .template_param(new_parameter(documentable_type, key: 'documentable_type')
154
+ .should_encode(true))
155
+ .multipart_param(new_parameter(file, key: 'file')
156
+ .default_content_type('application/octet-stream'))
157
+ .header_param(new_parameter(idempotency_key, key: 'Idempotency-Key'))
158
+ .form_param(new_parameter(document_type, key: 'document_type'))
159
+ .header_param(new_parameter('application/json', key: 'accept'))
160
+ .auth(Single.new('basic_auth')))
161
+ .response(new_response_handler
162
+ .deserializer(APIHelper.method(:custom_type_deserializer))
163
+ .deserialize_into(Document.method(:from_hash))
164
+ .local_error('403',
165
+ 'forbidden',
166
+ ErrorMessageException)
167
+ .local_error('404',
168
+ 'not found',
169
+ ErrorMessageException))
170
+ .execute
171
+ end
172
+
173
+ # Get an existing document.
174
+ # @param [String] documentable_id Required parameter: The unique identifier
175
+ # for the associated object.
176
+ # @param [DocumentableType2Enum] documentable_type Required parameter: The
177
+ # type of the associated object. Currently can be one of `payment_order`,
178
+ # `transaction`, `paper_item`, `expected_payment`, `counterparty`,
179
+ # `organization`, `case`, `internal_account`, `decision`, or
180
+ # `external_account`.
181
+ # @param [UUID | String] id Required parameter: The ID of the document.
182
+ # @return [Document] Response from the API call.
183
+ def get_document(documentable_id,
184
+ documentable_type,
185
+ id)
186
+ @api_call
187
+ .request(new_request_builder(HttpMethodEnum::GET,
188
+ '/api/{documentable_type}/{documentable_id}/documents/{id}',
189
+ Server::DEFAULT)
190
+ .template_param(new_parameter(documentable_id, key: 'documentable_id')
191
+ .should_encode(true))
192
+ .template_param(new_parameter(documentable_type, key: 'documentable_type')
193
+ .should_encode(true))
194
+ .template_param(new_parameter(id, key: 'id')
195
+ .should_encode(true))
196
+ .header_param(new_parameter('application/json', key: 'accept'))
197
+ .auth(Single.new('basic_auth')))
198
+ .response(new_response_handler
199
+ .deserializer(APIHelper.method(:custom_type_deserializer))
200
+ .deserialize_into(Document.method(:from_hash))
201
+ .local_error('404',
202
+ 'not found',
203
+ ErrorMessageException))
204
+ .execute
205
+ end
206
+
207
+ # Get an existing document.
208
+ # @param [UUID | String] id Required parameter: The ID of the document.
209
+ # @return [Document] Response from the API call.
210
+ def get_document1(id)
211
+ @api_call
212
+ .request(new_request_builder(HttpMethodEnum::GET,
213
+ '/api/documents/{id}',
214
+ Server::DEFAULT)
215
+ .template_param(new_parameter(id, key: 'id')
216
+ .should_encode(true))
217
+ .header_param(new_parameter('application/json', key: 'accept'))
218
+ .auth(Single.new('basic_auth')))
219
+ .response(new_response_handler
220
+ .deserializer(APIHelper.method(:custom_type_deserializer))
221
+ .deserialize_into(Document.method(:from_hash))
222
+ .local_error('404',
223
+ 'not found',
224
+ ErrorMessageException))
225
+ .execute
226
+ end
227
+
228
+ # Download an existing document.
229
+ # @param [String] documentable_id Required parameter: The unique identifier
230
+ # for the associated object.
231
+ # @param [DocumentableType2Enum] documentable_type Required parameter: The
232
+ # type of the associated object. Currently can be one of `payment_order`,
233
+ # `transaction`, `paper_item`, `expected_payment`, `counterparty`,
234
+ # `organization`, `case`, `internal_account`, `decision`, or
235
+ # `external_account`.
236
+ # @param [UUID | String] id Required parameter: The ID of the document.
237
+ # @return [void] Response from the API call.
238
+ def download_document(documentable_id,
239
+ documentable_type,
240
+ id)
241
+ @api_call
242
+ .request(new_request_builder(HttpMethodEnum::GET,
243
+ '/api/{documentable_type}/{documentable_id}/documents/{id}/download',
244
+ Server::DEFAULT)
245
+ .template_param(new_parameter(documentable_id, key: 'documentable_id')
246
+ .should_encode(true))
247
+ .template_param(new_parameter(documentable_type, key: 'documentable_type')
248
+ .should_encode(true))
249
+ .template_param(new_parameter(id, key: 'id')
250
+ .should_encode(true))
251
+ .auth(Single.new('basic_auth')))
252
+ .response(new_response_handler
253
+ .is_response_void(true)
254
+ .local_error('403',
255
+ 'forbidden',
256
+ ErrorMessageException)
257
+ .local_error('404',
258
+ 'not found',
259
+ ErrorMessageException))
260
+ .execute
261
+ end
262
+
263
+ # Download an existing document.
264
+ # @param [UUID | String] id Required parameter: The ID of the document.
265
+ # @return [void] Response from the API call.
266
+ def download_document1(id)
267
+ @api_call
268
+ .request(new_request_builder(HttpMethodEnum::GET,
269
+ '/api/documents/{id}/download',
270
+ Server::DEFAULT)
271
+ .template_param(new_parameter(id, key: 'id')
272
+ .should_encode(true))
273
+ .auth(Single.new('basic_auth')))
274
+ .response(new_response_handler
275
+ .is_response_void(true)
276
+ .local_error('403',
277
+ 'forbidden',
278
+ ErrorMessageException)
279
+ .local_error('404',
280
+ 'not found',
281
+ ErrorMessageException))
282
+ .execute
283
+ end
284
+ end
285
+ end
@@ -0,0 +1,72 @@
1
+ # modern_treasury
2
+ #
3
+ # This file was automatically generated by APIMATIC v3.0 (
4
+ # https://www.apimatic.io ).
5
+
6
+ module ModernTreasury
7
+ # EventController
8
+ class EventController < BaseController
9
+ # TODO: type endpoint description here
10
+ # @param [Integer] per_page Optional parameter: TODO: type description
11
+ # here
12
+ # @param [DateTime] event_time_start Optional parameter: An inclusive lower
13
+ # bound for when the event occurred
14
+ # @param [DateTime] event_time_end Optional parameter: An inclusive upper
15
+ # bound for when the event occurred
16
+ # @param [String] resource Optional parameter: TODO: type description here
17
+ # @param [String] entity_id Optional parameter: TODO: type description
18
+ # here
19
+ # @param [String] event_name Optional parameter: TODO: type description
20
+ # here
21
+ # @param [String] after_cursor Optional parameter: TODO: type description
22
+ # here
23
+ # @return [Array[Event]] Response from the API call.
24
+ def list_events(per_page: nil,
25
+ event_time_start: nil,
26
+ event_time_end: nil,
27
+ resource: nil,
28
+ entity_id: nil,
29
+ event_name: nil,
30
+ after_cursor: nil)
31
+ @api_call
32
+ .request(new_request_builder(HttpMethodEnum::GET,
33
+ '/api/events',
34
+ Server::DEFAULT)
35
+ .query_param(new_parameter(per_page, key: 'per_page'))
36
+ .query_param(new_parameter(event_time_start, key: 'event_time_start'))
37
+ .query_param(new_parameter(event_time_end, key: 'event_time_end'))
38
+ .query_param(new_parameter(resource, key: 'resource'))
39
+ .query_param(new_parameter(entity_id, key: 'entity_id'))
40
+ .query_param(new_parameter(event_name, key: 'event_name'))
41
+ .query_param(new_parameter(after_cursor, key: 'after_cursor'))
42
+ .header_param(new_parameter('application/json', key: 'accept'))
43
+ .auth(Single.new('basic_auth')))
44
+ .response(new_response_handler
45
+ .deserializer(APIHelper.method(:custom_type_deserializer))
46
+ .deserialize_into(Event.method(:from_hash))
47
+ .is_response_array(true))
48
+ .execute
49
+ end
50
+
51
+ # TODO: type endpoint description here
52
+ # @param [String] id Required parameter: event id
53
+ # @return [Event] Response from the API call.
54
+ def get_event(id)
55
+ @api_call
56
+ .request(new_request_builder(HttpMethodEnum::GET,
57
+ '/api/events/{id}',
58
+ Server::DEFAULT)
59
+ .template_param(new_parameter(id, key: 'id')
60
+ .should_encode(true))
61
+ .header_param(new_parameter('application/json', key: 'accept'))
62
+ .auth(Single.new('basic_auth')))
63
+ .response(new_response_handler
64
+ .deserializer(APIHelper.method(:custom_type_deserializer))
65
+ .deserialize_into(Event.method(:from_hash))
66
+ .local_error('404',
67
+ 'not found',
68
+ ErrorMessageException))
69
+ .execute
70
+ end
71
+ end
72
+ end