payabli 1.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 (683) hide show
  1. checksums.yaml +7 -0
  2. data/.fern/metadata.json +5 -0
  3. data/.fernignore +3 -0
  4. data/.rubocop.yml +39 -0
  5. data/README.md +108 -0
  6. data/Rakefile +20 -0
  7. data/custom.gemspec.rb +16 -0
  8. data/lib/payabli/bill/client.rb +368 -0
  9. data/lib/payabli/bill/types/add_bill_request.rb +13 -0
  10. data/lib/payabli/bill/types/bill_out_data.rb +34 -0
  11. data/lib/payabli/bill/types/bill_out_data_scheduled_options.rb +11 -0
  12. data/lib/payabli/bill/types/bill_response.rb +18 -0
  13. data/lib/payabli/bill/types/bill_response_data.rb +57 -0
  14. data/lib/payabli/bill/types/delete_attached_from_bill_request.rb +13 -0
  15. data/lib/payabli/bill/types/edit_bill_response.rb +16 -0
  16. data/lib/payabli/bill/types/get_attached_from_bill_request.rb +13 -0
  17. data/lib/payabli/bill/types/get_bill_response.rb +19 -0
  18. data/lib/payabli/bill/types/list_bills_org_request.rb +18 -0
  19. data/lib/payabli/bill/types/list_bills_request.rb +18 -0
  20. data/lib/payabli/bill/types/modify_approval_bill_response.rb +11 -0
  21. data/lib/payabli/bill/types/send_to_approval_bill_request.rb +16 -0
  22. data/lib/payabli/bill/types/set_approved_bill_request.rb +13 -0
  23. data/lib/payabli/bill/types/set_approved_bill_response.rb +11 -0
  24. data/lib/payabli/boarding/client.rb +347 -0
  25. data/lib/payabli/boarding/types/add_application_request.rb +16 -0
  26. data/lib/payabli/boarding/types/get_external_application_request.rb +13 -0
  27. data/lib/payabli/boarding/types/list_applications_request.rb +18 -0
  28. data/lib/payabli/boarding/types/list_boarding_links_request.rb +15 -0
  29. data/lib/payabli/boarding/types/request_app_by_auth.rb +13 -0
  30. data/lib/payabli/charge_backs/client.rb +97 -0
  31. data/lib/payabli/charge_backs/types/add_response_response.rb +11 -0
  32. data/lib/payabli/charge_backs/types/charge_back_response.rb +16 -0
  33. data/lib/payabli/charge_backs/types/chargeback_message.rb +20 -0
  34. data/lib/payabli/charge_backs/types/chargeback_query_records.rb +52 -0
  35. data/lib/payabli/charge_backs/types/response_charge_back.rb +16 -0
  36. data/lib/payabli/check_capture/client.rb +45 -0
  37. data/lib/payabli/check_capture/types/check_capture_request.rb +15 -0
  38. data/lib/payabli/check_capture/types/check_capture_request_body.rb +14 -0
  39. data/lib/payabli/check_capture/types/check_capture_response.rb +41 -0
  40. data/lib/payabli/client.rb +160 -0
  41. data/lib/payabli/cloud/client.rb +135 -0
  42. data/lib/payabli/cloud/types/add_device_response.rb +12 -0
  43. data/lib/payabli/cloud/types/device_entry.rb +14 -0
  44. data/lib/payabli/cloud/types/list_device_request.rb +12 -0
  45. data/lib/payabli/cloud/types/remove_device_response.rb +12 -0
  46. data/lib/payabli/customer/client.rb +190 -0
  47. data/lib/payabli/customer/types/add_customer_request.rb +17 -0
  48. data/lib/payabli/environment.rb +8 -0
  49. data/lib/payabli/errors/api_error.rb +8 -0
  50. data/lib/payabli/errors/client_error.rb +17 -0
  51. data/lib/payabli/errors/redirect_error.rb +8 -0
  52. data/lib/payabli/errors/response_error.rb +42 -0
  53. data/lib/payabli/errors/server_error.rb +11 -0
  54. data/lib/payabli/errors/timeout_error.rb +8 -0
  55. data/lib/payabli/export/client.rb +1085 -0
  56. data/lib/payabli/export/types/export_applications_request.rb +16 -0
  57. data/lib/payabli/export/types/export_batch_details_org_request.rb +16 -0
  58. data/lib/payabli/export/types/export_batch_details_request.rb +16 -0
  59. data/lib/payabli/export/types/export_batches_org_request.rb +16 -0
  60. data/lib/payabli/export/types/export_batches_out_org_request.rb +16 -0
  61. data/lib/payabli/export/types/export_batches_out_request.rb +16 -0
  62. data/lib/payabli/export/types/export_batches_request.rb +16 -0
  63. data/lib/payabli/export/types/export_bills_org_request.rb +16 -0
  64. data/lib/payabli/export/types/export_bills_request.rb +16 -0
  65. data/lib/payabli/export/types/export_chargebacks_org_request.rb +16 -0
  66. data/lib/payabli/export/types/export_chargebacks_request.rb +16 -0
  67. data/lib/payabli/export/types/export_customers_org_request.rb +16 -0
  68. data/lib/payabli/export/types/export_customers_request.rb +16 -0
  69. data/lib/payabli/export/types/export_format_1.rb +14 -0
  70. data/lib/payabli/export/types/export_invoices_org_request.rb +16 -0
  71. data/lib/payabli/export/types/export_invoices_request.rb +16 -0
  72. data/lib/payabli/export/types/export_organizations_request.rb +16 -0
  73. data/lib/payabli/export/types/export_payout_org_request.rb +16 -0
  74. data/lib/payabli/export/types/export_payout_request.rb +16 -0
  75. data/lib/payabli/export/types/export_paypoints_request.rb +16 -0
  76. data/lib/payabli/export/types/export_settlements_org_request.rb +16 -0
  77. data/lib/payabli/export/types/export_settlements_request.rb +16 -0
  78. data/lib/payabli/export/types/export_subscriptions_org_request.rb +16 -0
  79. data/lib/payabli/export/types/export_subscriptions_request.rb +16 -0
  80. data/lib/payabli/export/types/export_transactions_org_request.rb +16 -0
  81. data/lib/payabli/export/types/export_transactions_request.rb +16 -0
  82. data/lib/payabli/export/types/export_transfer_details_request.rb +18 -0
  83. data/lib/payabli/export/types/export_transfers_request.rb +16 -0
  84. data/lib/payabli/export/types/export_vendors_org_request.rb +16 -0
  85. data/lib/payabli/export/types/export_vendors_request.rb +16 -0
  86. data/lib/payabli/hosted_payment_pages/client.rb +102 -0
  87. data/lib/payabli/hosted_payment_pages/types/new_page_request.rb +13 -0
  88. data/lib/payabli/import/client.rb +107 -0
  89. data/lib/payabli/import/types/import_bills_request.rb +11 -0
  90. data/lib/payabli/import/types/import_customer_request.rb +12 -0
  91. data/lib/payabli/import/types/import_vendor_request.rb +11 -0
  92. data/lib/payabli/internal/errors/constraint_error.rb +10 -0
  93. data/lib/payabli/internal/errors/type_error.rb +10 -0
  94. data/lib/payabli/internal/http/base_request.rb +31 -0
  95. data/lib/payabli/internal/http/raw_client.rb +105 -0
  96. data/lib/payabli/internal/iterators/cursor_item_iterator.rb +27 -0
  97. data/lib/payabli/internal/iterators/cursor_page_iterator.rb +51 -0
  98. data/lib/payabli/internal/iterators/item_iterator.rb +59 -0
  99. data/lib/payabli/internal/iterators/offset_item_iterator.rb +29 -0
  100. data/lib/payabli/internal/iterators/offset_page_iterator.rb +83 -0
  101. data/lib/payabli/internal/json/request.rb +38 -0
  102. data/lib/payabli/internal/json/serializable.rb +25 -0
  103. data/lib/payabli/internal/multipart/multipart_encoder.rb +141 -0
  104. data/lib/payabli/internal/multipart/multipart_form_data.rb +78 -0
  105. data/lib/payabli/internal/multipart/multipart_form_data_part.rb +51 -0
  106. data/lib/payabli/internal/multipart/multipart_request.rb +37 -0
  107. data/lib/payabli/internal/types/array.rb +47 -0
  108. data/lib/payabli/internal/types/boolean.rb +34 -0
  109. data/lib/payabli/internal/types/enum.rb +48 -0
  110. data/lib/payabli/internal/types/hash.rb +36 -0
  111. data/lib/payabli/internal/types/model/field.rb +28 -0
  112. data/lib/payabli/internal/types/model.rb +198 -0
  113. data/lib/payabli/internal/types/type.rb +35 -0
  114. data/lib/payabli/internal/types/union.rb +109 -0
  115. data/lib/payabli/internal/types/unknown.rb +15 -0
  116. data/lib/payabli/internal/types/utils.rb +100 -0
  117. data/lib/payabli/invoice/client.rb +370 -0
  118. data/lib/payabli/invoice/types/add_invoice_request.rb +16 -0
  119. data/lib/payabli/invoice/types/edit_invoice_request.rb +15 -0
  120. data/lib/payabli/invoice/types/get_attached_file_from_invoice_request.rb +13 -0
  121. data/lib/payabli/invoice/types/get_invoice_record.rb +66 -0
  122. data/lib/payabli/invoice/types/invoice_data_request.rb +17 -0
  123. data/lib/payabli/invoice/types/invoice_number_response.rb +14 -0
  124. data/lib/payabli/invoice/types/invoice_response_without_data.rb +19 -0
  125. data/lib/payabli/invoice/types/list_invoices_org_request.rb +18 -0
  126. data/lib/payabli/invoice/types/list_invoices_request.rb +18 -0
  127. data/lib/payabli/invoice/types/query_invoice_response.rb +14 -0
  128. data/lib/payabli/invoice/types/query_invoice_response_records_item.rb +70 -0
  129. data/lib/payabli/invoice/types/send_invoice_request.rb +13 -0
  130. data/lib/payabli/invoice/types/send_invoice_response.rb +12 -0
  131. data/lib/payabli/line_item/client.rb +164 -0
  132. data/lib/payabli/line_item/types/add_item_request.rb +13 -0
  133. data/lib/payabli/line_item/types/delete_item_response.rb +12 -0
  134. data/lib/payabli/line_item/types/list_line_items_request.rb +15 -0
  135. data/lib/payabli/money_in/client.rb +424 -0
  136. data/lib/payabli/money_in/types/auth_response.rb +17 -0
  137. data/lib/payabli/money_in/types/auth_response_response_data.rb +18 -0
  138. data/lib/payabli/money_in/types/capture_payment_details.rb +12 -0
  139. data/lib/payabli/money_in/types/capture_request.rb +13 -0
  140. data/lib/payabli/money_in/types/capture_response.rb +19 -0
  141. data/lib/payabli/money_in/types/capture_response_data.rb +19 -0
  142. data/lib/payabli/money_in/types/get_paid_response_data.rb +22 -0
  143. data/lib/payabli/money_in/types/invalid_trans_status_error_type.rb +11 -0
  144. data/lib/payabli/money_in/types/payabli_api_response_get_paid.rb +17 -0
  145. data/lib/payabli/money_in/types/receipt_response.rb +14 -0
  146. data/lib/payabli/money_in/types/refund_response.rb +16 -0
  147. data/lib/payabli/money_in/types/refund_with_instructions_response.rb +16 -0
  148. data/lib/payabli/money_in/types/request_credit.rb +29 -0
  149. data/lib/payabli/money_in/types/request_credit_payment_method.rb +19 -0
  150. data/lib/payabli/money_in/types/request_payment.rb +22 -0
  151. data/lib/payabli/money_in/types/request_payment_authorize.rb +15 -0
  152. data/lib/payabli/money_in/types/request_payment_authorize_payment_method.rb +16 -0
  153. data/lib/payabli/money_in/types/request_payment_validate.rb +18 -0
  154. data/lib/payabli/money_in/types/request_payment_validate_payment_method.rb +18 -0
  155. data/lib/payabli/money_in/types/request_payment_validate_payment_method_method.rb +14 -0
  156. data/lib/payabli/money_in/types/request_refund.rb +20 -0
  157. data/lib/payabli/money_in/types/response_data_refunds.rb +21 -0
  158. data/lib/payabli/money_in/types/reverse_response.rb +18 -0
  159. data/lib/payabli/money_in/types/send_receipt_2_trans_request.rb +12 -0
  160. data/lib/payabli/money_in/types/trans_request_body.rb +28 -0
  161. data/lib/payabli/money_in/types/transaction_detail_customer.rb +33 -0
  162. data/lib/payabli/money_in/types/transaction_detail_event.rb +14 -0
  163. data/lib/payabli/money_in/types/transaction_detail_invoice_data.rb +43 -0
  164. data/lib/payabli/money_in/types/transaction_detail_payment_data.rb +28 -0
  165. data/lib/payabli/money_in/types/transaction_detail_payment_details.rb +33 -0
  166. data/lib/payabli/money_in/types/transaction_detail_record.rb +87 -0
  167. data/lib/payabli/money_in/types/transaction_detail_record_method.rb +14 -0
  168. data/lib/payabli/money_in/types/transaction_detail_response_data.rb +25 -0
  169. data/lib/payabli/money_in/types/validate_response.rb +16 -0
  170. data/lib/payabli/money_in/types/validate_response_data.rb +19 -0
  171. data/lib/payabli/money_in/types/void_response.rb +19 -0
  172. data/lib/payabli/money_in/types/void_response_data.rb +19 -0
  173. data/lib/payabli/money_out/client.rb +300 -0
  174. data/lib/payabli/money_out/types/capture_all_out_request.rb +12 -0
  175. data/lib/payabli/money_out/types/capture_out_request.rb +12 -0
  176. data/lib/payabli/money_out/types/money_out_types_request_out_authorize.rb +21 -0
  177. data/lib/payabli/money_out/types/send_v_card_link_request.rb +11 -0
  178. data/lib/payabli/money_out_types/types/auth_capture_payout_response.rb +18 -0
  179. data/lib/payabli/money_out_types/types/auth_capture_payout_response_data.rb +18 -0
  180. data/lib/payabli/money_out_types/types/authorize_payment_method.rb +30 -0
  181. data/lib/payabli/money_out_types/types/authorize_payout_body.rb +29 -0
  182. data/lib/payabli/money_out_types/types/capture_all_out_response.rb +17 -0
  183. data/lib/payabli/money_out_types/types/capture_all_out_response_response_data_item.rb +14 -0
  184. data/lib/payabli/money_out_types/types/operation_result.rb +12 -0
  185. data/lib/payabli/money_out_types/types/request_out_authorize_invoice_data.rb +23 -0
  186. data/lib/payabli/money_out_types/types/request_out_authorize_payment_details.rb +16 -0
  187. data/lib/payabli/money_out_types/types/request_out_authorize_vendor_billing_data.rb +20 -0
  188. data/lib/payabli/money_out_types/types/request_out_authorize_vendor_data.rb +51 -0
  189. data/lib/payabli/money_out_types/types/request_out_authorize_vendor_data_old.rb +51 -0
  190. data/lib/payabli/money_out_types/types/v_card_get_response.rb +39 -0
  191. data/lib/payabli/money_out_types/types/v_card_get_response_associated_vendor.rb +63 -0
  192. data/lib/payabli/money_out_types/types/v_card_get_response_associated_vendor_billing_data.rb +31 -0
  193. data/lib/payabli/money_out_types/types/v_card_get_response_associated_vendor_summary.rb +31 -0
  194. data/lib/payabli/money_out_types/types/v_card_get_response_contact.rb +15 -0
  195. data/lib/payabli/notification/client.rb +151 -0
  196. data/lib/payabli/notification/types/add_notification_request.rb +14 -0
  197. data/lib/payabli/notification/types/update_notification_request.rb +14 -0
  198. data/lib/payabli/notificationlogs/client.rb +138 -0
  199. data/lib/payabli/notificationlogs/types/key_value_array.rb +12 -0
  200. data/lib/payabli/notificationlogs/types/notification_log.rb +24 -0
  201. data/lib/payabli/notificationlogs/types/notification_log_detail.rb +17 -0
  202. data/lib/payabli/notificationlogs/types/notification_log_search_request.rb +16 -0
  203. data/lib/payabli/notificationlogs/types/search_notification_logs_request.rb +15 -0
  204. data/lib/payabli/notificationlogs/types/string_string_key_value_pair.rb +12 -0
  205. data/lib/payabli/ocr/client.rb +66 -0
  206. data/lib/payabli/ocr/types/file_content_image_only.rb +14 -0
  207. data/lib/payabli/ocr/types/ocr_attachment.rb +15 -0
  208. data/lib/payabli/ocr/types/ocr_bill_item.rb +24 -0
  209. data/lib/payabli/ocr/types/ocr_bill_item_additional_data.rb +14 -0
  210. data/lib/payabli/ocr/types/ocr_response_data.rb +13 -0
  211. data/lib/payabli/ocr/types/ocr_result_data.rb +33 -0
  212. data/lib/payabli/ocr/types/ocr_vendor.rb +47 -0
  213. data/lib/payabli/ocr/types/ocr_vendor_additional_data.rb +11 -0
  214. data/lib/payabli/ocr/types/ocr_vendor_billing_data.rb +22 -0
  215. data/lib/payabli/ocr/types/payabli_api_response_ocr.rb +16 -0
  216. data/lib/payabli/organization/client.rb +215 -0
  217. data/lib/payabli/organization/types/add_organization_request.rb +30 -0
  218. data/lib/payabli/organization/types/add_organization_response.rb +15 -0
  219. data/lib/payabli/organization/types/delete_organization_response.rb +15 -0
  220. data/lib/payabli/organization/types/edit_organization_response.rb +17 -0
  221. data/lib/payabli/organization/types/organization_data.rb +30 -0
  222. data/lib/payabli/payment_link/client.rb +318 -0
  223. data/lib/payabli/payment_link/types/get_pay_link_from_id_response.rb +13 -0
  224. data/lib/payabli/payment_link/types/get_pay_link_from_id_response_response_data.rb +9 -0
  225. data/lib/payabli/payment_link/types/pay_link_data_bill.rb +15 -0
  226. data/lib/payabli/payment_link/types/pay_link_data_invoice.rb +15 -0
  227. data/lib/payabli/payment_link/types/pay_link_data_out.rb +16 -0
  228. data/lib/payabli/payment_link/types/pay_link_update_data.rb +26 -0
  229. data/lib/payabli/payment_link/types/payabli_api_response_payment_links.rb +13 -0
  230. data/lib/payabli/payment_link/types/payment_page_request_body.rb +27 -0
  231. data/lib/payabli/payment_link/types/refresh_pay_link_from_id_request.rb +12 -0
  232. data/lib/payabli/payment_link/types/send_pay_link_from_id_request.rb +13 -0
  233. data/lib/payabli/payment_method_domain/client.rb +223 -0
  234. data/lib/payabli/payment_method_domain/types/add_payment_method_domain_request.rb +19 -0
  235. data/lib/payabli/payment_method_domain/types/add_payment_method_domain_request_apple_pay.rb +12 -0
  236. data/lib/payabli/payment_method_domain/types/add_payment_method_domain_request_google_pay.rb +12 -0
  237. data/lib/payabli/payment_method_domain/types/delete_payment_method_domain_response.rb +16 -0
  238. data/lib/payabli/payment_method_domain/types/list_payment_method_domains_request.rb +14 -0
  239. data/lib/payabli/payment_method_domain/types/list_payment_method_domains_response.rb +14 -0
  240. data/lib/payabli/payment_method_domain/types/update_payment_method_domain_request.rb +17 -0
  241. data/lib/payabli/payment_method_domain/types/update_payment_method_domain_request_wallet.rb +11 -0
  242. data/lib/payabli/paypoint/client.rb +239 -0
  243. data/lib/payabli/paypoint/types/get_basic_entry_by_id_response.rb +17 -0
  244. data/lib/payabli/paypoint/types/get_basic_entry_response.rb +17 -0
  245. data/lib/payabli/paypoint/types/get_entry_config_request.rb +12 -0
  246. data/lib/payabli/paypoint/types/get_entry_config_response.rb +17 -0
  247. data/lib/payabli/paypoint/types/migrate_paypoint_response.rb +13 -0
  248. data/lib/payabli/paypoint/types/notification_request.rb +14 -0
  249. data/lib/payabli/paypoint/types/paypoint_move_request.rb +17 -0
  250. data/lib/payabli/paypoint/types/web_header_parameter.rb +12 -0
  251. data/lib/payabli/query/client.rb +1284 -0
  252. data/lib/payabli/query/types/list_batch_details_org_request.rb +18 -0
  253. data/lib/payabli/query/types/list_batch_details_request.rb +18 -0
  254. data/lib/payabli/query/types/list_batches_org_request.rb +18 -0
  255. data/lib/payabli/query/types/list_batches_out_org_request.rb +18 -0
  256. data/lib/payabli/query/types/list_batches_out_request.rb +18 -0
  257. data/lib/payabli/query/types/list_batches_request.rb +18 -0
  258. data/lib/payabli/query/types/list_chargebacks_org_request.rb +18 -0
  259. data/lib/payabli/query/types/list_chargebacks_request.rb +18 -0
  260. data/lib/payabli/query/types/list_customers_org_request.rb +18 -0
  261. data/lib/payabli/query/types/list_customers_request.rb +18 -0
  262. data/lib/payabli/query/types/list_notification_reports_org_request.rb +15 -0
  263. data/lib/payabli/query/types/list_notification_reports_request.rb +15 -0
  264. data/lib/payabli/query/types/list_notifications_org_request.rb +15 -0
  265. data/lib/payabli/query/types/list_notifications_request.rb +15 -0
  266. data/lib/payabli/query/types/list_organizations_request.rb +18 -0
  267. data/lib/payabli/query/types/list_payout_org_request.rb +18 -0
  268. data/lib/payabli/query/types/list_payout_request.rb +18 -0
  269. data/lib/payabli/query/types/list_paypoints_request.rb +18 -0
  270. data/lib/payabli/query/types/list_settlements_org_request.rb +18 -0
  271. data/lib/payabli/query/types/list_settlements_request.rb +18 -0
  272. data/lib/payabli/query/types/list_subscriptions_org_request.rb +18 -0
  273. data/lib/payabli/query/types/list_subscriptions_request.rb +18 -0
  274. data/lib/payabli/query/types/list_transactions_org_request.rb +18 -0
  275. data/lib/payabli/query/types/list_transactions_request.rb +18 -0
  276. data/lib/payabli/query/types/list_transfers_paypoint_request.rb +19 -0
  277. data/lib/payabli/query/types/list_transfers_request.rb +18 -0
  278. data/lib/payabli/query/types/list_transfers_request_org.rb +18 -0
  279. data/lib/payabli/query/types/list_users_org_request.rb +15 -0
  280. data/lib/payabli/query/types/list_users_paypoint_request.rb +15 -0
  281. data/lib/payabli/query/types/list_vcards_org_request.rb +18 -0
  282. data/lib/payabli/query/types/list_vcards_request.rb +18 -0
  283. data/lib/payabli/query/types/list_vendors_org_request.rb +18 -0
  284. data/lib/payabli/query/types/list_vendors_request.rb +18 -0
  285. data/lib/payabli/query_types/types/batch_detail_response_record.rb +81 -0
  286. data/lib/payabli/query_types/types/batch_detail_response_summary.rb +20 -0
  287. data/lib/payabli/query_types/types/list_organizations_response.rb +14 -0
  288. data/lib/payabli/query_types/types/query_batches_detail_response.rb +17 -0
  289. data/lib/payabli/query_types/types/query_batches_response.rb +15 -0
  290. data/lib/payabli/query_types/types/query_batches_response_records_item.rb +44 -0
  291. data/lib/payabli/query_types/types/query_batches_transfer.rb +27 -0
  292. data/lib/payabli/query_types/types/query_transfer_detail_response.rb +16 -0
  293. data/lib/payabli/query_types/types/query_transfer_response.rb +16 -0
  294. data/lib/payabli/query_types/types/query_transfer_summary.rb +32 -0
  295. data/lib/payabli/query_types/types/transfer_detail_record.rb +106 -0
  296. data/lib/payabli/statistic/client.rb +144 -0
  297. data/lib/payabli/statistic/types/basic_stats_request.rb +17 -0
  298. data/lib/payabli/statistic/types/customer_basic_stats_request.rb +14 -0
  299. data/lib/payabli/statistic/types/stat_basic_query_record.rb +19 -0
  300. data/lib/payabli/statistic/types/statistics_vendor_query_record.rb +29 -0
  301. data/lib/payabli/statistic/types/sub_stats_request.rb +14 -0
  302. data/lib/payabli/statistic/types/subscription_stats_query_record.rb +13 -0
  303. data/lib/payabli/statistic/types/vendor_basic_stats_request.rb +14 -0
  304. data/lib/payabli/subscription/client.rb +136 -0
  305. data/lib/payabli/subscription/types/add_subscription_response.rb +15 -0
  306. data/lib/payabli/subscription/types/remove_subscription_response.rb +14 -0
  307. data/lib/payabli/subscription/types/request_schedule.rb +15 -0
  308. data/lib/payabli/subscription/types/request_schedule_payment_method.rb +16 -0
  309. data/lib/payabli/subscription/types/request_schedule_payment_method_initiator.rb +16 -0
  310. data/lib/payabli/subscription/types/request_update_schedule.rb +18 -0
  311. data/lib/payabli/subscription/types/subscription_request_body.rb +27 -0
  312. data/lib/payabli/subscription/types/update_subscription_response.rb +15 -0
  313. data/lib/payabli/templates/client.rb +132 -0
  314. data/lib/payabli/templates/types/list_templates_request.rb +15 -0
  315. data/lib/payabli/token_storage/client.rb +152 -0
  316. data/lib/payabli/token_storage/types/add_method_request.rb +22 -0
  317. data/lib/payabli/token_storage/types/add_method_response.rb +13 -0
  318. data/lib/payabli/token_storage/types/add_method_response_response_data.rb +15 -0
  319. data/lib/payabli/token_storage/types/convert_token.rb +13 -0
  320. data/lib/payabli/token_storage/types/get_method_request.rb +15 -0
  321. data/lib/payabli/token_storage/types/get_method_response.rb +15 -0
  322. data/lib/payabli/token_storage/types/get_method_response_response_data.rb +29 -0
  323. data/lib/payabli/token_storage/types/get_method_response_response_data_customers_item.rb +42 -0
  324. data/lib/payabli/token_storage/types/request_token_storage.rb +22 -0
  325. data/lib/payabli/token_storage/types/request_token_storage_payment_method.rb +16 -0
  326. data/lib/payabli/token_storage/types/tokenize_ach.rb +22 -0
  327. data/lib/payabli/token_storage/types/tokenize_card.rb +16 -0
  328. data/lib/payabli/token_storage/types/update_method_request.rb +15 -0
  329. data/lib/payabli/types/a_section.rb +15 -0
  330. data/lib/payabli/types/ach.rb +20 -0
  331. data/lib/payabli/types/ach_absorb_section.rb +11 -0
  332. data/lib/payabli/types/ach_acceptance_element.rb +14 -0
  333. data/lib/payabli/types/ach_fee_section.rb +45 -0
  334. data/lib/payabli/types/ach_holder_type.rb +12 -0
  335. data/lib/payabli/types/ach_link_types.rb +11 -0
  336. data/lib/payabli/types/ach_pass_through_section.rb +11 -0
  337. data/lib/payabli/types/ach_payment_method.rb +11 -0
  338. data/lib/payabli/types/ach_section.rb +11 -0
  339. data/lib/payabli/types/ach_service.rb +49 -0
  340. data/lib/payabli/types/ach_setup.rb +11 -0
  341. data/lib/payabli/types/ach_types.rb +11 -0
  342. data/lib/payabli/types/ach_types_pass.rb +11 -0
  343. data/lib/payabli/types/ach_types_tiers.rb +11 -0
  344. data/lib/payabli/types/achaccounttype.rb +12 -0
  345. data/lib/payabli/types/add_payment_method_domain_api_response.rb +15 -0
  346. data/lib/payabli/types/amount_element.rb +11 -0
  347. data/lib/payabli/types/apple_pay_data.rb +11 -0
  348. data/lib/payabli/types/apple_pay_metadata.rb +18 -0
  349. data/lib/payabli/types/apple_pay_organization_update_data.rb +16 -0
  350. data/lib/payabli/types/apple_pay_paypoint_registration_data.rb +14 -0
  351. data/lib/payabli/types/apple_pay_status_data.rb +11 -0
  352. data/lib/payabli/types/apple_wallet_data.rb +21 -0
  353. data/lib/payabli/types/application_data.rb +77 -0
  354. data/lib/payabli/types/application_data_managed.rb +56 -0
  355. data/lib/payabli/types/application_data_managed_contacts_item.rb +7 -0
  356. data/lib/payabli/types/application_data_managed_ownership_item.rb +7 -0
  357. data/lib/payabli/types/application_data_odp.rb +68 -0
  358. data/lib/payabli/types/application_data_odp_contacts_item.rb +7 -0
  359. data/lib/payabli/types/application_data_odp_ownership_item.rb +7 -0
  360. data/lib/payabli/types/application_data_pay_in.rb +79 -0
  361. data/lib/payabli/types/application_data_pay_in_bank_data.rb +7 -0
  362. data/lib/payabli/types/application_data_pay_in_contacts_item.rb +7 -0
  363. data/lib/payabli/types/application_data_pay_in_ownership_item.rb +7 -0
  364. data/lib/payabli/types/application_data_pay_in_services.rb +11 -0
  365. data/lib/payabli/types/application_data_pay_in_services_ach.rb +7 -0
  366. data/lib/payabli/types/application_data_pay_in_services_card.rb +7 -0
  367. data/lib/payabli/types/application_details_record.rb +85 -0
  368. data/lib/payabli/types/application_details_record_messages_item.rb +27 -0
  369. data/lib/payabli/types/application_query_record.rb +85 -0
  370. data/lib/payabli/types/associated_vendor.rb +55 -0
  371. data/lib/payabli/types/auto_element.rb +15 -0
  372. data/lib/payabli/types/b_address.rb +20 -0
  373. data/lib/payabli/types/b_details.rb +19 -0
  374. data/lib/payabli/types/b_section.rb +10 -0
  375. data/lib/payabli/types/bank.rb +24 -0
  376. data/lib/payabli/types/bank_account_holder_type.rb +12 -0
  377. data/lib/payabli/types/bank_section.rb +20 -0
  378. data/lib/payabli/types/basic_table.rb +10 -0
  379. data/lib/payabli/types/basic_template_element.rb +11 -0
  380. data/lib/payabli/types/batch_summary.rb +14 -0
  381. data/lib/payabli/types/bill_data.rb +42 -0
  382. data/lib/payabli/types/bill_data_payment_terms.rb +31 -0
  383. data/lib/payabli/types/bill_detail_response.rb +55 -0
  384. data/lib/payabli/types/bill_details_response.rb +17 -0
  385. data/lib/payabli/types/bill_item.rb +22 -0
  386. data/lib/payabli/types/bill_options.rb +12 -0
  387. data/lib/payabli/types/bill_pay_out_data.rb +20 -0
  388. data/lib/payabli/types/bill_pay_out_data_request.rb +20 -0
  389. data/lib/payabli/types/bill_query_record_2.rb +57 -0
  390. data/lib/payabli/types/bill_query_record_2_bill_approvals_item.rb +13 -0
  391. data/lib/payabli/types/bill_query_record_2_payment_method.rb +15 -0
  392. data/lib/payabli/types/bill_query_response.rb +14 -0
  393. data/lib/payabli/types/bill_query_response_summary.rb +33 -0
  394. data/lib/payabli/types/billing_data.rb +18 -0
  395. data/lib/payabli/types/billing_data_response.rb +30 -0
  396. data/lib/payabli/types/billing_fee_detail.rb +19 -0
  397. data/lib/payabli/types/bin_data.rb +29 -0
  398. data/lib/payabli/types/bnk.rb +14 -0
  399. data/lib/payabli/types/boarding_application_attachments.rb +10 -0
  400. data/lib/payabli/types/boarding_link_api_response.rb +10 -0
  401. data/lib/payabli/types/boarding_link_query_record.rb +24 -0
  402. data/lib/payabli/types/boarding_query_links.rb +20 -0
  403. data/lib/payabli/types/builder_data.rb +14 -0
  404. data/lib/payabli/types/business_section.rb +36 -0
  405. data/lib/payabli/types/button_element.rb +10 -0
  406. data/lib/payabli/types/button_element_size.rb +13 -0
  407. data/lib/payabli/types/c_list.rb +12 -0
  408. data/lib/payabli/types/card_acceptance_element.rb +14 -0
  409. data/lib/payabli/types/card_fee_section.rb +42 -0
  410. data/lib/payabli/types/card_flat_section.rb +10 -0
  411. data/lib/payabli/types/card_icp_section.rb +10 -0
  412. data/lib/payabli/types/card_link_types.rb +12 -0
  413. data/lib/payabli/types/card_pass_through_section.rb +11 -0
  414. data/lib/payabli/types/card_section.rb +11 -0
  415. data/lib/payabli/types/card_service.rb +83 -0
  416. data/lib/payabli/types/card_setup.rb +16 -0
  417. data/lib/payabli/types/card_type.rb +12 -0
  418. data/lib/payabli/types/card_type_pass.rb +12 -0
  419. data/lib/payabli/types/card_types.rb +14 -0
  420. data/lib/payabli/types/cascade_job_details.rb +14 -0
  421. data/lib/payabli/types/cash.rb +9 -0
  422. data/lib/payabli/types/check.rb +10 -0
  423. data/lib/payabli/types/cloud_query_api_response.rb +14 -0
  424. data/lib/payabli/types/configure_apple_pay_organization_api_response.rb +15 -0
  425. data/lib/payabli/types/configure_apple_paypoint_api_response.rb +16 -0
  426. data/lib/payabli/types/configure_google_paypoint_api_response.rb +16 -0
  427. data/lib/payabli/types/contact_element.rb +14 -0
  428. data/lib/payabli/types/contacts.rb +13 -0
  429. data/lib/payabli/types/contacts_response.rb +12 -0
  430. data/lib/payabli/types/customer_data.rb +39 -0
  431. data/lib/payabli/types/customer_query_records.rb +63 -0
  432. data/lib/payabli/types/customer_query_records_customer_consent.rb +12 -0
  433. data/lib/payabli/types/customer_query_records_customer_consent_e_communication.rb +11 -0
  434. data/lib/payabli/types/customer_query_records_customer_consent_sms.rb +11 -0
  435. data/lib/payabli/types/customer_summary_record.rb +18 -0
  436. data/lib/payabli/types/d_section.rb +12 -0
  437. data/lib/payabli/types/display_property.rb +11 -0
  438. data/lib/payabli/types/document_section.rb +25 -0
  439. data/lib/payabli/types/document_section_terms_and_conditions.rb +12 -0
  440. data/lib/payabli/types/document_section_terms_and_conditions_tc_links_item.rb +10 -0
  441. data/lib/payabli/types/documents_ref.rb +10 -0
  442. data/lib/payabli/types/element.rb +10 -0
  443. data/lib/payabli/types/export_format.rb +12 -0
  444. data/lib/payabli/types/file_content.rb +13 -0
  445. data/lib/payabli/types/file_content_ftype.rb +18 -0
  446. data/lib/payabli/types/finishtype.rb +12 -0
  447. data/lib/payabli/types/frequency.rb +17 -0
  448. data/lib/payabli/types/frequency_list.rb +15 -0
  449. data/lib/payabli/types/frequencynotification.rb +19 -0
  450. data/lib/payabli/types/general_events.rb +15 -0
  451. data/lib/payabli/types/google_pay_data.rb +11 -0
  452. data/lib/payabli/types/google_pay_metadata.rb +12 -0
  453. data/lib/payabli/types/google_pay_paypoint_registration_data.rb +14 -0
  454. data/lib/payabli/types/google_pay_status_data.rb +11 -0
  455. data/lib/payabli/types/google_wallet_data.rb +11 -0
  456. data/lib/payabli/types/header_element.rb +11 -0
  457. data/lib/payabli/types/instrument.rb +15 -0
  458. data/lib/payabli/types/invoice_element.rb +14 -0
  459. data/lib/payabli/types/key_value.rb +11 -0
  460. data/lib/payabli/types/key_value_duo.rb +10 -0
  461. data/lib/payabli/types/label_element.rb +11 -0
  462. data/lib/payabli/types/line_item.rb +19 -0
  463. data/lib/payabli/types/line_item_query_record.rb +27 -0
  464. data/lib/payabli/types/link_data.rb +12 -0
  465. data/lib/payabli/types/link_row.rb +9 -0
  466. data/lib/payabli/types/method_element.rb +16 -0
  467. data/lib/payabli/types/method_element_settings.rb +12 -0
  468. data/lib/payabli/types/method_element_settings_apple_pay.rb +15 -0
  469. data/lib/payabli/types/method_element_settings_apple_pay_button_style.rb +13 -0
  470. data/lib/payabli/types/method_element_settings_apple_pay_button_type.rb +23 -0
  471. data/lib/payabli/types/method_element_settings_apple_pay_language.rb +49 -0
  472. data/lib/payabli/types/method_query_records.rb +17 -0
  473. data/lib/payabli/types/methodall.rb +15 -0
  474. data/lib/payabli/types/methodnotification.rb +15 -0
  475. data/lib/payabli/types/methods_list.rb +15 -0
  476. data/lib/payabli/types/mfa_data.rb +10 -0
  477. data/lib/payabli/types/note_element.rb +13 -0
  478. data/lib/payabli/types/notification_content.rb +25 -0
  479. data/lib/payabli/types/notification_content_event_type.rb +88 -0
  480. data/lib/payabli/types/notification_content_file_format.rb +13 -0
  481. data/lib/payabli/types/notification_content_report_name.rb +14 -0
  482. data/lib/payabli/types/notification_query_record.rb +20 -0
  483. data/lib/payabli/types/notification_report_request.rb +18 -0
  484. data/lib/payabli/types/notification_report_request_content.rb +23 -0
  485. data/lib/payabli/types/notification_report_request_content_file_format.rb +13 -0
  486. data/lib/payabli/types/notification_report_request_content_report_name.rb +14 -0
  487. data/lib/payabli/types/notification_report_request_frequency.rb +18 -0
  488. data/lib/payabli/types/notification_report_request_method.rb +12 -0
  489. data/lib/payabli/types/notification_standard_request.rb +18 -0
  490. data/lib/payabli/types/notification_standard_request_content.rb +18 -0
  491. data/lib/payabli/types/notification_standard_request_content_event_type.rb +167 -0
  492. data/lib/payabli/types/notification_standard_request_frequency.rb +12 -0
  493. data/lib/payabli/types/notification_standard_request_method.rb +13 -0
  494. data/lib/payabli/types/o_list.rb +23 -0
  495. data/lib/payabli/types/o_section.rb +10 -0
  496. data/lib/payabli/types/odp_setup.rb +16 -0
  497. data/lib/payabli/types/odp_setup_processing_region.rb +12 -0
  498. data/lib/payabli/types/org_data.rb +14 -0
  499. data/lib/payabli/types/org_scope.rb +10 -0
  500. data/lib/payabli/types/org_x_scope.rb +11 -0
  501. data/lib/payabli/types/organization_query_record.rb +39 -0
  502. data/lib/payabli/types/organization_query_record_services_item.rb +16 -0
  503. data/lib/payabli/types/organization_updates.rb +10 -0
  504. data/lib/payabli/types/own_type.rb +18 -0
  505. data/lib/payabli/types/owners.rb +24 -0
  506. data/lib/payabli/types/owners_section.rb +52 -0
  507. data/lib/payabli/types/p_section.rb +20 -0
  508. data/lib/payabli/types/page_content.rb +29 -0
  509. data/lib/payabli/types/page_element.rb +12 -0
  510. data/lib/payabli/types/page_setting.rb +21 -0
  511. data/lib/payabli/types/pagelink_setting.rb +18 -0
  512. data/lib/payabli/types/pair_files.rb +11 -0
  513. data/lib/payabli/types/pay_category.rb +19 -0
  514. data/lib/payabli/types/pay_method_ach.rb +20 -0
  515. data/lib/payabli/types/pay_method_body_all_fields.rb +29 -0
  516. data/lib/payabli/types/pay_method_cloud.rb +13 -0
  517. data/lib/payabli/types/pay_method_credit.rb +18 -0
  518. data/lib/payabli/types/pay_method_stored_method.rb +15 -0
  519. data/lib/payabli/types/pay_method_stored_method_method.rb +12 -0
  520. data/lib/payabli/types/payabli_api_response.rb +13 -0
  521. data/lib/payabli/types/payabli_api_response_0.rb +15 -0
  522. data/lib/payabli/types/payabli_api_response_00.rb +15 -0
  523. data/lib/payabli/types/payabli_api_response_0000.rb +16 -0
  524. data/lib/payabli/types/payabli_api_response_00_responsedatanonobject.rb +16 -0
  525. data/lib/payabli/types/payabli_api_response_0_response_data.rb +16 -0
  526. data/lib/payabli/types/payabli_api_response_6.rb +15 -0
  527. data/lib/payabli/types/payabli_api_response_customer_query.rb +13 -0
  528. data/lib/payabli/types/payabli_api_response_error_400.rb +15 -0
  529. data/lib/payabli/types/payabli_api_response_error_400_response_data.rb +11 -0
  530. data/lib/payabli/types/payabli_api_response_generic_2_part.rb +10 -0
  531. data/lib/payabli/types/payabli_api_response_import.rb +15 -0
  532. data/lib/payabli/types/payabli_api_response_import_response_data.rb +12 -0
  533. data/lib/payabli/types/payabli_api_response_mfa_basic.rb +14 -0
  534. data/lib/payabli/types/payabli_api_response_notifications.rb +15 -0
  535. data/lib/payabli/types/payabli_api_response_notifications_response_data.rb +14 -0
  536. data/lib/payabli/types/payabli_api_response_paylinks.rb +15 -0
  537. data/lib/payabli/types/payabli_api_response_paymethod_delete.rb +14 -0
  538. data/lib/payabli/types/payabli_api_response_paymethod_delete_response_data.rb +11 -0
  539. data/lib/payabli/types/payabli_api_response_template_id.rb +15 -0
  540. data/lib/payabli/types/payabli_api_response_user_mfa.rb +15 -0
  541. data/lib/payabli/types/payabli_api_response_vendors.rb +13 -0
  542. data/lib/payabli/types/payabli_credentials.rb +18 -0
  543. data/lib/payabli/types/payabli_credentials_pascal.rb +22 -0
  544. data/lib/payabli/types/payabli_pages.rb +27 -0
  545. data/lib/payabli/types/payment_categories.rb +12 -0
  546. data/lib/payabli/types/payment_detail.rb +22 -0
  547. data/lib/payabli/types/payment_detail_credit.rb +12 -0
  548. data/lib/payabli/types/payment_method.rb +18 -0
  549. data/lib/payabli/types/payment_method_domain_api_response.rb +21 -0
  550. data/lib/payabli/types/payment_method_domain_general_response.rb +14 -0
  551. data/lib/payabli/types/payor_data_request.rb +34 -0
  552. data/lib/payabli/types/payor_data_response.rb +35 -0
  553. data/lib/payabli/types/payor_element.rb +12 -0
  554. data/lib/payabli/types/payor_fields.rb +18 -0
  555. data/lib/payabli/types/payout_gateway_connector.rb +19 -0
  556. data/lib/payabli/types/paypoint_data.rb +34 -0
  557. data/lib/payabli/types/paypoint_entry_config.rb +18 -0
  558. data/lib/payabli/types/paypoint_summary.rb +13 -0
  559. data/lib/payabli/types/poi_device.rb +22 -0
  560. data/lib/payabli/types/processing_section.rb +31 -0
  561. data/lib/payabli/types/push_pay_link_request.rb +15 -0
  562. data/lib/payabli/types/push_pay_link_request_email.rb +12 -0
  563. data/lib/payabli/types/push_pay_link_request_sms.rb +7 -0
  564. data/lib/payabli/types/query_batches_out_response.rb +13 -0
  565. data/lib/payabli/types/query_batches_out_response_records_item.rb +51 -0
  566. data/lib/payabli/types/query_boarding_apps_list_response.rb +12 -0
  567. data/lib/payabli/types/query_boarding_links_response.rb +12 -0
  568. data/lib/payabli/types/query_boarding_links_response_records_item.rb +20 -0
  569. data/lib/payabli/types/query_c_fee_transaction.rb +18 -0
  570. data/lib/payabli/types/query_chargebacks_response.rb +13 -0
  571. data/lib/payabli/types/query_chargebacks_response_records_item.rb +41 -0
  572. data/lib/payabli/types/query_customer_response.rb +12 -0
  573. data/lib/payabli/types/query_entrypoint_response.rb +12 -0
  574. data/lib/payabli/types/query_entrypoint_response_records_item.rb +76 -0
  575. data/lib/payabli/types/query_payment_data.rb +24 -0
  576. data/lib/payabli/types/query_payout_transaction.rb +14 -0
  577. data/lib/payabli/types/query_payout_transaction_records_item.rb +55 -0
  578. data/lib/payabli/types/query_payout_transaction_records_item_payment_data.rb +30 -0
  579. data/lib/payabli/types/query_payout_transaction_summary.rb +28 -0
  580. data/lib/payabli/types/query_response.rb +12 -0
  581. data/lib/payabli/types/query_response_data.rb +22 -0
  582. data/lib/payabli/types/query_response_items.rb +13 -0
  583. data/lib/payabli/types/query_response_items_records_item.rb +13 -0
  584. data/lib/payabli/types/query_response_notification_reports.rb +12 -0
  585. data/lib/payabli/types/query_response_notification_reports_records_item.rb +14 -0
  586. data/lib/payabli/types/query_response_notifications.rb +13 -0
  587. data/lib/payabli/types/query_response_notifications_records_item.rb +20 -0
  588. data/lib/payabli/types/query_response_settlements.rb +15 -0
  589. data/lib/payabli/types/query_response_settlements_records_item.rb +50 -0
  590. data/lib/payabli/types/query_response_settlements_summary.rb +18 -0
  591. data/lib/payabli/types/query_response_transactions.rb +13 -0
  592. data/lib/payabli/types/query_response_vendors.rb +13 -0
  593. data/lib/payabli/types/query_subscription_response.rb +13 -0
  594. data/lib/payabli/types/query_summary.rb +14 -0
  595. data/lib/payabli/types/query_summary_no_amt.rb +12 -0
  596. data/lib/payabli/types/query_transaction_events.rb +13 -0
  597. data/lib/payabli/types/query_transaction_events_event_data.rb +13 -0
  598. data/lib/payabli/types/query_transaction_payor_data.rb +32 -0
  599. data/lib/payabli/types/query_transaction_payor_data_customer.rb +34 -0
  600. data/lib/payabli/types/query_user_response.rb +12 -0
  601. data/lib/payabli/types/receipt_content.rb +24 -0
  602. data/lib/payabli/types/refund_detail.rb +15 -0
  603. data/lib/payabli/types/responsedatanonobject.rb +13 -0
  604. data/lib/payabli/types/s_section.rb +10 -0
  605. data/lib/payabli/types/sales_section.rb +10 -0
  606. data/lib/payabli/types/schedule_detail.rb +12 -0
  607. data/lib/payabli/types/service_cost.rb +16 -0
  608. data/lib/payabli/types/services.rb +12 -0
  609. data/lib/payabli/types/services_section.rb +14 -0
  610. data/lib/payabli/types/setting_element.rb +13 -0
  611. data/lib/payabli/types/settings_query_record.rb +22 -0
  612. data/lib/payabli/types/signer_data.rb +31 -0
  613. data/lib/payabli/types/signer_data_request.rb +30 -0
  614. data/lib/payabli/types/signer_section.rb +27 -0
  615. data/lib/payabli/types/split_funding_content.rb +12 -0
  616. data/lib/payabli/types/split_funding_refund_content.rb +12 -0
  617. data/lib/payabli/types/subscription_query_records.rb +45 -0
  618. data/lib/payabli/types/summary_org.rb +14 -0
  619. data/lib/payabli/types/template_additional_data_field.rb +16 -0
  620. data/lib/payabli/types/template_additional_data_section.rb +12 -0
  621. data/lib/payabli/types/template_content.rb +27 -0
  622. data/lib/payabli/types/template_content_response.rb +27 -0
  623. data/lib/payabli/types/template_data.rb +17 -0
  624. data/lib/payabli/types/template_element.rb +13 -0
  625. data/lib/payabli/types/template_query_record.rb +27 -0
  626. data/lib/payabli/types/template_query_response.rb +12 -0
  627. data/lib/payabli/types/tier_item.rb +12 -0
  628. data/lib/payabli/types/tier_item_pass.rb +14 -0
  629. data/lib/payabli/types/transaction_out_query_record.rb +55 -0
  630. data/lib/payabli/types/transaction_query_records.rb +65 -0
  631. data/lib/payabli/types/transaction_query_records_customer.rb +65 -0
  632. data/lib/payabli/types/transfer.rb +44 -0
  633. data/lib/payabli/types/transfer_bank_account.rb +10 -0
  634. data/lib/payabli/types/transfer_message.rb +18 -0
  635. data/lib/payabli/types/transfer_message_properties.rb +12 -0
  636. data/lib/payabli/types/transfer_query_response.rb +12 -0
  637. data/lib/payabli/types/transfer_summary.rb +11 -0
  638. data/lib/payabli/types/type_account.rb +12 -0
  639. data/lib/payabli/types/under_writing_method.rb +13 -0
  640. data/lib/payabli/types/underwriting_data.rb +11 -0
  641. data/lib/payabli/types/underwriting_data_response.rb +11 -0
  642. data/lib/payabli/types/user_data.rb +21 -0
  643. data/lib/payabli/types/user_query_record.rb +29 -0
  644. data/lib/payabli/types/usr_access.rb +10 -0
  645. data/lib/payabli/types/v_card_query_response.rb +12 -0
  646. data/lib/payabli/types/v_card_record.rb +39 -0
  647. data/lib/payabli/types/v_card_summary.rb +16 -0
  648. data/lib/payabli/types/vendor_data.rb +42 -0
  649. data/lib/payabli/types/vendor_data_response.rb +64 -0
  650. data/lib/payabli/types/vendor_data_response_payment_method.rb +14 -0
  651. data/lib/payabli/types/vendor_out_data.rb +44 -0
  652. data/lib/payabli/types/vendor_payment_method.rb +15 -0
  653. data/lib/payabli/types/vendor_query_record.rb +58 -0
  654. data/lib/payabli/types/vendor_response_billing_data.rb +25 -0
  655. data/lib/payabli/types/vendor_response_stored_method.rb +27 -0
  656. data/lib/payabli/types/vendor_response_summary.rb +27 -0
  657. data/lib/payabli/types/vendor_summary.rb +26 -0
  658. data/lib/payabli/types/whencharged.rb +12 -0
  659. data/lib/payabli/types/whendelivered.rb +14 -0
  660. data/lib/payabli/types/whenprovided.rb +13 -0
  661. data/lib/payabli/types/whenrefunded.rb +14 -0
  662. data/lib/payabli/user/client.rb +345 -0
  663. data/lib/payabli/user/types/add_user_response.rb +13 -0
  664. data/lib/payabli/user/types/auth_reset_user_response.rb +12 -0
  665. data/lib/payabli/user/types/change_psw_user_response.rb +12 -0
  666. data/lib/payabli/user/types/delete_user_response.rb +11 -0
  667. data/lib/payabli/user/types/edit_mfa_user_response.rb +12 -0
  668. data/lib/payabli/user/types/get_user_request.rb +13 -0
  669. data/lib/payabli/user/types/logout_user_response.rb +12 -0
  670. data/lib/payabli/user/types/mfa_validation_data.rb +12 -0
  671. data/lib/payabli/user/types/user_auth_psw_reset_request.rb +11 -0
  672. data/lib/payabli/user/types/user_auth_request.rb +17 -0
  673. data/lib/payabli/user/types/user_auth_reset_request.rb +13 -0
  674. data/lib/payabli/vendor/client.rb +124 -0
  675. data/lib/payabli/version.rb +5 -0
  676. data/lib/payabli/wallet/client.rb +138 -0
  677. data/lib/payabli/wallet/types/configure_organization_request_apple_pay.rb +13 -0
  678. data/lib/payabli/wallet/types/configure_organization_request_google_pay.rb +13 -0
  679. data/lib/payabli/wallet/types/configure_paypoint_request_apple_pay.rb +12 -0
  680. data/lib/payabli/wallet/types/configure_paypoint_request_google_pay.rb +12 -0
  681. data/lib/payabli.rb +678 -0
  682. data/reference.md +21293 -0
  683. metadata +719 -0
@@ -0,0 +1,141 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Payabli
4
+ module Internal
5
+ module Multipart
6
+ # Encodes parameters into a `multipart/form-data` payload as described by RFC
7
+ # 2388:
8
+ #
9
+ # https://tools.ietf.org/html/rfc2388
10
+ #
11
+ # This is most useful for transferring file-like objects.
12
+ #
13
+ # Parameters should be added with `#encode`. When ready, use `#body` to get
14
+ # the encoded result and `#content_type` to get the value that should be
15
+ # placed in the `Content-Type` header of a subsequent request (which includes
16
+ # a boundary value).
17
+ #
18
+ # This abstraction is heavily inspired by Stripe's multipart/form-data implementation,
19
+ # which can be found here:
20
+ #
21
+ # https://github.com/stripe/stripe-ruby/blob/ca00b676f04ac421cf5cb5ff0325f243651677b6/lib/stripe/multipart_encoder.rb#L18
22
+ #
23
+ # @api private
24
+ class Encoder
25
+ CONTENT_TYPE = "multipart/form-data"
26
+ CRLF = "\r\n"
27
+
28
+ attr_reader :boundary, :body
29
+
30
+ def initialize
31
+ # Chose the same number of random bytes that Go uses in its standard
32
+ # library implementation. Easily enough entropy to ensure that it won't
33
+ # be present in a file we're sending.
34
+ @boundary = SecureRandom.hex(30)
35
+
36
+ @body = String.new
37
+ @closed = false
38
+ @first_field = true
39
+ end
40
+
41
+ # Gets the content type string including the boundary.
42
+ #
43
+ # @return [String] The content type with boundary
44
+ def content_type
45
+ "#{CONTENT_TYPE}; boundary=#{@boundary}"
46
+ end
47
+
48
+ # Encode the given FormData object into a multipart/form-data payload.
49
+ #
50
+ # @param form_data [FormData] The form data to encode
51
+ # @return [String] The encoded body.
52
+ def encode(form_data)
53
+ return "" if form_data.parts.empty?
54
+
55
+ form_data.parts.each do |part|
56
+ write_part(part)
57
+ end
58
+ close
59
+
60
+ @body
61
+ end
62
+
63
+ # Writes a FormDataPart to the encoder.
64
+ #
65
+ # @param part [FormDataPart] The part to write
66
+ # @return [nil]
67
+ def write_part(part)
68
+ raise "Cannot write to closed encoder" if @closed
69
+
70
+ write_field(
71
+ name: part.name,
72
+ data: part.contents,
73
+ filename: part.filename,
74
+ headers: part.headers
75
+ )
76
+
77
+ nil
78
+ end
79
+
80
+ # Writes a field to the encoder.
81
+ #
82
+ # @param name [String] The field name
83
+ # @param data [String] The field data
84
+ # @param filename [String, nil] Optional filename
85
+ # @param headers [Hash<String, String>, nil] Optional additional headers
86
+ # @return [nil]
87
+ def write_field(name:, data:, filename: nil, headers: nil)
88
+ raise "Cannot write to closed encoder" if @closed
89
+
90
+ if @first_field
91
+ @first_field = false
92
+ else
93
+ @body << CRLF
94
+ end
95
+
96
+ @body << "--#{@boundary}#{CRLF}"
97
+ @body << %(Content-Disposition: form-data; name="#{escape(name.to_s)}")
98
+ @body << %(; filename="#{escape(filename)}") if filename
99
+ @body << CRLF
100
+
101
+ if headers
102
+ headers.each do |key, value|
103
+ @body << "#{key}: #{value}#{CRLF}"
104
+ end
105
+ elsif filename
106
+ # Default content type for files.
107
+ @body << "Content-Type: application/octet-stream#{CRLF}"
108
+ end
109
+
110
+ @body << CRLF
111
+ @body << data.to_s
112
+
113
+ nil
114
+ end
115
+
116
+ # Finalizes the encoder by writing the final boundary.
117
+ #
118
+ # @return [nil]
119
+ def close
120
+ raise "Encoder already closed" if @closed
121
+
122
+ @body << CRLF
123
+ @body << "--#{@boundary}--"
124
+ @closed = true
125
+
126
+ nil
127
+ end
128
+
129
+ private
130
+
131
+ # Escapes quotes for use in header values and replaces line breaks with spaces.
132
+ #
133
+ # @param str [String] The string to escape
134
+ # @return [String] The escaped string
135
+ def escape(str)
136
+ str.to_s.gsub('"', "%22").tr("\n", " ").tr("\r", " ")
137
+ end
138
+ end
139
+ end
140
+ end
141
+ end
@@ -0,0 +1,78 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Payabli
4
+ module Internal
5
+ module Multipart
6
+ # @api private
7
+ class FormData
8
+ # @return [Array<FormDataPart>] The parts in this multipart form data.
9
+ attr_reader :parts
10
+
11
+ # @return [Encoder] The encoder for this multipart form data.
12
+ private attr_reader :encoder
13
+
14
+ def initialize
15
+ @encoder = Encoder.new
16
+ @parts = []
17
+ end
18
+
19
+ # Adds a new part to the multipart form data.
20
+ #
21
+ # @param name [String] The name of the form field
22
+ # @param value [String, Integer, Float, Boolean, #read] The value of the field
23
+ # @param content_type [String, nil] Optional content type
24
+ # @return [self] Returns self for chaining
25
+ def add(name:, value:, content_type: nil)
26
+ headers = content_type ? { "Content-Type" => content_type } : nil
27
+ add_part(FormDataPart.new(name:, value:, headers:))
28
+ end
29
+
30
+ # Adds a file to the multipart form data.
31
+ #
32
+ # @param name [String] The name of the form field
33
+ # @param file [#read] The file or readable object
34
+ # @param filename [String, nil] Optional filename (defaults to basename of path for File objects)
35
+ # @param content_type [String, nil] Optional content type (e.g. "image/png")
36
+ # @return [self] Returns self for chaining
37
+ def add_file(name:, file:, filename: nil, content_type: nil)
38
+ headers = content_type ? { "Content-Type" => content_type } : nil
39
+ filename ||= filename_for(file)
40
+ add_part(FormDataPart.new(name:, value: file, filename:, headers:))
41
+ end
42
+
43
+ # Adds a pre-created part to the multipart form data.
44
+ #
45
+ # @param part [FormDataPart] The part to add
46
+ # @return [self] Returns self for chaining
47
+ def add_part(part)
48
+ @parts << part
49
+ self
50
+ end
51
+
52
+ # Gets the content type string including the boundary.
53
+ #
54
+ # @return [String] The content type with boundary.
55
+ def content_type
56
+ @encoder.content_type
57
+ end
58
+
59
+ # Encode the multipart form data into a multipart/form-data payload.
60
+ #
61
+ # @return [String] The encoded body.
62
+ def encode
63
+ @encoder.encode(self)
64
+ end
65
+
66
+ private
67
+
68
+ def filename_for(file)
69
+ if file.is_a?(::File) || file.respond_to?(:path)
70
+ ::File.basename(file.path)
71
+ elsif file.respond_to?(:name)
72
+ file.name
73
+ end
74
+ end
75
+ end
76
+ end
77
+ end
78
+ end
@@ -0,0 +1,51 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "securerandom"
4
+
5
+ module Payabli
6
+ module Internal
7
+ module Multipart
8
+ # @api private
9
+ class FormDataPart
10
+ attr_reader :name, :contents, :filename, :headers
11
+
12
+ # @param name [String] The name of the form field
13
+ # @param value [String, Integer, Float, Boolean, File, #read] The value of the field
14
+ # @param filename [String, nil] Optional filename for file uploads
15
+ # @param headers [Hash<String, String>, nil] Optional additional headers
16
+ def initialize(name:, value:, filename: nil, headers: nil)
17
+ @name = name
18
+ @contents = convert_to_content(value)
19
+ @filename = filename
20
+ @headers = headers
21
+ end
22
+
23
+ # Converts the part to a hash suitable for serialization.
24
+ #
25
+ # @return [Hash] A hash representation of the part
26
+ def to_hash
27
+ result = {
28
+ name: @name,
29
+ contents: @contents
30
+ }
31
+ result[:filename] = @filename if @filename
32
+ result[:headers] = @headers if @headers
33
+ result
34
+ end
35
+
36
+ private
37
+
38
+ # Converts various types of values to a content representation
39
+ # @param value [String, Integer, Float, Boolean, #read] The value to convert
40
+ # @return [String] The string representation of the value
41
+ def convert_to_content(value)
42
+ if value.respond_to?(:read)
43
+ value.read
44
+ else
45
+ value.to_s
46
+ end
47
+ end
48
+ end
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,37 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Payabli
4
+ module Internal
5
+ module Multipart
6
+ # @api private
7
+ class Request < Payabli::Internal::Http::BaseRequest
8
+ attr_reader :body
9
+
10
+ # @param base_url [String] The base URL for the request
11
+ # @param path [String] The path for the request
12
+ # @param method [Symbol] The HTTP method for the request (:get, :post, etc.)
13
+ # @param headers [Hash] Additional headers for the request (optional)
14
+ # @param query [Hash] Query parameters for the request (optional)
15
+ # @param body [MultipartFormData, nil] The multipart form data for the request (optional)
16
+ # @param request_options [Payabli::RequestOptions, Hash{Symbol=>Object}, nil]
17
+ def initialize(base_url:, path:, method:, headers: {}, query: {}, body: nil, request_options: {})
18
+ super(base_url:, path:, method:, headers:, query:, request_options:)
19
+
20
+ @body = body
21
+ end
22
+
23
+ # @return [Hash] The encoded HTTP request headers.
24
+ def encode_headers
25
+ {
26
+ "Content-Type" => @body.content_type
27
+ }.merge(@headers)
28
+ end
29
+
30
+ # @return [String, nil] The encoded HTTP request body.
31
+ def encode_body
32
+ @body&.encode
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,47 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Payabli
4
+ module Internal
5
+ module Types
6
+ # An array of a specific type
7
+ class Array
8
+ include Payabli::Internal::Types::Type
9
+
10
+ attr_reader :type
11
+
12
+ class << self
13
+ # Instantiates a new `Array` of a given type
14
+ #
15
+ # @param type [Object] The member type of this array
16
+ #
17
+ # @return [Payabli::Internal::Types::Array]
18
+ def [](type)
19
+ new(type)
20
+ end
21
+ end
22
+
23
+ # @api private
24
+ def initialize(type)
25
+ @type = type
26
+ end
27
+
28
+ # Coerces a value into this array
29
+ #
30
+ # @param value [Object]
31
+ # @option strict [Boolean]
32
+ # @return [::Array]
33
+ def coerce(value, strict: strict?)
34
+ unless value.is_a?(::Array)
35
+ raise Errors::TypeError, "cannot coerce `#{value.class}` to Array<#{type}>" if strict
36
+
37
+ return value
38
+ end
39
+
40
+ value.map do |element|
41
+ Utils.coerce(type, element, strict: strict)
42
+ end
43
+ end
44
+ end
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,34 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Payabli
4
+ module Internal
5
+ module Types
6
+ module Boolean
7
+ extend Payabli::Internal::Types::Union
8
+
9
+ member TrueClass
10
+ member FalseClass
11
+
12
+ # Overrides the base coercion method for enums to allow integer and string values to become booleans
13
+ #
14
+ # @param value [Object]
15
+ # @option strict [Boolean]
16
+ # @return [Object]
17
+ def self.coerce(value, strict: strict?)
18
+ case value
19
+ when TrueClass, FalseClass
20
+ value
21
+ when Integer
22
+ return value == 1
23
+ when String
24
+ return %w[1 true].include?(value)
25
+ end
26
+
27
+ raise Errors::TypeError, "cannot coerce `#{value.class}` to Boolean" if strict
28
+
29
+ value
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,48 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Payabli
4
+ module Internal
5
+ module Types
6
+ # Module for defining enums
7
+ module Enum
8
+ include Type
9
+
10
+ # @api private
11
+ #
12
+ # @return [Array<Object>]
13
+ def values
14
+ @values ||= constants.map { |c| const_get(c) }
15
+ end
16
+
17
+ # @api private
18
+ def finalize!
19
+ values
20
+ end
21
+
22
+ # @api private
23
+ def strict?
24
+ @strict ||= false
25
+ end
26
+
27
+ # @api private
28
+ def strict!
29
+ @strict = true
30
+ end
31
+
32
+ def coerce(value, strict: strict?)
33
+ coerced_value = Utils.coerce(Symbol, value)
34
+
35
+ return coerced_value if values.include?(coerced_value)
36
+
37
+ raise Errors::TypeError, "`#{value}` not in enum #{self}" if strict
38
+
39
+ value
40
+ end
41
+
42
+ def inspect
43
+ "#{name}[#{values.join(", ")}]"
44
+ end
45
+ end
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,36 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Payabli
4
+ module Internal
5
+ module Types
6
+ class Hash
7
+ include Type
8
+
9
+ attr_reader :key_type, :value_type
10
+
11
+ class << self
12
+ def [](key_type, value_type)
13
+ new(key_type, value_type)
14
+ end
15
+ end
16
+
17
+ def initialize(key_type, value_type)
18
+ @key_type = key_type
19
+ @value_type = value_type
20
+ end
21
+
22
+ def coerce(value, strict: strict?)
23
+ unless value.is_a?(::Hash)
24
+ raise Errors::TypeError, "not hash" if strict
25
+
26
+ return value
27
+ end
28
+
29
+ value.to_h do |k, v|
30
+ [Utils.coerce(key_type, k, strict: strict), Utils.coerce(value_type, v, strict: strict)]
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Payabli
4
+ module Internal
5
+ module Types
6
+ class Model
7
+ # Definition of a field on a model
8
+ class Field
9
+ attr_reader :name, :type, :optional, :nullable, :api_name, :value, :default
10
+
11
+ def initialize(name:, type:, optional: false, nullable: false, api_name: nil, value: nil, default: nil)
12
+ @name = name.to_sym
13
+ @type = type
14
+ @optional = optional
15
+ @nullable = nullable
16
+ @api_name = api_name || name.to_s
17
+ @value = value
18
+ @default = default
19
+ end
20
+
21
+ def literal?
22
+ !value.nil?
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,198 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Payabli
4
+ module Internal
5
+ module Types
6
+ # @abstract
7
+ #
8
+ # An abstract model that all data objects will inherit from
9
+ class Model
10
+ include Type
11
+
12
+ class << self
13
+ # The defined fields for this model
14
+ #
15
+ # @api private
16
+ #
17
+ # @return [Hash<Symbol, Field>]
18
+ def fields
19
+ @fields ||= if self < Payabli::Internal::Types::Model
20
+ superclass.fields.dup
21
+ else
22
+ {}
23
+ end
24
+ end
25
+
26
+ # Any extra fields that have been created from instantiation
27
+ #
28
+ # @api private
29
+ #
30
+ # @return [Hash<Symbol, Field>]
31
+ def extra_fields
32
+ @extra_fields ||= {}
33
+ end
34
+
35
+ # Define a new field on this model
36
+ #
37
+ # @param name [Symbol] The name of the field
38
+ # @param type [Class] Type of the field
39
+ # @option optional [Boolean] If it is an optional field
40
+ # @option nullable [Boolean] If it is a nullable field
41
+ # @option api_name [Symbol, String] Name in the API of this field. When serializing/deserializing, will use
42
+ # this field name
43
+ # @return [void]
44
+ def field(name, type, optional: false, nullable: false, api_name: nil, default: nil)
45
+ add_field_definition(name: name, type: type, optional: optional, nullable: nullable, api_name: api_name,
46
+ default: default)
47
+
48
+ define_accessor(name)
49
+ define_setter(name)
50
+ end
51
+
52
+ # Define a new literal for this model
53
+ #
54
+ # @param name [Symbol]
55
+ # @param value [Object]
56
+ # @option api_name [Symbol, String]
57
+ # @return [void]
58
+ def literal(name, value, api_name: nil)
59
+ add_field_definition(name: name, type: value.class, optional: false, nullable: false, api_name: api_name,
60
+ value: value)
61
+
62
+ define_accessor(name)
63
+ end
64
+
65
+ # Adds a new field definition into the class's fields registry
66
+ #
67
+ # @api private
68
+ #
69
+ # @param name [Symbol]
70
+ # @param type [Class]
71
+ # @option optional [Boolean]
72
+ # @return [void]
73
+ private def add_field_definition(name:, type:, optional:, nullable:, api_name:, default: nil, value: nil)
74
+ fields[name.to_sym] =
75
+ Field.new(name: name, type: type, optional: optional, nullable: nullable, api_name: api_name,
76
+ value: value, default: default)
77
+ end
78
+
79
+ # Adds a new field definition into the class's extra fields registry
80
+ #
81
+ # @api private
82
+ #
83
+ # @param name [Symbol]
84
+ # @param type [Class]
85
+ # @option required [Boolean]
86
+ # @option optional [Boolean]
87
+ # @return [void]
88
+ def add_extra_field_definition(name:, type:)
89
+ return if extra_fields.key?(name.to_sym)
90
+
91
+ extra_fields[name.to_sym] = Field.new(name: name, type: type, optional: true, nullable: false)
92
+
93
+ define_accessor(name)
94
+ define_setter(name)
95
+ end
96
+
97
+ # @api private
98
+ private def define_accessor(name)
99
+ method_name = name.to_sym
100
+
101
+ define_method(method_name) do
102
+ @data[name]
103
+ end
104
+ end
105
+
106
+ # @api private
107
+ private def define_setter(name)
108
+ method_name = :"#{name}="
109
+
110
+ define_method(method_name) do |val|
111
+ @data[name] = val
112
+ end
113
+ end
114
+
115
+ def coerce(value, strict: (respond_to?(:strict?) ? strict? : false))
116
+ return value if value.is_a?(self)
117
+
118
+ return value unless value.is_a?(::Hash)
119
+
120
+ new(value)
121
+ end
122
+
123
+ def load(str)
124
+ coerce(::JSON.parse(str, symbolize_names: true))
125
+ end
126
+
127
+ def ===(instance)
128
+ instance.class.ancestors.include?(self)
129
+ end
130
+ end
131
+
132
+ # Creates a new instance of this model
133
+ # TODO: Should all this logic be in `#coerce` instead?
134
+ #
135
+ # @param values [Hash]
136
+ # @option strict [Boolean]
137
+ # @return [self]
138
+ def initialize(values = {})
139
+ @data = {}
140
+
141
+ values = Utils.symbolize_keys(values.dup)
142
+
143
+ self.class.fields.each do |field_name, field|
144
+ value = values.delete(field.api_name.to_sym) || values.delete(field.api_name) || values.delete(field_name)
145
+
146
+ field_value = value || (if field.literal?
147
+ field.value
148
+ elsif field.default
149
+ field.default
150
+ end)
151
+
152
+ @data[field_name] = Utils.coerce(field.type, field_value)
153
+ end
154
+
155
+ # Any remaining values in the input become extra fields
156
+ values.each do |name, value|
157
+ self.class.add_extra_field_definition(name: name, type: value.class)
158
+
159
+ @data[name.to_sym] = value
160
+ end
161
+ end
162
+
163
+ def to_h
164
+ self.class.fields.merge(self.class.extra_fields).each_with_object({}) do |(name, field), acc|
165
+ # If there is a value present in the data, use that value
166
+ # If there is a `nil` value present in the data, and it is optional but NOT nullable, exclude key altogether
167
+ # If there is a `nil` value present in the data, and it is optional and nullable, use the nil value
168
+
169
+ value = @data[name]
170
+
171
+ next if value.nil? && field.optional && !field.nullable
172
+
173
+ if value.is_a?(::Array)
174
+ value = value.map { |item| item.respond_to?(:to_h) ? item.to_h : item }
175
+ elsif value.respond_to?(:to_h)
176
+ value = value.to_h
177
+ end
178
+
179
+ acc[field.api_name] = value
180
+ end
181
+ end
182
+
183
+ def ==(other)
184
+ self.class == other.class && to_h == other.to_h
185
+ end
186
+
187
+ # @return [String]
188
+ def inspect
189
+ attrs = @data.map do |name, value|
190
+ "#{name}=#{value.inspect}"
191
+ end
192
+
193
+ "#<#{self.class.name}:0x#{object_id&.to_s(16)} #{attrs.join(" ")}>"
194
+ end
195
+ end
196
+ end
197
+ end
198
+ end