aspose_email_cloud 19.12.0 → 20.7.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (341) hide show
  1. checksums.yaml +4 -4
  2. data/lib/aspose-email-cloud.rb +186 -1
  3. data/lib/aspose-email-cloud/api/email_api.rb +1186 -698
  4. data/lib/aspose-email-cloud/api_client.rb +385 -382
  5. data/lib/aspose-email-cloud/api_error.rb +41 -41
  6. data/lib/aspose-email-cloud/configuration.rb +240 -240
  7. data/lib/aspose-email-cloud/models/account_base_request.rb +263 -260
  8. data/lib/aspose-email-cloud/models/add_attachment_request.rb +226 -223
  9. data/lib/aspose-email-cloud/models/ai_bcr_base64_image.rb +231 -228
  10. data/lib/aspose-email-cloud/models/ai_bcr_base64_rq.rb +228 -225
  11. data/lib/aspose-email-cloud/models/ai_bcr_image.rb +218 -215
  12. data/lib/aspose-email-cloud/models/ai_bcr_image_storage_file.rb +231 -228
  13. data/lib/aspose-email-cloud/models/ai_bcr_ocr_data.rb +256 -253
  14. data/lib/aspose-email-cloud/models/ai_bcr_ocr_data_part.rb +300 -297
  15. data/lib/aspose-email-cloud/models/ai_bcr_options.rb +226 -223
  16. data/lib/aspose-email-cloud/models/ai_bcr_parse_ocr_data_rq.rb +233 -0
  17. data/lib/aspose-email-cloud/models/ai_bcr_parse_storage_rq.rb +251 -248
  18. data/lib/aspose-email-cloud/models/ai_bcr_rq.rb +213 -210
  19. data/lib/aspose-email-cloud/models/ai_bcr_storage_image_rq.rb +233 -230
  20. data/lib/aspose-email-cloud/models/ai_name_component.rb +267 -264
  21. data/lib/aspose-email-cloud/models/ai_name_cultural_context.rb +270 -267
  22. data/lib/aspose-email-cloud/models/ai_name_extracted.rb +233 -230
  23. data/lib/aspose-email-cloud/models/ai_name_extracted_component.rb +231 -228
  24. data/lib/aspose-email-cloud/models/ai_name_formatted.rb +226 -223
  25. data/lib/aspose-email-cloud/models/ai_name_gender_hypothesis.rb +236 -233
  26. data/lib/aspose-email-cloud/models/ai_name_match_result.rb +233 -230
  27. data/lib/aspose-email-cloud/models/ai_name_mismatch.rb +249 -246
  28. data/lib/aspose-email-cloud/models/ai_name_parsed_match_rq.rb +266 -263
  29. data/lib/aspose-email-cloud/models/ai_name_parsed_rq.rb +246 -243
  30. data/lib/aspose-email-cloud/models/ai_name_weighted.rb +231 -228
  31. data/lib/aspose-email-cloud/models/ai_name_weighted_variants.rb +228 -225
  32. data/lib/aspose-email-cloud/models/alternate_view.rb +282 -0
  33. data/lib/aspose-email-cloud/models/append_email_account_base_request.rb +318 -315
  34. data/lib/aspose-email-cloud/models/append_email_base_request.rb +336 -333
  35. data/lib/aspose-email-cloud/models/append_email_mime_base_request.rb +355 -352
  36. data/lib/aspose-email-cloud/models/append_email_model_rq.rb +336 -0
  37. data/lib/aspose-email-cloud/models/associated_person.rb +244 -0
  38. data/lib/aspose-email-cloud/models/attachment.rb +324 -0
  39. data/lib/aspose-email-cloud/models/attachment_base.rb +254 -0
  40. data/lib/aspose-email-cloud/models/base_object.rb +91 -88
  41. data/lib/aspose-email-cloud/models/calendar_dto.rb +570 -0
  42. data/lib/aspose-email-cloud/models/calendar_dto_alternate_rq.rb +268 -0
  43. data/lib/aspose-email-cloud/models/calendar_dto_list.rb +215 -0
  44. data/lib/aspose-email-cloud/models/calendar_reminder.rb +318 -0
  45. data/lib/aspose-email-cloud/models/contact_dto.rb +699 -0
  46. data/lib/aspose-email-cloud/models/contact_dto_list.rb +215 -0
  47. data/lib/aspose-email-cloud/models/contact_photo.rb +255 -0
  48. data/lib/aspose-email-cloud/models/content_type.rb +267 -0
  49. data/lib/aspose-email-cloud/models/content_type_parameter.rb +226 -0
  50. data/lib/aspose-email-cloud/models/create_email_request.rb +231 -228
  51. data/lib/aspose-email-cloud/models/create_folder_base_request.rb +313 -310
  52. data/lib/aspose-email-cloud/models/customer_event.rb +231 -0
  53. data/lib/aspose-email-cloud/models/daily_recurrence_pattern_dto.rb +296 -0
  54. data/lib/aspose-email-cloud/models/delete_email_thread_account_rq.rb +276 -0
  55. data/lib/aspose-email-cloud/models/delete_folder_base_request.rb +318 -315
  56. data/lib/aspose-email-cloud/models/delete_message_base_request.rb +331 -315
  57. data/lib/aspose-email-cloud/models/disc_usage.rb +235 -233
  58. data/lib/aspose-email-cloud/models/discover_email_config_oauth.rb +391 -0
  59. data/lib/aspose-email-cloud/models/discover_email_config_password.rb +304 -0
  60. data/lib/aspose-email-cloud/models/discover_email_config_rq.rb +268 -0
  61. data/lib/aspose-email-cloud/models/email_account_config.rb +323 -0
  62. data/lib/aspose-email-cloud/models/email_account_config_list.rb +215 -0
  63. data/lib/aspose-email-cloud/models/email_account_request.rb +397 -394
  64. data/lib/aspose-email-cloud/models/email_address.rb +283 -0
  65. data/lib/aspose-email-cloud/models/email_client_account.rb +350 -0
  66. data/lib/aspose-email-cloud/models/email_client_account_credentials.rb +261 -0
  67. data/lib/aspose-email-cloud/models/email_client_account_oauth_credentials.rb +385 -0
  68. data/lib/aspose-email-cloud/models/email_client_account_password_credentials.rb +298 -0
  69. data/lib/aspose-email-cloud/models/email_client_multi_account.rb +233 -0
  70. data/lib/aspose-email-cloud/models/email_document.rb +233 -230
  71. data/lib/aspose-email-cloud/models/email_document_response.rb +213 -210
  72. data/lib/aspose-email-cloud/models/email_dto.rb +681 -0
  73. data/lib/aspose-email-cloud/models/email_dto_list.rb +215 -0
  74. data/lib/aspose-email-cloud/models/email_properties.rb +233 -230
  75. data/lib/aspose-email-cloud/models/email_property.rb +268 -265
  76. data/lib/aspose-email-cloud/models/email_property_response.rb +213 -210
  77. data/lib/aspose-email-cloud/models/email_thread.rb +254 -0
  78. data/lib/aspose-email-cloud/models/email_thread_list.rb +215 -0
  79. data/lib/aspose-email-cloud/models/email_thread_read_flag_rq.rb +294 -0
  80. data/lib/aspose-email-cloud/models/enum_with_custom_of_associated_person_category.rb +230 -0
  81. data/lib/aspose-email-cloud/models/enum_with_custom_of_email_address_category.rb +230 -0
  82. data/lib/aspose-email-cloud/models/enum_with_custom_of_event_category.rb +230 -0
  83. data/lib/aspose-email-cloud/models/enum_with_custom_of_instant_messenger_category.rb +230 -0
  84. data/lib/aspose-email-cloud/models/enum_with_custom_of_phone_number_category.rb +230 -0
  85. data/lib/aspose-email-cloud/models/enum_with_custom_of_postal_address_category.rb +230 -0
  86. data/lib/aspose-email-cloud/models/enum_with_custom_of_url_category.rb +230 -0
  87. data/lib/aspose-email-cloud/models/error.rb +251 -249
  88. data/lib/aspose-email-cloud/models/error_details.rb +230 -228
  89. data/lib/aspose-email-cloud/models/file_version.rb +305 -303
  90. data/lib/aspose-email-cloud/models/file_versions.rb +214 -212
  91. data/lib/aspose-email-cloud/models/files_list.rb +214 -212
  92. data/lib/aspose-email-cloud/models/files_upload_result.rb +229 -227
  93. data/lib/aspose-email-cloud/models/hierarchical_object.rb +106 -103
  94. data/lib/aspose-email-cloud/models/hierarchical_object_request.rb +231 -228
  95. data/lib/aspose-email-cloud/models/hierarchical_object_response.rb +226 -223
  96. data/lib/aspose-email-cloud/models/indexed_hierarchical_object.rb +124 -121
  97. data/lib/aspose-email-cloud/models/indexed_primitive_object.rb +122 -119
  98. data/lib/aspose-email-cloud/models/instant_messenger_address.rb +244 -0
  99. data/lib/aspose-email-cloud/models/link.rb +252 -249
  100. data/lib/aspose-email-cloud/models/linked_resource.rb +267 -0
  101. data/lib/aspose-email-cloud/models/list_response_of_ai_bcr_ocr_data.rb +214 -211
  102. data/lib/aspose-email-cloud/models/list_response_of_ai_name_component.rb +214 -211
  103. data/lib/aspose-email-cloud/models/list_response_of_ai_name_extracted.rb +214 -211
  104. data/lib/aspose-email-cloud/models/list_response_of_ai_name_gender_hypothesis.rb +214 -211
  105. data/lib/aspose-email-cloud/models/list_response_of_contact_dto.rb +214 -0
  106. data/lib/aspose-email-cloud/models/list_response_of_email_account_config.rb +214 -0
  107. data/lib/aspose-email-cloud/models/list_response_of_email_dto.rb +214 -0
  108. data/lib/aspose-email-cloud/models/list_response_of_email_thread.rb +214 -0
  109. data/lib/aspose-email-cloud/models/list_response_of_hierarchical_object.rb +214 -211
  110. data/lib/aspose-email-cloud/models/list_response_of_hierarchical_object_response.rb +214 -211
  111. data/lib/aspose-email-cloud/models/list_response_of_mail_server_folder.rb +214 -211
  112. data/lib/aspose-email-cloud/models/list_response_of_storage_file_location.rb +214 -211
  113. data/lib/aspose-email-cloud/models/list_response_of_storage_model_of_calendar_dto.rb +214 -0
  114. data/lib/aspose-email-cloud/models/list_response_of_storage_model_of_contact_dto.rb +214 -0
  115. data/lib/aspose-email-cloud/models/list_response_of_storage_model_of_email_dto.rb +214 -0
  116. data/lib/aspose-email-cloud/models/list_response_of_string.rb +214 -211
  117. data/lib/aspose-email-cloud/models/mail_address.rb +257 -0
  118. data/lib/aspose-email-cloud/models/mail_server_folder.rb +226 -223
  119. data/lib/aspose-email-cloud/models/mapi_attachment_dto.rb +226 -0
  120. data/lib/aspose-email-cloud/models/mapi_binary_property_dto.rb +250 -0
  121. data/lib/aspose-email-cloud/models/mapi_boolean_property_dto.rb +255 -0
  122. data/lib/aspose-email-cloud/models/mapi_calendar_attendees_dto.rb +266 -0
  123. data/lib/aspose-email-cloud/models/mapi_calendar_daily_recurrence_pattern_dto.rb +464 -0
  124. data/lib/aspose-email-cloud/models/mapi_calendar_dto.rb +728 -0
  125. data/lib/aspose-email-cloud/models/mapi_calendar_event_recurrence_dto.rb +293 -0
  126. data/lib/aspose-email-cloud/models/mapi_calendar_exception_info_dto.rb +431 -0
  127. data/lib/aspose-email-cloud/models/mapi_calendar_recurrence_pattern_dto.rb +449 -0
  128. data/lib/aspose-email-cloud/models/mapi_calendar_time_zone_dto.rb +228 -0
  129. data/lib/aspose-email-cloud/models/mapi_calendar_time_zone_info_dto.rb +313 -0
  130. data/lib/aspose-email-cloud/models/mapi_calendar_time_zone_rule_dto.rb +362 -0
  131. data/lib/aspose-email-cloud/models/mapi_calendar_weekly_recurrence_pattern_dto.rb +464 -0
  132. data/lib/aspose-email-cloud/models/mapi_calendar_yearly_and_monthly_recurrence_pattern_dto.rb +500 -0
  133. data/lib/aspose-email-cloud/models/mapi_contact_dto.rb +569 -0
  134. data/lib/aspose-email-cloud/models/mapi_contact_electronic_address_dto.rb +283 -0
  135. data/lib/aspose-email-cloud/models/mapi_contact_electronic_address_property_set_dto.rb +327 -0
  136. data/lib/aspose-email-cloud/models/mapi_contact_event_property_set_dto.rb +236 -0
  137. data/lib/aspose-email-cloud/models/mapi_contact_name_property_set_dto.rb +335 -0
  138. data/lib/aspose-email-cloud/models/mapi_contact_other_property_set_dto.rb +319 -0
  139. data/lib/aspose-email-cloud/models/mapi_contact_personal_info_property_set_dto.rb +454 -0
  140. data/lib/aspose-email-cloud/models/mapi_contact_photo_dto.rb +255 -0
  141. data/lib/aspose-email-cloud/models/mapi_contact_physical_address_dto.rb +322 -0
  142. data/lib/aspose-email-cloud/models/mapi_contact_physical_address_property_set_dto.rb +239 -0
  143. data/lib/aspose-email-cloud/models/mapi_contact_professional_property_set_dto.rb +291 -0
  144. data/lib/aspose-email-cloud/models/mapi_contact_telephone_property_set_dto.rb +457 -0
  145. data/lib/aspose-email-cloud/models/mapi_date_time_property_dto.rb +255 -0
  146. data/lib/aspose-email-cloud/models/mapi_electronic_address_dto.rb +265 -0
  147. data/lib/aspose-email-cloud/models/mapi_file_as_property_dto.rb +255 -0
  148. data/lib/aspose-email-cloud/models/mapi_importance_property_dto.rb +255 -0
  149. data/lib/aspose-email-cloud/models/mapi_int_property_dto.rb +255 -0
  150. data/lib/aspose-email-cloud/models/mapi_known_property_descriptor.rb +237 -0
  151. data/lib/aspose-email-cloud/models/mapi_legacy_free_busy_property_dto.rb +255 -0
  152. data/lib/aspose-email-cloud/models/mapi_message_dto.rb +801 -0
  153. data/lib/aspose-email-cloud/models/mapi_message_item_base_dto.rb +452 -0
  154. data/lib/aspose-email-cloud/models/mapi_multi_int_property_dto.rb +252 -0
  155. data/lib/aspose-email-cloud/models/mapi_multi_string_property_dto.rb +252 -0
  156. data/lib/aspose-email-cloud/models/mapi_physical_address_index_property_dto.rb +255 -0
  157. data/lib/aspose-email-cloud/models/mapi_pid_lid_property_descriptor.rb +322 -0
  158. data/lib/aspose-email-cloud/models/mapi_pid_name_property_descriptor.rb +304 -0
  159. data/lib/aspose-email-cloud/models/mapi_pid_property_descriptor.rb +286 -0
  160. data/lib/aspose-email-cloud/models/mapi_pid_tag_property_descriptor.rb +322 -0
  161. data/lib/aspose-email-cloud/models/mapi_property_descriptor.rb +224 -0
  162. data/lib/aspose-email-cloud/models/mapi_property_dto.rb +237 -0
  163. data/lib/aspose-email-cloud/models/mapi_recipient_dto.rb +257 -0
  164. data/lib/aspose-email-cloud/models/mapi_response_type_property_dto.rb +255 -0
  165. data/lib/aspose-email-cloud/models/mapi_string_property_dto.rb +250 -0
  166. data/lib/aspose-email-cloud/models/mime_response.rb +213 -210
  167. data/lib/aspose-email-cloud/models/monthly_recurrence_pattern_dto.rb +350 -0
  168. data/lib/aspose-email-cloud/models/move_email_message_rq.rb +302 -0
  169. data/lib/aspose-email-cloud/models/move_email_thread_rq.rb +276 -0
  170. data/lib/aspose-email-cloud/models/name_value_pair.rb +226 -0
  171. data/lib/aspose-email-cloud/models/object_exist.rb +235 -233
  172. data/lib/aspose-email-cloud/models/phone_number.rb +244 -0
  173. data/lib/aspose-email-cloud/models/postal_address.rb +353 -0
  174. data/lib/aspose-email-cloud/models/primitive_object.rb +104 -101
  175. data/lib/aspose-email-cloud/models/recurrence_pattern_dto.rb +296 -0
  176. data/lib/aspose-email-cloud/models/reminder_attendee.rb +213 -0
  177. data/lib/aspose-email-cloud/models/reminder_trigger.rb +249 -0
  178. data/lib/aspose-email-cloud/models/requests/add_calendar_attachment_request_data.rb +99 -89
  179. data/lib/aspose-email-cloud/models/requests/add_contact_attachment_request_data.rb +109 -96
  180. data/lib/aspose-email-cloud/models/requests/add_email_attachment_request_data.rb +99 -89
  181. data/lib/aspose-email-cloud/models/requests/add_mapi_attachment_request_data.rb +99 -89
  182. data/lib/aspose-email-cloud/models/requests/ai_bcr_ocr_request_data.rb +79 -75
  183. data/lib/aspose-email-cloud/models/requests/ai_bcr_ocr_storage_request_data.rb +79 -75
  184. data/lib/aspose-email-cloud/models/requests/ai_bcr_parse_model_request_data.rb +79 -0
  185. data/lib/aspose-email-cloud/models/requests/ai_bcr_parse_ocr_data_model_request_data.rb +79 -0
  186. data/lib/aspose-email-cloud/models/requests/ai_bcr_parse_request_data.rb +79 -75
  187. data/lib/aspose-email-cloud/models/requests/ai_bcr_parse_storage_request_data.rb +79 -75
  188. data/lib/aspose-email-cloud/models/requests/ai_name_complete_request_data.rb +110 -91
  189. data/lib/aspose-email-cloud/models/requests/ai_name_expand_parsed_request_data.rb +79 -75
  190. data/lib/aspose-email-cloud/models/requests/ai_name_expand_request_data.rb +110 -91
  191. data/lib/aspose-email-cloud/models/requests/ai_name_format_parsed_request_data.rb +79 -75
  192. data/lib/aspose-email-cloud/models/requests/ai_name_format_request_data.rb +116 -94
  193. data/lib/aspose-email-cloud/models/requests/ai_name_genderize_parsed_request_data.rb +79 -75
  194. data/lib/aspose-email-cloud/models/requests/ai_name_genderize_request_data.rb +110 -91
  195. data/lib/aspose-email-cloud/models/requests/ai_name_match_parsed_request_data.rb +79 -75
  196. data/lib/aspose-email-cloud/models/requests/ai_name_match_request_data.rb +121 -99
  197. data/lib/aspose-email-cloud/models/requests/ai_name_parse_email_address_request_data.rb +110 -91
  198. data/lib/aspose-email-cloud/models/requests/ai_name_parse_request_data.rb +110 -91
  199. data/lib/aspose-email-cloud/models/requests/append_email_message_request_data.rb +79 -75
  200. data/lib/aspose-email-cloud/models/requests/append_email_model_message_request_data.rb +79 -0
  201. data/lib/aspose-email-cloud/models/requests/append_mime_message_request_data.rb +79 -75
  202. data/lib/aspose-email-cloud/models/requests/convert_calendar_model_to_alternate_request_data.rb +79 -0
  203. data/lib/aspose-email-cloud/models/requests/convert_calendar_model_to_file_request_data.rb +89 -0
  204. data/lib/aspose-email-cloud/models/requests/convert_calendar_model_to_mapi_model_request_data.rb +79 -0
  205. data/lib/aspose-email-cloud/models/requests/convert_calendar_request_data.rb +90 -0
  206. data/lib/aspose-email-cloud/models/requests/convert_contact_model_to_file_request_data.rb +89 -0
  207. data/lib/aspose-email-cloud/models/requests/convert_contact_model_to_mapi_model_request_data.rb +79 -0
  208. data/lib/aspose-email-cloud/models/requests/convert_contact_request_data.rb +100 -0
  209. data/lib/aspose-email-cloud/models/requests/convert_email_model_to_file_request_data.rb +89 -0
  210. data/lib/aspose-email-cloud/models/requests/convert_email_model_to_mapi_model_request_data.rb +79 -0
  211. data/lib/aspose-email-cloud/models/requests/convert_email_request_data.rb +90 -0
  212. data/lib/aspose-email-cloud/models/requests/convert_mapi_calendar_model_to_calendar_model_request_data.rb +79 -0
  213. data/lib/aspose-email-cloud/models/requests/convert_mapi_calendar_model_to_file_request_data.rb +89 -0
  214. data/lib/aspose-email-cloud/models/requests/convert_mapi_contact_model_to_contact_model_request_data.rb +79 -0
  215. data/lib/aspose-email-cloud/models/requests/convert_mapi_contact_model_to_file_request_data.rb +89 -0
  216. data/lib/aspose-email-cloud/models/requests/convert_mapi_message_model_to_email_model_request_data.rb +79 -0
  217. data/lib/aspose-email-cloud/models/requests/convert_mapi_message_model_to_file_request_data.rb +89 -0
  218. data/lib/aspose-email-cloud/models/requests/copy_file_request_data.rb +107 -92
  219. data/lib/aspose-email-cloud/models/requests/copy_folder_request_data.rb +101 -89
  220. data/lib/aspose-email-cloud/models/requests/create_calendar_request_data.rb +89 -82
  221. data/lib/aspose-email-cloud/models/requests/create_contact_request_data.rb +99 -89
  222. data/lib/aspose-email-cloud/models/requests/create_email_folder_request_data.rb +79 -75
  223. data/lib/aspose-email-cloud/models/requests/create_email_request_data.rb +89 -82
  224. data/lib/aspose-email-cloud/models/requests/create_folder_request_data.rb +84 -78
  225. data/lib/aspose-email-cloud/models/requests/create_mapi_request_data.rb +89 -82
  226. data/lib/aspose-email-cloud/models/requests/delete_calendar_property_request_data.rb +109 -96
  227. data/lib/aspose-email-cloud/models/requests/delete_contact_property_request_data.rb +119 -103
  228. data/lib/aspose-email-cloud/models/requests/delete_email_folder_request_data.rb +79 -75
  229. data/lib/aspose-email-cloud/models/requests/delete_email_message_request_data.rb +79 -75
  230. data/lib/aspose-email-cloud/models/requests/delete_email_thread_request_data.rb +89 -0
  231. data/lib/aspose-email-cloud/models/requests/delete_file_request_data.rb +90 -81
  232. data/lib/aspose-email-cloud/models/requests/delete_folder_request_data.rb +90 -81
  233. data/lib/aspose-email-cloud/models/requests/delete_mapi_attachment_request_data.rb +99 -89
  234. data/lib/aspose-email-cloud/models/requests/delete_mapi_properties_request_data.rb +89 -82
  235. data/lib/aspose-email-cloud/models/requests/discover_email_config_oauth_request_data.rb +79 -0
  236. data/lib/aspose-email-cloud/models/requests/discover_email_config_password_request_data.rb +79 -0
  237. data/lib/aspose-email-cloud/models/requests/discover_email_config_request_data.rb +86 -0
  238. data/lib/aspose-email-cloud/models/requests/download_file_request_data.rb +90 -81
  239. data/lib/aspose-email-cloud/models/requests/email_request.rb +75 -75
  240. data/lib/aspose-email-cloud/models/requests/fetch_email_message_request_data.rb +115 -93
  241. data/lib/aspose-email-cloud/models/requests/fetch_email_model_request_data.rb +115 -0
  242. data/lib/aspose-email-cloud/models/requests/fetch_email_thread_messages_request_data.rb +114 -0
  243. data/lib/aspose-email-cloud/models/requests/get_calendar_as_file_request_data.rb +101 -0
  244. data/lib/aspose-email-cloud/models/requests/get_calendar_attachment_request_data.rb +101 -88
  245. data/lib/aspose-email-cloud/models/requests/get_calendar_file_as_mapi_model_request_data.rb +80 -0
  246. data/lib/aspose-email-cloud/models/requests/get_calendar_file_as_model_request_data.rb +80 -0
  247. data/lib/aspose-email-cloud/models/requests/get_calendar_list_request_data.rb +108 -95
  248. data/lib/aspose-email-cloud/models/requests/get_calendar_model_as_alternate_request_data.rb +107 -0
  249. data/lib/aspose-email-cloud/models/requests/get_calendar_model_list_request_data.rb +98 -0
  250. data/lib/aspose-email-cloud/models/requests/get_calendar_model_request_data.rb +91 -0
  251. data/lib/aspose-email-cloud/models/requests/get_calendar_request_data.rb +91 -81
  252. data/lib/aspose-email-cloud/models/requests/get_contact_as_file_request_data.rb +111 -0
  253. data/lib/aspose-email-cloud/models/requests/get_contact_attachment_request_data.rb +111 -95
  254. data/lib/aspose-email-cloud/models/requests/get_contact_file_as_mapi_model_request_data.rb +90 -0
  255. data/lib/aspose-email-cloud/models/requests/get_contact_file_as_model_request_data.rb +90 -0
  256. data/lib/aspose-email-cloud/models/requests/get_contact_list_request_data.rb +103 -87
  257. data/lib/aspose-email-cloud/models/requests/get_contact_model_list_request_data.rb +103 -0
  258. data/lib/aspose-email-cloud/models/requests/get_contact_model_request_data.rb +101 -0
  259. data/lib/aspose-email-cloud/models/requests/get_contact_properties_request_data.rb +101 -88
  260. data/lib/aspose-email-cloud/models/requests/get_disc_usage_request_data.rb +74 -71
  261. data/lib/aspose-email-cloud/models/requests/get_email_as_file_request_data.rb +101 -0
  262. data/lib/aspose-email-cloud/models/requests/get_email_attachment_request_data.rb +101 -88
  263. data/lib/aspose-email-cloud/models/requests/get_email_client_account_request_data.rb +102 -0
  264. data/lib/aspose-email-cloud/models/requests/get_email_client_multi_account_request_data.rb +102 -0
  265. data/lib/aspose-email-cloud/models/requests/get_email_file_as_mapi_model_request_data.rb +90 -0
  266. data/lib/aspose-email-cloud/models/requests/get_email_file_as_model_request_data.rb +80 -0
  267. data/lib/aspose-email-cloud/models/requests/get_email_model_list_request_data.rb +103 -0
  268. data/lib/aspose-email-cloud/models/requests/get_email_model_request_data.rb +101 -0
  269. data/lib/aspose-email-cloud/models/requests/get_email_property_request_data.rb +101 -88
  270. data/lib/aspose-email-cloud/models/requests/get_email_request_data.rb +91 -81
  271. data/lib/aspose-email-cloud/models/requests/get_file_versions_request_data.rb +84 -78
  272. data/lib/aspose-email-cloud/models/requests/get_files_list_request_data.rb +84 -78
  273. data/lib/aspose-email-cloud/models/requests/get_mapi_attachment_request_data.rb +101 -88
  274. data/lib/aspose-email-cloud/models/requests/get_mapi_attachments_request_data.rb +91 -81
  275. data/lib/aspose-email-cloud/models/requests/get_mapi_calendar_model_request_data.rb +91 -0
  276. data/lib/aspose-email-cloud/models/requests/get_mapi_contact_model_request_data.rb +101 -0
  277. data/lib/aspose-email-cloud/models/requests/get_mapi_list_request_data.rb +93 -80
  278. data/lib/aspose-email-cloud/models/requests/get_mapi_message_model_request_data.rb +101 -0
  279. data/lib/aspose-email-cloud/models/requests/get_mapi_properties_request_data.rb +91 -81
  280. data/lib/aspose-email-cloud/models/requests/http_request.rb +51 -51
  281. data/lib/aspose-email-cloud/models/requests/is_email_address_disposable_request_data.rb +79 -0
  282. data/lib/aspose-email-cloud/models/requests/list_email_folders_request_data.rb +104 -88
  283. data/lib/aspose-email-cloud/models/requests/list_email_messages_request_data.rb +127 -105
  284. data/lib/aspose-email-cloud/models/requests/list_email_models_request_data.rb +122 -0
  285. data/lib/aspose-email-cloud/models/requests/list_email_threads_request_data.rb +121 -0
  286. data/lib/aspose-email-cloud/models/requests/move_email_message_request_data.rb +79 -0
  287. data/lib/aspose-email-cloud/models/requests/move_email_thread_request_data.rb +89 -0
  288. data/lib/aspose-email-cloud/models/requests/move_file_request_data.rb +107 -92
  289. data/lib/aspose-email-cloud/models/requests/move_folder_request_data.rb +101 -89
  290. data/lib/aspose-email-cloud/models/requests/object_exists_request_data.rb +90 -81
  291. data/lib/aspose-email-cloud/models/requests/save_calendar_model_request_data.rb +89 -0
  292. data/lib/aspose-email-cloud/models/requests/save_contact_model_request_data.rb +99 -0
  293. data/lib/aspose-email-cloud/models/requests/save_email_client_account_request_data.rb +79 -0
  294. data/lib/aspose-email-cloud/models/requests/save_email_client_multi_account_request_data.rb +79 -0
  295. data/lib/aspose-email-cloud/models/requests/save_email_model_request_data.rb +99 -0
  296. data/lib/aspose-email-cloud/models/requests/save_mail_account_request_data.rb +79 -75
  297. data/lib/aspose-email-cloud/models/requests/save_mail_o_auth_account_request_data.rb +79 -75
  298. data/lib/aspose-email-cloud/models/requests/save_mapi_calendar_model_request_data.rb +99 -0
  299. data/lib/aspose-email-cloud/models/requests/save_mapi_contact_model_request_data.rb +99 -0
  300. data/lib/aspose-email-cloud/models/requests/save_mapi_message_model_request_data.rb +99 -0
  301. data/lib/aspose-email-cloud/models/requests/send_email_mime_request_data.rb +79 -75
  302. data/lib/aspose-email-cloud/models/requests/send_email_model_request_data.rb +79 -0
  303. data/lib/aspose-email-cloud/models/requests/send_email_request_data.rb +79 -75
  304. data/lib/aspose-email-cloud/models/requests/set_email_property_request_data.rb +99 -89
  305. data/lib/aspose-email-cloud/models/requests/set_email_read_flag_request_data.rb +79 -75
  306. data/lib/aspose-email-cloud/models/requests/set_email_thread_read_flag_request_data.rb +89 -0
  307. data/lib/aspose-email-cloud/models/requests/storage_exists_request_data.rb +78 -75
  308. data/lib/aspose-email-cloud/models/requests/update_calendar_properties_request_data.rb +89 -82
  309. data/lib/aspose-email-cloud/models/requests/update_contact_properties_request_data.rb +99 -89
  310. data/lib/aspose-email-cloud/models/requests/update_mapi_properties_request_data.rb +89 -82
  311. data/lib/aspose-email-cloud/models/requests/upload_file_request_data.rb +96 -87
  312. data/lib/aspose-email-cloud/models/save_email_account_request.rb +434 -431
  313. data/lib/aspose-email-cloud/models/save_o_auth_email_account_request.rb +521 -505
  314. data/lib/aspose-email-cloud/models/send_email_base_request.rb +281 -278
  315. data/lib/aspose-email-cloud/models/send_email_mime_base_request.rb +300 -297
  316. data/lib/aspose-email-cloud/models/send_email_model_rq.rb +276 -0
  317. data/lib/aspose-email-cloud/models/set_email_property_request.rb +231 -228
  318. data/lib/aspose-email-cloud/models/set_message_read_flag_account_base_request.rb +318 -315
  319. data/lib/aspose-email-cloud/models/storage_exist.rb +217 -215
  320. data/lib/aspose-email-cloud/models/storage_file.rb +274 -272
  321. data/lib/aspose-email-cloud/models/storage_file_location.rb +263 -260
  322. data/lib/aspose-email-cloud/models/storage_file_rq_of_email_client_account.rb +225 -0
  323. data/lib/aspose-email-cloud/models/storage_file_rq_of_email_client_multi_account.rb +225 -0
  324. data/lib/aspose-email-cloud/models/storage_folder_location.rb +226 -223
  325. data/lib/aspose-email-cloud/models/storage_model_of_calendar_dto.rb +225 -0
  326. data/lib/aspose-email-cloud/models/storage_model_of_contact_dto.rb +225 -0
  327. data/lib/aspose-email-cloud/models/storage_model_of_email_dto.rb +225 -0
  328. data/lib/aspose-email-cloud/models/storage_model_rq_of_calendar_dto.rb +225 -0
  329. data/lib/aspose-email-cloud/models/storage_model_rq_of_contact_dto.rb +225 -0
  330. data/lib/aspose-email-cloud/models/storage_model_rq_of_email_dto.rb +225 -0
  331. data/lib/aspose-email-cloud/models/storage_model_rq_of_mapi_calendar_dto.rb +225 -0
  332. data/lib/aspose-email-cloud/models/storage_model_rq_of_mapi_contact_dto.rb +225 -0
  333. data/lib/aspose-email-cloud/models/storage_model_rq_of_mapi_message_dto.rb +225 -0
  334. data/lib/aspose-email-cloud/models/task_regenerating_pattern_dto.rb +314 -0
  335. data/lib/aspose-email-cloud/models/url.rb +244 -0
  336. data/lib/aspose-email-cloud/models/value_response.rb +213 -210
  337. data/lib/aspose-email-cloud/models/value_t_of_boolean.rb +217 -0
  338. data/lib/aspose-email-cloud/models/weekly_recurrence_pattern_dto.rb +311 -0
  339. data/lib/aspose-email-cloud/models/yearly_recurrence_pattern_dto.rb +368 -0
  340. data/lib/aspose-email-cloud/version.rb +15 -15
  341. metadata +237 -52
@@ -1,382 +1,385 @@
1
- # ----------------------------------------------------------------------------
2
- # <copyright company="Aspose" file="api_client.rb">
3
- # Copyright (c) 2018-2019 Aspose Pty Ltd. All rights reserved.
4
- # </copyright>
5
- # <summary>
6
- # Permission is hereby granted, free of charge, to any person obtaining a
7
- # copy of this software and associated documentation files (the "Software"),
8
- # to deal in the Software without restriction, including without limitation
9
- # the rights to use, copy, modify, merge, publish, distribute, sublicense,
10
- # and/or sell copies of the Software, and to permit persons to whom the
11
- # Software is furnished to do so, subject to the following conditions:
12
- #
13
- # The above copyright notice and this permission notice shall be included in
14
- # all copies or substantial portions of the Software.
15
- #
16
- # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17
- # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18
- # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19
- # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20
- # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
21
- # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
22
- # DEALINGS IN THE SOFTWARE.
23
- # </summary>
24
- # ----------------------------------------------------------------------------
25
-
26
- require 'date'
27
- require 'json'
28
- require 'logger'
29
- require 'tempfile'
30
- require 'faraday'
31
- require 'mimemagic'
32
- require 'uri'
33
-
34
- module AsposeEmailCloud
35
- # Generic API client
36
- # Swagger generic API client. This client handles the client-
37
- # server communication, and is invariant across implementations.
38
- class ApiClient
39
- # The Configuration object holding settings to be used in the API client.
40
- attr_accessor :config
41
-
42
- # Defines the headers to be used in HTTP requests of all API calls by default.
43
- #
44
- # @return [Hash]
45
- attr_accessor :default_headers
46
-
47
- # Initializes the ApiClient
48
- # @param [String] app_key Key to access the server.
49
- # @param [String] app_sid ID to access the server.
50
- # @param [String] base_url Server URL.
51
- # @param [String] api_version Api version.
52
- # @param [Object] debug Debug switch [true, false].
53
- def initialize(app_key = nil, app_sid = nil, base_url = 'api-qa.aspose.cloud', api_version = 'v3.0', debug = false)
54
- @config = Configuration.new(app_key, app_sid, base_url, api_version, debug)
55
- @default_headers = {
56
- 'x-aspose-client' => 'ruby sdk',
57
- 'x-aspose-version' => '19.7'
58
- }
59
- end
60
-
61
- # Call an API with given options.
62
- #
63
- # @return [Array<(Object, Fixnum, Hash)>] an array of 3 elements:
64
- # the data deserialized from response body (could be nil), response status code and response headers.
65
- def call_api(http_method, path, opts = {})
66
- response = build_request(http_method, path, opts)
67
- download_file response if opts[:return_type] == 'File'
68
-
69
- if @config.debugging
70
- @config.logger.debug "'HTTP' response body '~BEGIN~'\n #{response.body}\n'~END~'\n"
71
- end
72
-
73
- unless response.success?
74
- if response.status.zero?
75
- # Errors from libcurl will be made visible here
76
- raise ApiError.new(response.return_message, 0)
77
- else
78
- begin
79
- error = convert_to_type(JSON.parse(response.body, symbolize_names: true)[:error], "Error")
80
- ensure
81
- raise ApiError.new("#{response.status} Error connecting to the API #{path}; Message: #{error}",
82
- response.status, error)
83
- end
84
- end
85
- end
86
-
87
- data = (deserialize(response, opts[:return_type]) if opts[:return_type])
88
- [data, response.status, response.headers]
89
- end
90
-
91
- # Builds the HTTP request
92
- #
93
- # @param [String] http_method HTTP method/verb (e.g. POST)
94
- # @param [String] path URL path (e.g. /account/new)
95
- # @option opts [Hash] :header_params Header parameters
96
- # @option opts [Hash] :query_params Query parameters
97
- # @option opts [Hash] :form_params Query parameters
98
- # @option opts [Object] :body HTTP body (JSON/XML)
99
- # @option opts [String] :host Should not be used
100
- # @return [Faraday::Response] A Faraday Response
101
- def build_request(http_method, path, opts = {})
102
- url = build_request_url(path, opts[:host])
103
- http_method = http_method.to_sym.downcase
104
-
105
- header_params = @default_headers.merge(opts[:header_params] || {})
106
- query_params = opts[:query_params] || {}
107
- form_params = opts[:form_params] || {}
108
- body = opts[:body] if opts[:body] || nil?
109
-
110
- update_params_for_auth! header_params, query_params, opts[:auth_names]
111
-
112
- req_opts = {
113
- :method => http_method,
114
- :headers => header_params,
115
- :params => query_params,
116
- :body => body
117
- }
118
-
119
- if [:post, :patch, :put, :delete].include?(http_method)
120
- req_body = build_request_body(header_params, form_params, opts[:body])
121
- req_opts.update :body => req_body
122
- if @config.debugging
123
- @config.logger.debug "HTTP request body param ~BEGIN~\n#{req_body}\n~END~\n"
124
- end
125
- elsif http_method == :get && body.nil? && !form_params.any? && header_params['Content-Type'] == 'multipart/form-data'
126
- req_opts[:headers].delete('Content-Type')
127
- end
128
-
129
- conn = Faraday.new url, { :params => query_params, :headers => header_params } do |f|
130
- f.request :multipart
131
- f.request :url_encoded
132
- f.adapter Faraday.default_adapter
133
- end
134
-
135
- case http_method
136
- when :post
137
- return conn.post url, req_opts[:body]
138
- when :put
139
- return conn.put url, req_opts[:body]
140
- when :get
141
- return conn.get url, req_opts[:body]
142
- else
143
- return conn.delete url do |c|
144
- c.body = req_opts[:body]
145
- end
146
- end
147
- end
148
-
149
- # Check if the given MIME is a JSON MIME.
150
- # JSON MIME examples:
151
- # application/json
152
- # application/json; charset=UTF8
153
- # APPLICATION/JSON
154
- # */*
155
- # @param [String] mime MIME
156
- # @return [Boolean] True if the MIME is application/json
157
- def json_mime?(mime)
158
- (mime == '*/*') || !(mime =~ %r{Application/.*json(?!p)(;.*)?}i).nil?
159
- end
160
-
161
- # Deserialize the response to the given return type.
162
- #
163
- # @param [Response] response HTTP response
164
- # @param [String] return_type some examples: "User", "Array[User]", "Hash[String,Integer]"
165
- def deserialize(response, return_type)
166
- body = response.body
167
-
168
- # handle file downloading - return the File instance processed in request callbacks
169
- # note that response body is empty when the file is written in chunks in request on_body callback
170
- return @tempfile if return_type == 'File'
171
-
172
- return nil if body.nil? || body.empty?
173
-
174
- # return response body directly for String return type
175
- return body if return_type == 'String'
176
-
177
- # ensuring a default content type
178
- content_type = response.headers['Content-Type'] || 'application/json'
179
-
180
- raise "Content-Type is not supported: #{content_type}" unless json_mime?(content_type)
181
-
182
- begin
183
- data = JSON.parse("[#{body}]", symbolize_names: true)[0]
184
- rescue JSON::ParserError => e
185
- if %w[String Date DateTime].include?(return_type)
186
- data = body
187
- else
188
- raise e
189
- end
190
- end
191
-
192
- convert_to_type data, return_type
193
- end
194
-
195
- # Convert data to the given return type.
196
- # @param [Object] data Data to be converted
197
- # @param [String] return_type Return type
198
- # @return [Mixed] Data in a particular type
199
- def convert_to_type(data, return_type)
200
- return nil if data.nil?
201
-
202
- case return_type
203
- when 'String'
204
- data.to_s
205
- when 'Integer'
206
- data.to_i
207
- when 'Float'
208
- data.to_f
209
- when 'BOOLEAN'
210
- data == true
211
- when 'DateTime'
212
- # parse date time (expecting ISO 8601 format)
213
- DateTime.parse data
214
- when 'Date'
215
- # parse date time (expecting ISO 8601 format)
216
- Date.parse data
217
- when 'Object'
218
- # generic object (usually a Hash), return directly
219
- data
220
- when /\AArray<(.+)>\z/
221
- # e.g. Array<Pet>
222
- sub_type = Regexp.last_match(1)
223
- data.map { |item| convert_to_type(item, sub_type) }
224
- when /\AHash\<String, (.+)\>\z/
225
- # e.g. Hash<String, Integer>
226
- sub_type = Regexp.last_match(1)
227
- {}.tap do |hash|
228
- data.each { |k, v| hash[k] = convert_to_type(v, sub_type) }
229
- end
230
- else
231
- # models, e.g. Pet
232
- AsposeEmailCloud.const_get(return_type).new.tap do |model|
233
- model.build_from_hash data
234
- end
235
- end
236
- end
237
-
238
- # Save response body into a file in (the defined) temporary folder, using the filename
239
- # from the "Content-Disposition" header if provided, otherwise a random filename.
240
- # The response body is written to the file in chunks in order to handle files which
241
- # size is larger than maximum Ruby String or even larger than the maximum memory a Ruby
242
- # process can use.
243
- #
244
- # @see Configuration#temp_folder_path
245
- def download_file(response)
246
- tempfile = nil
247
- encoding = nil
248
- content_disposition = response.headers['Content-Disposition']
249
- if content_disposition and content_disposition =~ /filename=/i
250
- filename = content_disposition[/filename=['"]?([^'"\s]+)['"]?/, 1]
251
- prefix = sanitize_filename(filename)
252
- else
253
- prefix = 'download-'
254
- end
255
- prefix += '-' unless prefix.end_with?('-')
256
- encoding = response.body.encoding
257
- tempfile = Tempfile.open(prefix, @config.temp_folder_path, encoding: encoding)
258
- @tempfile = tempfile
259
- tempfile.write(response.body)
260
- response.on_complete do |resp|
261
- tempfile.close
262
- @config.logger.info "Temp file written to #{tempfile.path}, please copy the file to a proper folder "\
263
- "with e.g. `FileUtils.cp(tempfile.path, '/new/file/path')` otherwise the temp file "\
264
- "will be deleted automatically with GC. It's also recommended to delete the temp file "\
265
- "explicitly with `tempfile.delete`"
266
- end
267
- end
268
-
269
- # Sanitize filename by removing path.
270
- # e.g. ../../sun.gif becomes sun.gif
271
- #
272
- # @param [String] filename the filename to be sanitized
273
- # @return [String] the sanitized filename
274
- def sanitize_filename(filename)
275
- filename.gsub(%r{.*[/\\]}, '')
276
- end
277
-
278
- def build_request_url(path, host = nil)
279
- # Add leading and trailing slashes to path
280
- path = "/#{path}".gsub(%r{/+}, '/')
281
- URI.encode((host || @config.base_url) + path)
282
- end
283
-
284
- # Builds the HTTP request body
285
- #
286
- # @param [Hash] header_params Header parameters
287
- # @param [Hash] form_params Query parameters
288
- # @param [Object] body HTTP body (JSON/XML)
289
- # @return [String] HTTP body data in the form of string
290
- def build_request_body(header_params, form_params, body)
291
- # http form
292
- if (header_params['Content-Type'] == 'application/x-www-form-urlencoded' ||
293
- header_params['Content-Type'] == 'multipart/form-data') && form_params.any?
294
- data = {}
295
- form_params.each do |key, value|
296
- case value
297
- when ::File
298
- data[key] = Faraday::UploadIO.new(value.path, MimeMagic.by_magic(value).to_s, key)
299
- when ::Tempfile
300
- data[key] = Faraday::UploadIO.new(value.path, key)
301
- when ::Array, nil
302
- data[key] = value
303
- else
304
- data[key] = value.to_s
305
- end
306
- end
307
- elsif body
308
- data = body.is_a?(String) ? body : body.to_json
309
- else
310
- data = nil
311
- end
312
- data
313
- end
314
-
315
- # Update hearder and query params based on authentication settings.
316
- #
317
- # @param [Hash] header_params Header parameters
318
- # @param [Hash] query_params Query parameters
319
- # @param [String] auth_names Authentication scheme name
320
- def update_params_for_auth!(header_params, query_params, auth_names)
321
- Array(auth_names).each do |auth_name|
322
- auth_setting = @config.auth_settings[auth_name.to_sym]
323
- next unless auth_setting
324
-
325
- case auth_setting[:in]
326
- when 'header'
327
- header_params[auth_setting[:key]] = auth_setting[:value]
328
- when 'query'
329
- query_params[auth_setting[:key]] = auth_setting[:value]
330
- else
331
- raise ArgumentError, 'Authentication token must be in `query` of `header`'
332
- end
333
- end
334
- end
335
-
336
- # Convert object (array, hash, object, etc) to JSON string.
337
- # @param [Object] model object to be converted into JSON string
338
- # @return [String] JSON string representation of the object
339
- def object_to_http_body(model)
340
- return model if model.nil? || model.is_a?(String)
341
-
342
- local_body = nil
343
- local_body = if model.is_a?(Array)
344
- model.map { |m| object_to_hash(m) }
345
- else
346
- object_to_hash(model)
347
- end
348
- local_body.to_json
349
- end
350
-
351
- # Convert object(non-array) to hash.
352
- # @param [Object] obj object to be converted into JSON string
353
- # @return [String] JSON string representation of the object
354
- def object_to_hash(obj)
355
- if obj.respond_to?(:to_hash)
356
- obj.to_hash
357
- else
358
- obj
359
- end
360
- end
361
-
362
- # Build parameter value according to the given collection format.
363
- # @param [String] collection_format one of :csv, :ssv, :tsv, :pipes and :multi
364
- def build_collection_param(param, collection_format)
365
- case collection_format
366
- when :csv
367
- param.join(',')
368
- when :ssv
369
- param.join(' ')
370
- when :tsv
371
- param.join("\t")
372
- when :pipes
373
- param.join('|')
374
- when :multi
375
- # return the array directly as typhoeus will handle it as expected
376
- param
377
- else
378
- raise "unknown collection format: #{collection_format.inspect}"
379
- end
380
- end
381
- end
382
- end
1
+ # ----------------------------------------------------------------------------
2
+ # <copyright company="Aspose" file="api_client.rb">
3
+ # Copyright (c) 2018-2020 Aspose Pty Ltd. All rights reserved.
4
+ # </copyright>
5
+ # <summary>
6
+ # Permission is hereby granted, free of charge, to any person obtaining a
7
+ # copy of this software and associated documentation files (the "Software"),
8
+ # to deal in the Software without restriction, including without limitation
9
+ # the rights to use, copy, modify, merge, publish, distribute, sublicense,
10
+ # and/or sell copies of the Software, and to permit persons to whom the
11
+ # Software is furnished to do so, subject to the following conditions:
12
+ #
13
+ # The above copyright notice and this permission notice shall be included in
14
+ # all copies or substantial portions of the Software.
15
+ #
16
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18
+ # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19
+ # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20
+ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
21
+ # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
22
+ # DEALINGS IN THE SOFTWARE.
23
+ # </summary>
24
+ # ----------------------------------------------------------------------------
25
+
26
+ require 'date'
27
+ require 'json'
28
+ require 'logger'
29
+ require 'tempfile'
30
+ require 'faraday'
31
+ require 'mimemagic'
32
+ require 'uri'
33
+
34
+ module AsposeEmailCloud
35
+ # Generic API client
36
+ # Swagger generic API client. This client handles the client-
37
+ # server communication, and is invariant across implementations.
38
+ class ApiClient
39
+ # The Configuration object holding settings to be used in the API client.
40
+ attr_accessor :config
41
+
42
+ # Defines the headers to be used in HTTP requests of all API calls by default.
43
+ #
44
+ # @return [Hash]
45
+ attr_accessor :default_headers
46
+
47
+ # Initializes the ApiClient
48
+ # @param [String] app_key Key to access the server.
49
+ # @param [String] app_sid ID to access the server.
50
+ # @param [String] base_url Server URL.
51
+ # @param [String] api_version Api version.
52
+ # @param [Object] debug Debug switch [true, false].
53
+ def initialize(app_key = nil, app_sid = nil, base_url = 'api-qa.aspose.cloud', api_version = 'v3.0', debug = false)
54
+ @config = Configuration.new(app_key, app_sid, base_url, api_version, debug)
55
+ @default_headers = {
56
+ 'x-aspose-client' => 'ruby sdk',
57
+ 'x-aspose-version' => '19.7'
58
+ }
59
+ end
60
+
61
+ # Call an API with given options.
62
+ #
63
+ # @return [Array<(Object, Fixnum, Hash)>] an array of 3 elements:
64
+ # the data deserialized from response body (could be nil), response status code and response headers.
65
+ def call_api(http_method, path, opts = {})
66
+ response = build_request(http_method, path, opts)
67
+ download_file response if opts[:return_type] == 'File'
68
+
69
+ if @config.debugging
70
+ @config.logger.debug "'HTTP' response body '~BEGIN~'\n #{response.body}\n'~END~'\n"
71
+ end
72
+
73
+ unless response.success?
74
+ if response.status.zero?
75
+ # Errors from libcurl will be made visible here
76
+ raise ApiError.new(response.return_message, 0)
77
+ else
78
+ begin
79
+ error = convert_to_type(JSON.parse(response.body, symbolize_names: true)[:error], "Error")
80
+ ensure
81
+ raise ApiError.new("#{response.status} Error connecting to the API #{path}; Message: #{error}",
82
+ response.status, error)
83
+ end
84
+ end
85
+ end
86
+
87
+ data = (deserialize(response, opts[:return_type]) if opts[:return_type])
88
+ [data, response.status, response.headers]
89
+ end
90
+
91
+ # Builds the HTTP request
92
+ #
93
+ # @param [String] http_method HTTP method/verb (e.g. POST)
94
+ # @param [String] path URL path (e.g. /account/new)
95
+ # @option opts [Hash] :header_params Header parameters
96
+ # @option opts [Hash] :query_params Query parameters
97
+ # @option opts [Hash] :form_params Query parameters
98
+ # @option opts [Object] :body HTTP body (JSON/XML)
99
+ # @option opts [String] :host Should not be used
100
+ # @return [Faraday::Response] A Faraday Response
101
+ def build_request(http_method, path, opts = {})
102
+ url = build_request_url(path, opts[:host])
103
+ http_method = http_method.to_sym.downcase
104
+
105
+ header_params = @default_headers.merge(opts[:header_params] || {})
106
+ query_params = opts[:query_params] || {}
107
+ form_params = opts[:form_params] || {}
108
+ body = opts[:body] if opts[:body] || nil?
109
+
110
+ update_params_for_auth! header_params, query_params, opts[:auth_names]
111
+
112
+ req_opts = {
113
+ :method => http_method,
114
+ :headers => header_params,
115
+ :params => query_params,
116
+ :body => body
117
+ }
118
+
119
+ if [:post, :patch, :put, :delete].include?(http_method)
120
+ req_body = build_request_body(header_params, form_params, opts[:body])
121
+ req_opts.update :body => req_body
122
+ if @config.debugging
123
+ @config.logger.debug "HTTP request body param ~BEGIN~\n#{req_body}\n~END~\n"
124
+ end
125
+ elsif http_method == :get && body.nil? && !form_params.any? && header_params['Content-Type'] == 'multipart/form-data'
126
+ req_opts[:headers].delete('Content-Type')
127
+ end
128
+
129
+ conn = Faraday.new url, { :params => query_params, :headers => header_params } do |f|
130
+ f.request :multipart
131
+ f.request :url_encoded
132
+ f.adapter Faraday.default_adapter
133
+ end
134
+
135
+ case http_method
136
+ when :post
137
+ return conn.post url, req_opts[:body]
138
+ when :put
139
+ return conn.put url, req_opts[:body]
140
+ when :get
141
+ return conn.get url, req_opts[:body]
142
+ else
143
+ return conn.delete url do |c|
144
+ c.body = req_opts[:body]
145
+ end
146
+ end
147
+ end
148
+
149
+ # Check if the given MIME is a JSON MIME.
150
+ # JSON MIME examples:
151
+ # application/json
152
+ # application/json; charset=UTF8
153
+ # APPLICATION/JSON
154
+ # */*
155
+ # @param [String] mime MIME
156
+ # @return [Boolean] True if the MIME is application/json
157
+ def json_mime?(mime)
158
+ (mime == '*/*') || !(mime =~ %r{Application/.*json(?!p)(;.*)?}i).nil?
159
+ end
160
+
161
+ # Deserialize the response to the given return type.
162
+ #
163
+ # @param [Response] response HTTP response
164
+ # @param [String] return_type some examples: "User", "Array[User]", "Hash[String,Integer]"
165
+ def deserialize(response, return_type)
166
+ body = response.body
167
+
168
+ # handle file downloading - return the File instance processed in request callbacks
169
+ # note that response body is empty when the file is written in chunks in request on_body callback
170
+ return @tempfile if return_type == 'File'
171
+
172
+ return nil if body.nil? || body.empty?
173
+
174
+ # return response body directly for String return type
175
+ return body if return_type == 'String'
176
+
177
+ # ensuring a default content type
178
+ content_type = response.headers['Content-Type'] || 'application/json'
179
+
180
+ raise "Content-Type is not supported: #{content_type}" unless json_mime?(content_type)
181
+
182
+ begin
183
+ data = JSON.parse("[#{body}]", symbolize_names: true)[0]
184
+ rescue JSON::ParserError => e
185
+ if %w[String Date DateTime].include?(return_type)
186
+ data = body
187
+ else
188
+ raise e
189
+ end
190
+ end
191
+
192
+ convert_to_type data, return_type
193
+ end
194
+
195
+ # Convert data to the given return type.
196
+ # @param [Object] data Data to be converted
197
+ # @param [String] return_type Return type
198
+ # @return [Mixed] Data in a particular type
199
+ def convert_to_type(data, return_type)
200
+ return nil if data.nil?
201
+
202
+ case return_type
203
+ when 'String'
204
+ data.to_s
205
+ when 'Integer'
206
+ data.to_i
207
+ when 'Float'
208
+ data.to_f
209
+ when 'BOOLEAN'
210
+ data == true
211
+ when 'DateTime'
212
+ # parse date time (expecting ISO 8601 format)
213
+ DateTime.parse data
214
+ when 'Date'
215
+ # parse date time (expecting ISO 8601 format)
216
+ Date.parse data
217
+ when 'Object'
218
+ # generic object (usually a Hash), return directly
219
+ data
220
+ when /\AArray<(.+)>\z/
221
+ # e.g. Array<Pet>
222
+ sub_type = Regexp.last_match(1)
223
+ data.map { |item| convert_to_type(item, sub_type) }
224
+ when /\AHash\<String, (.+)\>\z/
225
+ # e.g. Hash<String, Integer>
226
+ sub_type = Regexp.last_match(1)
227
+ {}.tap do |hash|
228
+ data.each { |k, v| hash[k] = convert_to_type(v, sub_type) }
229
+ end
230
+ else
231
+ # models, e.g. Pet
232
+ sub_type = data[:type] || data[:discriminator] || return_type
233
+ if AsposeEmailCloud.const_defined?(sub_type)
234
+ return_type = sub_type
235
+ end
236
+ AsposeEmailCloud.const_get(return_type).new.tap do |model|
237
+ model.build_from_hash data
238
+ end
239
+ end
240
+ end
241
+
242
+ # Save response body into a file in (the defined) temporary folder, using the filename
243
+ # from the "Content-Disposition" header if provided, otherwise a random filename.
244
+ # The response body is written to the file in chunks in order to handle files which
245
+ # size is larger than maximum Ruby String or even larger than the maximum memory a Ruby
246
+ # process can use.
247
+ #
248
+ # @see Configuration#temp_folder_path
249
+ def download_file(response)
250
+ tempfile = nil
251
+ content_disposition = response.headers['Content-Disposition']
252
+ if content_disposition and content_disposition =~ /filename=/i
253
+ filename = content_disposition[/filename=['"]?([^'"\s]+)['"]?/, 1]
254
+ prefix = sanitize_filename(filename)
255
+ else
256
+ prefix = 'download-'
257
+ end
258
+ prefix += '-' unless prefix.end_with?('-')
259
+ tempfile = Tempfile.open(prefix, @config.temp_folder_path)
260
+ tempfile.binmode
261
+ @tempfile = tempfile
262
+ tempfile.write(response.body)
263
+ response.on_complete do |resp|
264
+ tempfile.close
265
+ @config.logger.info "Temp file written to #{tempfile.path}, please copy the file to a proper folder "\
266
+ "with e.g. `FileUtils.cp(tempfile.path, '/new/file/path')` otherwise the temp file "\
267
+ "will be deleted automatically with GC. It's also recommended to delete the temp file "\
268
+ "explicitly with `tempfile.delete`"
269
+ end
270
+ end
271
+
272
+ # Sanitize filename by removing path.
273
+ # e.g. ../../sun.gif becomes sun.gif
274
+ #
275
+ # @param [String] filename the filename to be sanitized
276
+ # @return [String] the sanitized filename
277
+ def sanitize_filename(filename)
278
+ filename.gsub(%r{.*[/\\]}, '')
279
+ end
280
+
281
+ def build_request_url(path, host = nil)
282
+ # Add leading and trailing slashes to path
283
+ path = "/#{path}".gsub(%r{/+}, '/')
284
+ URI.encode((host || @config.base_url) + path)
285
+ end
286
+
287
+ # Builds the HTTP request body
288
+ #
289
+ # @param [Hash] header_params Header parameters
290
+ # @param [Hash] form_params Query parameters
291
+ # @param [Object] body HTTP body (JSON/XML)
292
+ # @return [String] HTTP body data in the form of string
293
+ def build_request_body(header_params, form_params, body)
294
+ # http form
295
+ if (header_params['Content-Type'] == 'application/x-www-form-urlencoded' ||
296
+ header_params['Content-Type'] == 'multipart/form-data') && form_params.any?
297
+ data = {}
298
+ form_params.each do |key, value|
299
+ case value
300
+ when ::File
301
+ data[key] = Faraday::UploadIO.new(value.path, MimeMagic.by_magic(value).to_s, key)
302
+ when ::Tempfile
303
+ data[key] = Faraday::UploadIO.new(value.path, key)
304
+ when ::Array, nil
305
+ data[key] = value
306
+ else
307
+ data[key] = value.to_s
308
+ end
309
+ end
310
+ elsif body
311
+ data = body.is_a?(String) ? body : body.to_json
312
+ else
313
+ data = nil
314
+ end
315
+ data
316
+ end
317
+
318
+ # Update hearder and query params based on authentication settings.
319
+ #
320
+ # @param [Hash] header_params Header parameters
321
+ # @param [Hash] query_params Query parameters
322
+ # @param [String] auth_names Authentication scheme name
323
+ def update_params_for_auth!(header_params, query_params, auth_names)
324
+ Array(auth_names).each do |auth_name|
325
+ auth_setting = @config.auth_settings[auth_name.to_sym]
326
+ next unless auth_setting
327
+
328
+ case auth_setting[:in]
329
+ when 'header'
330
+ header_params[auth_setting[:key]] = auth_setting[:value]
331
+ when 'query'
332
+ query_params[auth_setting[:key]] = auth_setting[:value]
333
+ else
334
+ raise ArgumentError, 'Authentication token must be in `query` of `header`'
335
+ end
336
+ end
337
+ end
338
+
339
+ # Convert object (array, hash, object, etc) to JSON string.
340
+ # @param [Object] model object to be converted into JSON string
341
+ # @return [String] JSON string representation of the object
342
+ def object_to_http_body(model)
343
+ return model if model.nil? || model.is_a?(String)
344
+
345
+ local_body = nil
346
+ local_body = if model.is_a?(Array)
347
+ model.map { |m| object_to_hash(m) }
348
+ else
349
+ object_to_hash(model)
350
+ end
351
+ local_body.to_json
352
+ end
353
+
354
+ # Convert object(non-array) to hash.
355
+ # @param [Object] obj object to be converted into JSON string
356
+ # @return [String] JSON string representation of the object
357
+ def object_to_hash(obj)
358
+ if obj.respond_to?(:to_hash)
359
+ obj.to_hash
360
+ else
361
+ obj
362
+ end
363
+ end
364
+
365
+ # Build parameter value according to the given collection format.
366
+ # @param [String] collection_format one of :csv, :ssv, :tsv, :pipes and :multi
367
+ def build_collection_param(param, collection_format)
368
+ case collection_format
369
+ when :csv
370
+ param.join(',')
371
+ when :ssv
372
+ param.join(' ')
373
+ when :tsv
374
+ param.join("\t")
375
+ when :pipes
376
+ param.join('|')
377
+ when :multi
378
+ # return the array directly as typhoeus will handle it as expected
379
+ param
380
+ else
381
+ raise "unknown collection format: #{collection_format.inspect}"
382
+ end
383
+ end
384
+ end
385
+ end