late-sdk 0.0.43 → 0.0.44

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 (273) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +124 -0
  3. data/docs/AddWhatsAppBroadcastRecipients200Response.md +24 -0
  4. data/docs/AddWhatsAppBroadcastRecipientsRequest.md +18 -0
  5. data/docs/AddWhatsAppBroadcastRecipientsRequestRecipientsInner.md +22 -0
  6. data/docs/BulkDeleteWhatsAppContacts200Response.md +20 -0
  7. data/docs/BulkDeleteWhatsAppContactsRequest.md +18 -0
  8. data/docs/BulkUpdateWhatsAppContacts200Response.md +24 -0
  9. data/docs/BulkUpdateWhatsAppContactsRequest.md +24 -0
  10. data/docs/CancelWhatsAppBroadcastSchedule200Response.md +22 -0
  11. data/docs/CancelWhatsAppBroadcastSchedule200ResponseBroadcast.md +20 -0
  12. data/docs/CreateWhatsAppBroadcast200Response.md +20 -0
  13. data/docs/CreateWhatsAppBroadcast200ResponseBroadcast.md +30 -0
  14. data/docs/CreateWhatsAppBroadcastRequest.md +26 -0
  15. data/docs/CreateWhatsAppBroadcastRequestRecipientsInner.md +22 -0
  16. data/docs/CreateWhatsAppContact200Response.md +20 -0
  17. data/docs/CreateWhatsAppContact200ResponseContact.md +34 -0
  18. data/docs/CreateWhatsAppContactRequest.md +36 -0
  19. data/docs/CreateWhatsAppTemplate200Response.md +20 -0
  20. data/docs/CreateWhatsAppTemplate200ResponseTemplate.md +26 -0
  21. data/docs/CreateWhatsAppTemplateRequest.md +26 -0
  22. data/docs/DeleteWhatsAppGroupRequest.md +20 -0
  23. data/docs/GetPreverifiedWhatsAppNumbers200Response.md +20 -0
  24. data/docs/GetPreverifiedWhatsAppNumbers200ResponseNumbersInner.md +26 -0
  25. data/docs/GetWhatsAppBroadcast200Response.md +20 -0
  26. data/docs/GetWhatsAppBroadcast200ResponseBroadcast.md +46 -0
  27. data/docs/GetWhatsAppBroadcastRecipients200Response.md +24 -0
  28. data/docs/GetWhatsAppBroadcastRecipients200ResponseRecipientsInner.md +34 -0
  29. data/docs/GetWhatsAppBroadcastRecipients200ResponseSummary.md +28 -0
  30. data/docs/GetWhatsAppBroadcasts200Response.md +22 -0
  31. data/docs/GetWhatsAppBroadcasts200ResponseBroadcastsInner.md +44 -0
  32. data/docs/GetWhatsAppBroadcasts200ResponseBroadcastsInnerTemplate.md +20 -0
  33. data/docs/GetWhatsAppBusinessProfile200Response.md +20 -0
  34. data/docs/GetWhatsAppBusinessProfile200ResponseBusinessProfile.md +30 -0
  35. data/docs/GetWhatsAppContact200Response.md +20 -0
  36. data/docs/GetWhatsAppContact200ResponseContact.md +56 -0
  37. data/docs/GetWhatsAppContacts200Response.md +24 -0
  38. data/docs/GetWhatsAppContacts200ResponseContactsInner.md +48 -0
  39. data/docs/GetWhatsAppContacts200ResponseFilters.md +20 -0
  40. data/docs/GetWhatsAppContacts200ResponsePagination.md +24 -0
  41. data/docs/GetWhatsAppGroups200Response.md +22 -0
  42. data/docs/GetWhatsAppGroups200ResponseGroupsInner.md +22 -0
  43. data/docs/GetWhatsAppGroups200ResponseSummary.md +22 -0
  44. data/docs/GetWhatsAppPhoneNumber200Response.md +18 -0
  45. data/docs/GetWhatsAppPhoneNumber200ResponsePhoneNumber.md +30 -0
  46. data/docs/GetWhatsAppPhoneNumbers200Response.md +18 -0
  47. data/docs/GetWhatsAppPhoneNumbers200ResponseNumbersInner.md +34 -0
  48. data/docs/GetWhatsAppTemplate200Response.md +20 -0
  49. data/docs/GetWhatsAppTemplate200ResponseTemplate.md +28 -0
  50. data/docs/GetWhatsAppTemplates200Response.md +20 -0
  51. data/docs/GetWhatsAppTemplates200ResponseTemplatesInner.md +28 -0
  52. data/docs/ImportWhatsAppContacts200Response.md +22 -0
  53. data/docs/ImportWhatsAppContacts200ResponseResultsInner.md +26 -0
  54. data/docs/ImportWhatsAppContacts200ResponseSummary.md +24 -0
  55. data/docs/ImportWhatsAppContactsRequest.md +26 -0
  56. data/docs/ImportWhatsAppContactsRequestContactsInner.md +32 -0
  57. data/docs/PurchaseWhatsAppPhoneNumber200Response.md +49 -0
  58. data/docs/PurchaseWhatsAppPhoneNumber200ResponseOneOf.md +20 -0
  59. data/docs/PurchaseWhatsAppPhoneNumber200ResponseOneOf1.md +20 -0
  60. data/docs/PurchaseWhatsAppPhoneNumber200ResponseOneOf1PhoneNumber.md +30 -0
  61. data/docs/PurchaseWhatsAppPhoneNumberRequest.md +18 -0
  62. data/docs/ReleaseWhatsAppPhoneNumber200Response.md +20 -0
  63. data/docs/ReleaseWhatsAppPhoneNumber200ResponsePhoneNumber.md +24 -0
  64. data/docs/RemoveWhatsAppBroadcastRecipients200Response.md +22 -0
  65. data/docs/RemoveWhatsAppBroadcastRecipientsRequest.md +18 -0
  66. data/docs/RenameWhatsAppGroup200Response.md +22 -0
  67. data/docs/RenameWhatsAppGroupRequest.md +22 -0
  68. data/docs/RequestWhatsAppVerificationCode200Response.md +20 -0
  69. data/docs/RequestWhatsAppVerificationCodeRequest.md +18 -0
  70. data/docs/ScheduleWhatsAppBroadcast200Response.md +20 -0
  71. data/docs/ScheduleWhatsAppBroadcast200ResponseBroadcast.md +22 -0
  72. data/docs/ScheduleWhatsAppBroadcastRequest.md +18 -0
  73. data/docs/SearchAvailableWhatsAppNumbers200Response.md +18 -0
  74. data/docs/SendWhatsAppBroadcast200Response.md +26 -0
  75. data/docs/SendWhatsAppBulk200Response.md +22 -0
  76. data/docs/SendWhatsAppBulk200ResponseResultsInner.md +24 -0
  77. data/docs/SendWhatsAppBulk200ResponseSummary.md +22 -0
  78. data/docs/SendWhatsAppBulkRequest.md +22 -0
  79. data/docs/SendWhatsAppBulkRequestRecipientsInner.md +20 -0
  80. data/docs/SendWhatsAppBulkRequestTemplate.md +22 -0
  81. data/docs/UpdateWhatsAppBusinessProfileRequest.md +32 -0
  82. data/docs/UpdateWhatsAppContact200Response.md +20 -0
  83. data/docs/UpdateWhatsAppContact200ResponseContact.md +40 -0
  84. data/docs/UpdateWhatsAppContactRequest.md +34 -0
  85. data/docs/UpdateWhatsAppTemplate200Response.md +20 -0
  86. data/docs/UpdateWhatsAppTemplate200ResponseTemplate.md +22 -0
  87. data/docs/UpdateWhatsAppTemplateRequest.md +20 -0
  88. data/docs/VerifyWhatsAppPhoneNumber200Response.md +22 -0
  89. data/docs/VerifyWhatsAppPhoneNumberRequest.md +18 -0
  90. data/docs/WhatsAppApi.md +2081 -0
  91. data/docs/WhatsAppPhoneNumbersApi.md +585 -0
  92. data/lib/late-sdk/api/whats_app_api.rb +2021 -0
  93. data/lib/late-sdk/api/whats_app_phone_numbers_api.rb +564 -0
  94. data/lib/late-sdk/models/add_whats_app_broadcast_recipients200_response.rb +177 -0
  95. data/lib/late-sdk/models/add_whats_app_broadcast_recipients_request.rb +176 -0
  96. data/lib/late-sdk/models/add_whats_app_broadcast_recipients_request_recipients_inner.rb +185 -0
  97. data/lib/late-sdk/models/bulk_delete_whats_app_contacts200_response.rb +157 -0
  98. data/lib/late-sdk/models/bulk_delete_whats_app_contacts_request.rb +176 -0
  99. data/lib/late-sdk/models/bulk_update_whats_app_contacts200_response.rb +176 -0
  100. data/lib/late-sdk/models/bulk_update_whats_app_contacts_request.rb +251 -0
  101. data/lib/late-sdk/models/cancel_whats_app_broadcast_schedule200_response.rb +165 -0
  102. data/lib/late-sdk/models/cancel_whats_app_broadcast_schedule200_response_broadcast.rb +157 -0
  103. data/lib/late-sdk/models/create_whats_app_broadcast200_response.rb +156 -0
  104. data/lib/late-sdk/models/create_whats_app_broadcast200_response_broadcast.rb +202 -0
  105. data/lib/late-sdk/models/create_whats_app_broadcast_request.rb +240 -0
  106. data/lib/late-sdk/models/create_whats_app_broadcast_request_recipients_inner.rb +186 -0
  107. data/lib/late-sdk/models/create_whats_app_contact200_response.rb +156 -0
  108. data/lib/late-sdk/models/create_whats_app_contact200_response_contact.rb +223 -0
  109. data/lib/late-sdk/models/create_whats_app_contact_request.rb +297 -0
  110. data/lib/late-sdk/models/create_whats_app_template200_response.rb +156 -0
  111. data/lib/late-sdk/models/create_whats_app_template200_response_template.rb +183 -0
  112. data/lib/late-sdk/models/create_whats_app_template_request.rb +310 -0
  113. data/lib/late-sdk/models/delete_whats_app_group_request.rb +192 -0
  114. data/lib/late-sdk/models/get_preverified_whats_app_numbers200_response.rb +161 -0
  115. data/lib/late-sdk/models/get_preverified_whats_app_numbers200_response_numbers_inner.rb +183 -0
  116. data/lib/late-sdk/models/get_whats_app_broadcast200_response.rb +156 -0
  117. data/lib/late-sdk/models/get_whats_app_broadcast200_response_broadcast.rb +307 -0
  118. data/lib/late-sdk/models/get_whats_app_broadcast_recipients200_response.rb +176 -0
  119. data/lib/late-sdk/models/get_whats_app_broadcast_recipients200_response_recipients_inner.rb +253 -0
  120. data/lib/late-sdk/models/get_whats_app_broadcast_recipients200_response_summary.rb +192 -0
  121. data/lib/late-sdk/models/get_whats_app_broadcasts200_response.rb +167 -0
  122. data/lib/late-sdk/models/get_whats_app_broadcasts200_response_broadcasts_inner.rb +298 -0
  123. data/lib/late-sdk/models/get_whats_app_broadcasts200_response_broadcasts_inner_template.rb +156 -0
  124. data/lib/late-sdk/models/get_whats_app_business_profile200_response.rb +156 -0
  125. data/lib/late-sdk/models/get_whats_app_business_profile200_response_business_profile.rb +225 -0
  126. data/lib/late-sdk/models/get_whats_app_contact200_response.rb +156 -0
  127. data/lib/late-sdk/models/get_whats_app_contact200_response_contact.rb +322 -0
  128. data/lib/late-sdk/models/get_whats_app_contacts200_response.rb +176 -0
  129. data/lib/late-sdk/models/get_whats_app_contacts200_response_contacts_inner.rb +286 -0
  130. data/lib/late-sdk/models/get_whats_app_contacts200_response_filters.rb +160 -0
  131. data/lib/late-sdk/models/get_whats_app_contacts200_response_pagination.rb +174 -0
  132. data/lib/late-sdk/models/get_whats_app_groups200_response.rb +167 -0
  133. data/lib/late-sdk/models/get_whats_app_groups200_response_groups_inner.rb +167 -0
  134. data/lib/late-sdk/models/get_whats_app_groups200_response_summary.rb +165 -0
  135. data/lib/late-sdk/models/get_whats_app_phone_number200_response.rb +147 -0
  136. data/lib/late-sdk/models/get_whats_app_phone_number200_response_phone_number.rb +235 -0
  137. data/lib/late-sdk/models/get_whats_app_phone_numbers200_response.rb +149 -0
  138. data/lib/late-sdk/models/get_whats_app_phone_numbers200_response_numbers_inner.rb +253 -0
  139. data/lib/late-sdk/models/get_whats_app_template200_response.rb +156 -0
  140. data/lib/late-sdk/models/get_whats_app_template200_response_template.rb +194 -0
  141. data/lib/late-sdk/models/get_whats_app_templates200_response.rb +158 -0
  142. data/lib/late-sdk/models/get_whats_app_templates200_response_templates_inner.rb +241 -0
  143. data/lib/late-sdk/models/import_whats_app_contacts200_response.rb +167 -0
  144. data/lib/late-sdk/models/import_whats_app_contacts200_response_results_inner.rb +183 -0
  145. data/lib/late-sdk/models/import_whats_app_contacts200_response_summary.rb +174 -0
  146. data/lib/late-sdk/models/import_whats_app_contacts_request.rb +239 -0
  147. data/lib/late-sdk/models/import_whats_app_contacts_request_contacts_inner.rb +252 -0
  148. data/lib/late-sdk/models/purchase_whats_app_phone_number200_response.rb +104 -0
  149. data/lib/late-sdk/models/purchase_whats_app_phone_number200_response_one_of.rb +157 -0
  150. data/lib/late-sdk/models/purchase_whats_app_phone_number200_response_one_of1.rb +157 -0
  151. data/lib/late-sdk/models/purchase_whats_app_phone_number200_response_one_of1_phone_number.rb +201 -0
  152. data/lib/late-sdk/models/purchase_whats_app_phone_number_request.rb +165 -0
  153. data/lib/late-sdk/models/release_whats_app_phone_number200_response.rb +156 -0
  154. data/lib/late-sdk/models/release_whats_app_phone_number200_response_phone_number.rb +175 -0
  155. data/lib/late-sdk/models/remove_whats_app_broadcast_recipients200_response.rb +167 -0
  156. data/lib/late-sdk/models/remove_whats_app_broadcast_recipients_request.rb +167 -0
  157. data/lib/late-sdk/models/rename_whats_app_group200_response.rb +166 -0
  158. data/lib/late-sdk/models/rename_whats_app_group_request.rb +219 -0
  159. data/lib/late-sdk/models/request_whats_app_verification_code200_response.rb +190 -0
  160. data/lib/late-sdk/models/request_whats_app_verification_code_request.rb +184 -0
  161. data/lib/late-sdk/models/schedule_whats_app_broadcast200_response.rb +156 -0
  162. data/lib/late-sdk/models/schedule_whats_app_broadcast200_response_broadcast.rb +166 -0
  163. data/lib/late-sdk/models/schedule_whats_app_broadcast_request.rb +165 -0
  164. data/lib/late-sdk/models/search_available_whats_app_numbers200_response.rb +149 -0
  165. data/lib/late-sdk/models/send_whats_app_broadcast200_response.rb +221 -0
  166. data/lib/late-sdk/models/send_whats_app_bulk200_response.rb +167 -0
  167. data/lib/late-sdk/models/send_whats_app_bulk200_response_results_inner.rb +174 -0
  168. data/lib/late-sdk/models/send_whats_app_bulk200_response_summary.rb +165 -0
  169. data/lib/late-sdk/models/send_whats_app_bulk_request.rb +229 -0
  170. data/lib/late-sdk/models/send_whats_app_bulk_request_recipients_inner.rb +177 -0
  171. data/lib/late-sdk/models/send_whats_app_bulk_request_template.rb +204 -0
  172. data/lib/late-sdk/models/update_whats_app_business_profile_request.rb +294 -0
  173. data/lib/late-sdk/models/update_whats_app_contact200_response.rb +156 -0
  174. data/lib/late-sdk/models/update_whats_app_contact200_response_contact.rb +250 -0
  175. data/lib/late-sdk/models/update_whats_app_contact_request.rb +234 -0
  176. data/lib/late-sdk/models/update_whats_app_template200_response.rb +156 -0
  177. data/lib/late-sdk/models/update_whats_app_template200_response_template.rb +165 -0
  178. data/lib/late-sdk/models/update_whats_app_template_request.rb +194 -0
  179. data/lib/late-sdk/models/verify_whats_app_phone_number200_response.rb +165 -0
  180. data/lib/late-sdk/models/verify_whats_app_phone_number_request.rb +165 -0
  181. data/lib/late-sdk/version.rb +1 -1
  182. data/lib/late-sdk.rb +89 -0
  183. data/openapi.yaml +2144 -0
  184. data/spec/api/whats_app_api_spec.rb +402 -0
  185. data/spec/api/whats_app_phone_numbers_api_spec.rb +137 -0
  186. data/spec/models/add_whats_app_broadcast_recipients200_response_spec.rb +54 -0
  187. data/spec/models/add_whats_app_broadcast_recipients_request_recipients_inner_spec.rb +48 -0
  188. data/spec/models/add_whats_app_broadcast_recipients_request_spec.rb +36 -0
  189. data/spec/models/bulk_delete_whats_app_contacts200_response_spec.rb +42 -0
  190. data/spec/models/bulk_delete_whats_app_contacts_request_spec.rb +36 -0
  191. data/spec/models/bulk_update_whats_app_contacts200_response_spec.rb +54 -0
  192. data/spec/models/bulk_update_whats_app_contacts_request_spec.rb +58 -0
  193. data/spec/models/cancel_whats_app_broadcast_schedule200_response_broadcast_spec.rb +42 -0
  194. data/spec/models/cancel_whats_app_broadcast_schedule200_response_spec.rb +48 -0
  195. data/spec/models/create_whats_app_broadcast200_response_broadcast_spec.rb +72 -0
  196. data/spec/models/create_whats_app_broadcast200_response_spec.rb +42 -0
  197. data/spec/models/create_whats_app_broadcast_request_recipients_inner_spec.rb +48 -0
  198. data/spec/models/create_whats_app_broadcast_request_spec.rb +60 -0
  199. data/spec/models/create_whats_app_contact200_response_contact_spec.rb +84 -0
  200. data/spec/models/create_whats_app_contact200_response_spec.rb +42 -0
  201. data/spec/models/create_whats_app_contact_request_spec.rb +90 -0
  202. data/spec/models/create_whats_app_template200_response_spec.rb +42 -0
  203. data/spec/models/create_whats_app_template200_response_template_spec.rb +60 -0
  204. data/spec/models/create_whats_app_template_request_spec.rb +64 -0
  205. data/spec/models/delete_whats_app_group_request_spec.rb +42 -0
  206. data/spec/models/get_preverified_whats_app_numbers200_response_numbers_inner_spec.rb +60 -0
  207. data/spec/models/get_preverified_whats_app_numbers200_response_spec.rb +42 -0
  208. data/spec/models/get_whats_app_broadcast200_response_broadcast_spec.rb +124 -0
  209. data/spec/models/get_whats_app_broadcast200_response_spec.rb +42 -0
  210. data/spec/models/get_whats_app_broadcast_recipients200_response_recipients_inner_spec.rb +88 -0
  211. data/spec/models/get_whats_app_broadcast_recipients200_response_spec.rb +54 -0
  212. data/spec/models/get_whats_app_broadcast_recipients200_response_summary_spec.rb +66 -0
  213. data/spec/models/get_whats_app_broadcasts200_response_broadcasts_inner_spec.rb +118 -0
  214. data/spec/models/get_whats_app_broadcasts200_response_broadcasts_inner_template_spec.rb +42 -0
  215. data/spec/models/get_whats_app_broadcasts200_response_spec.rb +48 -0
  216. data/spec/models/get_whats_app_business_profile200_response_business_profile_spec.rb +72 -0
  217. data/spec/models/get_whats_app_business_profile200_response_spec.rb +42 -0
  218. data/spec/models/get_whats_app_contact200_response_contact_spec.rb +150 -0
  219. data/spec/models/get_whats_app_contact200_response_spec.rb +42 -0
  220. data/spec/models/get_whats_app_contacts200_response_contacts_inner_spec.rb +126 -0
  221. data/spec/models/get_whats_app_contacts200_response_filters_spec.rb +42 -0
  222. data/spec/models/get_whats_app_contacts200_response_pagination_spec.rb +54 -0
  223. data/spec/models/get_whats_app_contacts200_response_spec.rb +54 -0
  224. data/spec/models/get_whats_app_groups200_response_groups_inner_spec.rb +48 -0
  225. data/spec/models/get_whats_app_groups200_response_spec.rb +48 -0
  226. data/spec/models/get_whats_app_groups200_response_summary_spec.rb +48 -0
  227. data/spec/models/get_whats_app_phone_number200_response_phone_number_spec.rb +76 -0
  228. data/spec/models/get_whats_app_phone_number200_response_spec.rb +36 -0
  229. data/spec/models/get_whats_app_phone_numbers200_response_numbers_inner_spec.rb +88 -0
  230. data/spec/models/get_whats_app_phone_numbers200_response_spec.rb +36 -0
  231. data/spec/models/get_whats_app_template200_response_spec.rb +42 -0
  232. data/spec/models/get_whats_app_template200_response_template_spec.rb +66 -0
  233. data/spec/models/get_whats_app_templates200_response_spec.rb +42 -0
  234. data/spec/models/get_whats_app_templates200_response_templates_inner_spec.rb +74 -0
  235. data/spec/models/import_whats_app_contacts200_response_results_inner_spec.rb +60 -0
  236. data/spec/models/import_whats_app_contacts200_response_spec.rb +48 -0
  237. data/spec/models/import_whats_app_contacts200_response_summary_spec.rb +54 -0
  238. data/spec/models/import_whats_app_contacts_request_contacts_inner_spec.rb +78 -0
  239. data/spec/models/import_whats_app_contacts_request_spec.rb +60 -0
  240. data/spec/models/purchase_whats_app_phone_number200_response_one_of1_phone_number_spec.rb +72 -0
  241. data/spec/models/purchase_whats_app_phone_number200_response_one_of1_spec.rb +42 -0
  242. data/spec/models/purchase_whats_app_phone_number200_response_one_of_spec.rb +42 -0
  243. data/spec/models/purchase_whats_app_phone_number200_response_spec.rb +32 -0
  244. data/spec/models/purchase_whats_app_phone_number_request_spec.rb +36 -0
  245. data/spec/models/release_whats_app_phone_number200_response_phone_number_spec.rb +54 -0
  246. data/spec/models/release_whats_app_phone_number200_response_spec.rb +42 -0
  247. data/spec/models/remove_whats_app_broadcast_recipients200_response_spec.rb +48 -0
  248. data/spec/models/remove_whats_app_broadcast_recipients_request_spec.rb +36 -0
  249. data/spec/models/rename_whats_app_group200_response_spec.rb +48 -0
  250. data/spec/models/rename_whats_app_group_request_spec.rb +48 -0
  251. data/spec/models/request_whats_app_verification_code200_response_spec.rb +46 -0
  252. data/spec/models/request_whats_app_verification_code_request_spec.rb +40 -0
  253. data/spec/models/schedule_whats_app_broadcast200_response_broadcast_spec.rb +48 -0
  254. data/spec/models/schedule_whats_app_broadcast200_response_spec.rb +42 -0
  255. data/spec/models/schedule_whats_app_broadcast_request_spec.rb +36 -0
  256. data/spec/models/search_available_whats_app_numbers200_response_spec.rb +36 -0
  257. data/spec/models/send_whats_app_broadcast200_response_spec.rb +64 -0
  258. data/spec/models/send_whats_app_bulk200_response_results_inner_spec.rb +54 -0
  259. data/spec/models/send_whats_app_bulk200_response_spec.rb +48 -0
  260. data/spec/models/send_whats_app_bulk200_response_summary_spec.rb +48 -0
  261. data/spec/models/send_whats_app_bulk_request_recipients_inner_spec.rb +42 -0
  262. data/spec/models/send_whats_app_bulk_request_spec.rb +48 -0
  263. data/spec/models/send_whats_app_bulk_request_template_spec.rb +48 -0
  264. data/spec/models/update_whats_app_business_profile_request_spec.rb +78 -0
  265. data/spec/models/update_whats_app_contact200_response_contact_spec.rb +102 -0
  266. data/spec/models/update_whats_app_contact200_response_spec.rb +42 -0
  267. data/spec/models/update_whats_app_contact_request_spec.rb +84 -0
  268. data/spec/models/update_whats_app_template200_response_spec.rb +42 -0
  269. data/spec/models/update_whats_app_template200_response_template_spec.rb +48 -0
  270. data/spec/models/update_whats_app_template_request_spec.rb +42 -0
  271. data/spec/models/verify_whats_app_phone_number200_response_spec.rb +48 -0
  272. data/spec/models/verify_whats_app_phone_number_request_spec.rb +36 -0
  273. metadata +357 -1
@@ -0,0 +1,252 @@
1
+ =begin
2
+ #Late API
3
+
4
+ #API reference for Late. Authenticate with a Bearer API key. Base URL: https://getlate.dev/api
5
+
6
+ The version of the OpenAPI document: 1.0.1
7
+ Contact: support@getlate.dev
8
+ Generated by: https://openapi-generator.tech
9
+ Generator version: 7.19.0
10
+
11
+ =end
12
+
13
+ require 'date'
14
+ require 'time'
15
+
16
+ module Late
17
+ class ImportWhatsAppContactsRequestContactsInner < ApiModelBase
18
+ # Phone number in E.164 format
19
+ attr_accessor :phone
20
+
21
+ # Contact name
22
+ attr_accessor :name
23
+
24
+ attr_accessor :email
25
+
26
+ attr_accessor :company
27
+
28
+ attr_accessor :tags
29
+
30
+ attr_accessor :groups
31
+
32
+ attr_accessor :custom_fields
33
+
34
+ attr_accessor :notes
35
+
36
+ # Attribute mapping from ruby-style variable name to JSON key.
37
+ def self.attribute_map
38
+ {
39
+ :'phone' => :'phone',
40
+ :'name' => :'name',
41
+ :'email' => :'email',
42
+ :'company' => :'company',
43
+ :'tags' => :'tags',
44
+ :'groups' => :'groups',
45
+ :'custom_fields' => :'customFields',
46
+ :'notes' => :'notes'
47
+ }
48
+ end
49
+
50
+ # Returns attribute mapping this model knows about
51
+ def self.acceptable_attribute_map
52
+ attribute_map
53
+ end
54
+
55
+ # Returns all the JSON keys this model knows about
56
+ def self.acceptable_attributes
57
+ acceptable_attribute_map.values
58
+ end
59
+
60
+ # Attribute type mapping.
61
+ def self.openapi_types
62
+ {
63
+ :'phone' => :'String',
64
+ :'name' => :'String',
65
+ :'email' => :'String',
66
+ :'company' => :'String',
67
+ :'tags' => :'Array<String>',
68
+ :'groups' => :'Array<String>',
69
+ :'custom_fields' => :'Hash<String, String>',
70
+ :'notes' => :'String'
71
+ }
72
+ end
73
+
74
+ # List of attributes with nullable: true
75
+ def self.openapi_nullable
76
+ Set.new([
77
+ ])
78
+ end
79
+
80
+ # Initializes the object
81
+ # @param [Hash] attributes Model attributes in the form of hash
82
+ def initialize(attributes = {})
83
+ if (!attributes.is_a?(Hash))
84
+ fail ArgumentError, "The input argument (attributes) must be a hash in `Late::ImportWhatsAppContactsRequestContactsInner` initialize method"
85
+ end
86
+
87
+ # check to see if the attribute exists and convert string to symbol for hash key
88
+ acceptable_attribute_map = self.class.acceptable_attribute_map
89
+ attributes = attributes.each_with_object({}) { |(k, v), h|
90
+ if (!acceptable_attribute_map.key?(k.to_sym))
91
+ fail ArgumentError, "`#{k}` is not a valid attribute in `Late::ImportWhatsAppContactsRequestContactsInner`. Please check the name to make sure it's valid. List of attributes: " + acceptable_attribute_map.keys.inspect
92
+ end
93
+ h[k.to_sym] = v
94
+ }
95
+
96
+ if attributes.key?(:'phone')
97
+ self.phone = attributes[:'phone']
98
+ else
99
+ self.phone = nil
100
+ end
101
+
102
+ if attributes.key?(:'name')
103
+ self.name = attributes[:'name']
104
+ else
105
+ self.name = nil
106
+ end
107
+
108
+ if attributes.key?(:'email')
109
+ self.email = attributes[:'email']
110
+ end
111
+
112
+ if attributes.key?(:'company')
113
+ self.company = attributes[:'company']
114
+ end
115
+
116
+ if attributes.key?(:'tags')
117
+ if (value = attributes[:'tags']).is_a?(Array)
118
+ self.tags = value
119
+ end
120
+ end
121
+
122
+ if attributes.key?(:'groups')
123
+ if (value = attributes[:'groups']).is_a?(Array)
124
+ self.groups = value
125
+ end
126
+ end
127
+
128
+ if attributes.key?(:'custom_fields')
129
+ if (value = attributes[:'custom_fields']).is_a?(Hash)
130
+ self.custom_fields = value
131
+ end
132
+ end
133
+
134
+ if attributes.key?(:'notes')
135
+ self.notes = attributes[:'notes']
136
+ end
137
+ end
138
+
139
+ # Show invalid properties with the reasons. Usually used together with valid?
140
+ # @return Array for valid properties with the reasons
141
+ def list_invalid_properties
142
+ warn '[DEPRECATED] the `list_invalid_properties` method is obsolete'
143
+ invalid_properties = Array.new
144
+ if @phone.nil?
145
+ invalid_properties.push('invalid value for "phone", phone cannot be nil.')
146
+ end
147
+
148
+ if @name.nil?
149
+ invalid_properties.push('invalid value for "name", name cannot be nil.')
150
+ end
151
+
152
+ invalid_properties
153
+ end
154
+
155
+ # Check to see if the all the properties in the model are valid
156
+ # @return true if the model is valid
157
+ def valid?
158
+ warn '[DEPRECATED] the `valid?` method is obsolete'
159
+ return false if @phone.nil?
160
+ return false if @name.nil?
161
+ true
162
+ end
163
+
164
+ # Custom attribute writer method with validation
165
+ # @param [Object] phone Value to be assigned
166
+ def phone=(phone)
167
+ if phone.nil?
168
+ fail ArgumentError, 'phone cannot be nil'
169
+ end
170
+
171
+ @phone = phone
172
+ end
173
+
174
+ # Custom attribute writer method with validation
175
+ # @param [Object] name Value to be assigned
176
+ def name=(name)
177
+ if name.nil?
178
+ fail ArgumentError, 'name cannot be nil'
179
+ end
180
+
181
+ @name = name
182
+ end
183
+
184
+ # Checks equality by comparing each attribute.
185
+ # @param [Object] Object to be compared
186
+ def ==(o)
187
+ return true if self.equal?(o)
188
+ self.class == o.class &&
189
+ phone == o.phone &&
190
+ name == o.name &&
191
+ email == o.email &&
192
+ company == o.company &&
193
+ tags == o.tags &&
194
+ groups == o.groups &&
195
+ custom_fields == o.custom_fields &&
196
+ notes == o.notes
197
+ end
198
+
199
+ # @see the `==` method
200
+ # @param [Object] Object to be compared
201
+ def eql?(o)
202
+ self == o
203
+ end
204
+
205
+ # Calculates hash code according to all attributes.
206
+ # @return [Integer] Hash code
207
+ def hash
208
+ [phone, name, email, company, tags, groups, custom_fields, notes].hash
209
+ end
210
+
211
+ # Builds the object from hash
212
+ # @param [Hash] attributes Model attributes in the form of hash
213
+ # @return [Object] Returns the model itself
214
+ def self.build_from_hash(attributes)
215
+ return nil unless attributes.is_a?(Hash)
216
+ attributes = attributes.transform_keys(&:to_sym)
217
+ transformed_hash = {}
218
+ openapi_types.each_pair do |key, type|
219
+ if attributes.key?(attribute_map[key]) && attributes[attribute_map[key]].nil?
220
+ transformed_hash["#{key}"] = nil
221
+ elsif type =~ /\AArray<(.*)>/i
222
+ # check to ensure the input is an array given that the attribute
223
+ # is documented as an array but the input is not
224
+ if attributes[attribute_map[key]].is_a?(Array)
225
+ transformed_hash["#{key}"] = attributes[attribute_map[key]].map { |v| _deserialize($1, v) }
226
+ end
227
+ elsif !attributes[attribute_map[key]].nil?
228
+ transformed_hash["#{key}"] = _deserialize(type, attributes[attribute_map[key]])
229
+ end
230
+ end
231
+ new(transformed_hash)
232
+ end
233
+
234
+ # Returns the object in the form of hash
235
+ # @return [Hash] Returns the object in the form of hash
236
+ def to_hash
237
+ hash = {}
238
+ self.class.attribute_map.each_pair do |attr, param|
239
+ value = self.send(attr)
240
+ if value.nil?
241
+ is_nullable = self.class.openapi_nullable.include?(attr)
242
+ next if !is_nullable || (is_nullable && !instance_variable_defined?(:"@#{attr}"))
243
+ end
244
+
245
+ hash[param] = _to_hash(value)
246
+ end
247
+ hash
248
+ end
249
+
250
+ end
251
+
252
+ end
@@ -0,0 +1,104 @@
1
+ =begin
2
+ #Late API
3
+
4
+ #API reference for Late. Authenticate with a Bearer API key. Base URL: https://getlate.dev/api
5
+
6
+ The version of the OpenAPI document: 1.0.1
7
+ Contact: support@getlate.dev
8
+ Generated by: https://openapi-generator.tech
9
+ Generator version: 7.19.0
10
+
11
+ =end
12
+
13
+ require 'date'
14
+ require 'time'
15
+
16
+ module Late
17
+ module PurchaseWhatsAppPhoneNumber200Response
18
+ class << self
19
+ # List of class defined in oneOf (OpenAPI v3)
20
+ def openapi_one_of
21
+ [
22
+ :'PurchaseWhatsAppPhoneNumber200ResponseOneOf',
23
+ :'PurchaseWhatsAppPhoneNumber200ResponseOneOf1'
24
+ ]
25
+ end
26
+
27
+ # Builds the object
28
+ # @param [Mixed] Data to be matched against the list of oneOf items
29
+ # @return [Object] Returns the model or the data itself
30
+ def build(data)
31
+ # Go through the list of oneOf items and attempt to identify the appropriate one.
32
+ # Note:
33
+ # - We do not attempt to check whether exactly one item matches.
34
+ # - No advanced validation of types in some cases (e.g. "x: { type: string }" will happily match { x: 123 })
35
+ # due to the way the deserialization is made in the base_object template (it just casts without verifying).
36
+ # - TODO: scalar values are de facto behaving as if they were nullable.
37
+ # - TODO: logging when debugging is set.
38
+ openapi_one_of.each do |klass|
39
+ begin
40
+ next if klass == :AnyType # "nullable: true"
41
+ return find_and_cast_into_type(klass, data)
42
+ rescue # rescue all errors so we keep iterating even if the current item lookup raises
43
+ end
44
+ end
45
+
46
+ openapi_one_of.include?(:AnyType) ? data : nil
47
+ end
48
+
49
+ private
50
+
51
+ SchemaMismatchError = Class.new(StandardError)
52
+
53
+ # Note: 'File' is missing here because in the regular case we get the data _after_ a call to JSON.parse.
54
+ def find_and_cast_into_type(klass, data)
55
+ return if data.nil?
56
+
57
+ case klass.to_s
58
+ when 'Boolean'
59
+ return data if data.instance_of?(TrueClass) || data.instance_of?(FalseClass)
60
+ when 'Float'
61
+ return data if data.instance_of?(Float)
62
+ when 'Integer'
63
+ return data if data.instance_of?(Integer)
64
+ when 'Time'
65
+ return Time.parse(data)
66
+ when 'Date'
67
+ return Date.iso8601(data)
68
+ when 'String'
69
+ return data if data.instance_of?(String)
70
+ when 'Object' # "type: object"
71
+ return data if data.instance_of?(Hash)
72
+ when /\AArray<(?<sub_type>.+)>\z/ # "type: array"
73
+ if data.instance_of?(Array)
74
+ sub_type = Regexp.last_match[:sub_type]
75
+ return data.map { |item| find_and_cast_into_type(sub_type, item) }
76
+ end
77
+ when /\AHash<String, (?<sub_type>.+)>\z/ # "type: object" with "additionalProperties: { ... }"
78
+ if data.instance_of?(Hash) && data.keys.all? { |k| k.instance_of?(Symbol) || k.instance_of?(String) }
79
+ sub_type = Regexp.last_match[:sub_type]
80
+ return data.each_with_object({}) { |(k, v), hsh| hsh[k] = find_and_cast_into_type(sub_type, v) }
81
+ end
82
+ else # model
83
+ const = Late.const_get(klass)
84
+ if const
85
+ if const.respond_to?(:openapi_one_of) # nested oneOf model
86
+ model = const.build(data)
87
+ return model if model
88
+ else
89
+ # raise if data contains keys that are not known to the model
90
+ raise if const.respond_to?(:acceptable_attributes) && !(data.keys - const.acceptable_attributes).empty?
91
+ model = const.build_from_hash(data)
92
+ return model if model
93
+ end
94
+ end
95
+ end
96
+
97
+ raise # if no match by now, raise
98
+ rescue
99
+ raise SchemaMismatchError, "#{data} doesn't match the #{klass} type"
100
+ end
101
+ end
102
+ end
103
+
104
+ end
@@ -0,0 +1,157 @@
1
+ =begin
2
+ #Late API
3
+
4
+ #API reference for Late. Authenticate with a Bearer API key. Base URL: https://getlate.dev/api
5
+
6
+ The version of the OpenAPI document: 1.0.1
7
+ Contact: support@getlate.dev
8
+ Generated by: https://openapi-generator.tech
9
+ Generator version: 7.19.0
10
+
11
+ =end
12
+
13
+ require 'date'
14
+ require 'time'
15
+
16
+ module Late
17
+ # Checkout session created (first number)
18
+ class PurchaseWhatsAppPhoneNumber200ResponseOneOf < ApiModelBase
19
+ attr_accessor :message
20
+
21
+ attr_accessor :checkout_url
22
+
23
+ # Attribute mapping from ruby-style variable name to JSON key.
24
+ def self.attribute_map
25
+ {
26
+ :'message' => :'message',
27
+ :'checkout_url' => :'checkoutUrl'
28
+ }
29
+ end
30
+
31
+ # Returns attribute mapping this model knows about
32
+ def self.acceptable_attribute_map
33
+ attribute_map
34
+ end
35
+
36
+ # Returns all the JSON keys this model knows about
37
+ def self.acceptable_attributes
38
+ acceptable_attribute_map.values
39
+ end
40
+
41
+ # Attribute type mapping.
42
+ def self.openapi_types
43
+ {
44
+ :'message' => :'String',
45
+ :'checkout_url' => :'String'
46
+ }
47
+ end
48
+
49
+ # List of attributes with nullable: true
50
+ def self.openapi_nullable
51
+ Set.new([
52
+ ])
53
+ end
54
+
55
+ # Initializes the object
56
+ # @param [Hash] attributes Model attributes in the form of hash
57
+ def initialize(attributes = {})
58
+ if (!attributes.is_a?(Hash))
59
+ fail ArgumentError, "The input argument (attributes) must be a hash in `Late::PurchaseWhatsAppPhoneNumber200ResponseOneOf` initialize method"
60
+ end
61
+
62
+ # check to see if the attribute exists and convert string to symbol for hash key
63
+ acceptable_attribute_map = self.class.acceptable_attribute_map
64
+ attributes = attributes.each_with_object({}) { |(k, v), h|
65
+ if (!acceptable_attribute_map.key?(k.to_sym))
66
+ fail ArgumentError, "`#{k}` is not a valid attribute in `Late::PurchaseWhatsAppPhoneNumber200ResponseOneOf`. Please check the name to make sure it's valid. List of attributes: " + acceptable_attribute_map.keys.inspect
67
+ end
68
+ h[k.to_sym] = v
69
+ }
70
+
71
+ if attributes.key?(:'message')
72
+ self.message = attributes[:'message']
73
+ end
74
+
75
+ if attributes.key?(:'checkout_url')
76
+ self.checkout_url = attributes[:'checkout_url']
77
+ end
78
+ end
79
+
80
+ # Show invalid properties with the reasons. Usually used together with valid?
81
+ # @return Array for valid properties with the reasons
82
+ def list_invalid_properties
83
+ warn '[DEPRECATED] the `list_invalid_properties` method is obsolete'
84
+ invalid_properties = Array.new
85
+ invalid_properties
86
+ end
87
+
88
+ # Check to see if the all the properties in the model are valid
89
+ # @return true if the model is valid
90
+ def valid?
91
+ warn '[DEPRECATED] the `valid?` method is obsolete'
92
+ true
93
+ end
94
+
95
+ # Checks equality by comparing each attribute.
96
+ # @param [Object] Object to be compared
97
+ def ==(o)
98
+ return true if self.equal?(o)
99
+ self.class == o.class &&
100
+ message == o.message &&
101
+ checkout_url == o.checkout_url
102
+ end
103
+
104
+ # @see the `==` method
105
+ # @param [Object] Object to be compared
106
+ def eql?(o)
107
+ self == o
108
+ end
109
+
110
+ # Calculates hash code according to all attributes.
111
+ # @return [Integer] Hash code
112
+ def hash
113
+ [message, checkout_url].hash
114
+ end
115
+
116
+ # Builds the object from hash
117
+ # @param [Hash] attributes Model attributes in the form of hash
118
+ # @return [Object] Returns the model itself
119
+ def self.build_from_hash(attributes)
120
+ return nil unless attributes.is_a?(Hash)
121
+ attributes = attributes.transform_keys(&:to_sym)
122
+ transformed_hash = {}
123
+ openapi_types.each_pair do |key, type|
124
+ if attributes.key?(attribute_map[key]) && attributes[attribute_map[key]].nil?
125
+ transformed_hash["#{key}"] = nil
126
+ elsif type =~ /\AArray<(.*)>/i
127
+ # check to ensure the input is an array given that the attribute
128
+ # is documented as an array but the input is not
129
+ if attributes[attribute_map[key]].is_a?(Array)
130
+ transformed_hash["#{key}"] = attributes[attribute_map[key]].map { |v| _deserialize($1, v) }
131
+ end
132
+ elsif !attributes[attribute_map[key]].nil?
133
+ transformed_hash["#{key}"] = _deserialize(type, attributes[attribute_map[key]])
134
+ end
135
+ end
136
+ new(transformed_hash)
137
+ end
138
+
139
+ # Returns the object in the form of hash
140
+ # @return [Hash] Returns the object in the form of hash
141
+ def to_hash
142
+ hash = {}
143
+ self.class.attribute_map.each_pair do |attr, param|
144
+ value = self.send(attr)
145
+ if value.nil?
146
+ is_nullable = self.class.openapi_nullable.include?(attr)
147
+ next if !is_nullable || (is_nullable && !instance_variable_defined?(:"@#{attr}"))
148
+ end
149
+
150
+ hash[param] = _to_hash(value)
151
+ end
152
+ hash
153
+ end
154
+
155
+ end
156
+
157
+ end
@@ -0,0 +1,157 @@
1
+ =begin
2
+ #Late API
3
+
4
+ #API reference for Late. Authenticate with a Bearer API key. Base URL: https://getlate.dev/api
5
+
6
+ The version of the OpenAPI document: 1.0.1
7
+ Contact: support@getlate.dev
8
+ Generated by: https://openapi-generator.tech
9
+ Generator version: 7.19.0
10
+
11
+ =end
12
+
13
+ require 'date'
14
+ require 'time'
15
+
16
+ module Late
17
+ # Phone number provisioned inline (subsequent numbers)
18
+ class PurchaseWhatsAppPhoneNumber200ResponseOneOf1 < ApiModelBase
19
+ attr_accessor :message
20
+
21
+ attr_accessor :phone_number
22
+
23
+ # Attribute mapping from ruby-style variable name to JSON key.
24
+ def self.attribute_map
25
+ {
26
+ :'message' => :'message',
27
+ :'phone_number' => :'phoneNumber'
28
+ }
29
+ end
30
+
31
+ # Returns attribute mapping this model knows about
32
+ def self.acceptable_attribute_map
33
+ attribute_map
34
+ end
35
+
36
+ # Returns all the JSON keys this model knows about
37
+ def self.acceptable_attributes
38
+ acceptable_attribute_map.values
39
+ end
40
+
41
+ # Attribute type mapping.
42
+ def self.openapi_types
43
+ {
44
+ :'message' => :'String',
45
+ :'phone_number' => :'PurchaseWhatsAppPhoneNumber200ResponseOneOf1PhoneNumber'
46
+ }
47
+ end
48
+
49
+ # List of attributes with nullable: true
50
+ def self.openapi_nullable
51
+ Set.new([
52
+ ])
53
+ end
54
+
55
+ # Initializes the object
56
+ # @param [Hash] attributes Model attributes in the form of hash
57
+ def initialize(attributes = {})
58
+ if (!attributes.is_a?(Hash))
59
+ fail ArgumentError, "The input argument (attributes) must be a hash in `Late::PurchaseWhatsAppPhoneNumber200ResponseOneOf1` initialize method"
60
+ end
61
+
62
+ # check to see if the attribute exists and convert string to symbol for hash key
63
+ acceptable_attribute_map = self.class.acceptable_attribute_map
64
+ attributes = attributes.each_with_object({}) { |(k, v), h|
65
+ if (!acceptable_attribute_map.key?(k.to_sym))
66
+ fail ArgumentError, "`#{k}` is not a valid attribute in `Late::PurchaseWhatsAppPhoneNumber200ResponseOneOf1`. Please check the name to make sure it's valid. List of attributes: " + acceptable_attribute_map.keys.inspect
67
+ end
68
+ h[k.to_sym] = v
69
+ }
70
+
71
+ if attributes.key?(:'message')
72
+ self.message = attributes[:'message']
73
+ end
74
+
75
+ if attributes.key?(:'phone_number')
76
+ self.phone_number = attributes[:'phone_number']
77
+ end
78
+ end
79
+
80
+ # Show invalid properties with the reasons. Usually used together with valid?
81
+ # @return Array for valid properties with the reasons
82
+ def list_invalid_properties
83
+ warn '[DEPRECATED] the `list_invalid_properties` method is obsolete'
84
+ invalid_properties = Array.new
85
+ invalid_properties
86
+ end
87
+
88
+ # Check to see if the all the properties in the model are valid
89
+ # @return true if the model is valid
90
+ def valid?
91
+ warn '[DEPRECATED] the `valid?` method is obsolete'
92
+ true
93
+ end
94
+
95
+ # Checks equality by comparing each attribute.
96
+ # @param [Object] Object to be compared
97
+ def ==(o)
98
+ return true if self.equal?(o)
99
+ self.class == o.class &&
100
+ message == o.message &&
101
+ phone_number == o.phone_number
102
+ end
103
+
104
+ # @see the `==` method
105
+ # @param [Object] Object to be compared
106
+ def eql?(o)
107
+ self == o
108
+ end
109
+
110
+ # Calculates hash code according to all attributes.
111
+ # @return [Integer] Hash code
112
+ def hash
113
+ [message, phone_number].hash
114
+ end
115
+
116
+ # Builds the object from hash
117
+ # @param [Hash] attributes Model attributes in the form of hash
118
+ # @return [Object] Returns the model itself
119
+ def self.build_from_hash(attributes)
120
+ return nil unless attributes.is_a?(Hash)
121
+ attributes = attributes.transform_keys(&:to_sym)
122
+ transformed_hash = {}
123
+ openapi_types.each_pair do |key, type|
124
+ if attributes.key?(attribute_map[key]) && attributes[attribute_map[key]].nil?
125
+ transformed_hash["#{key}"] = nil
126
+ elsif type =~ /\AArray<(.*)>/i
127
+ # check to ensure the input is an array given that the attribute
128
+ # is documented as an array but the input is not
129
+ if attributes[attribute_map[key]].is_a?(Array)
130
+ transformed_hash["#{key}"] = attributes[attribute_map[key]].map { |v| _deserialize($1, v) }
131
+ end
132
+ elsif !attributes[attribute_map[key]].nil?
133
+ transformed_hash["#{key}"] = _deserialize(type, attributes[attribute_map[key]])
134
+ end
135
+ end
136
+ new(transformed_hash)
137
+ end
138
+
139
+ # Returns the object in the form of hash
140
+ # @return [Hash] Returns the object in the form of hash
141
+ def to_hash
142
+ hash = {}
143
+ self.class.attribute_map.each_pair do |attr, param|
144
+ value = self.send(attr)
145
+ if value.nil?
146
+ is_nullable = self.class.openapi_nullable.include?(attr)
147
+ next if !is_nullable || (is_nullable && !instance_variable_defined?(:"@#{attr}"))
148
+ end
149
+
150
+ hash[param] = _to_hash(value)
151
+ end
152
+ hash
153
+ end
154
+
155
+ end
156
+
157
+ end