aspose_email_cloud 20.2.0 → 20.3.0

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 (244) hide show
  1. checksums.yaml +4 -4
  2. data/lib/aspose-email-cloud.rb +13 -0
  3. data/lib/aspose-email-cloud/api/email_api.rb +921 -879
  4. data/lib/aspose-email-cloud/api_client.rb +386 -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 -230
  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 -279
  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 -333
  37. data/lib/aspose-email-cloud/models/associated_person.rb +244 -241
  38. data/lib/aspose-email-cloud/models/attachment.rb +324 -321
  39. data/lib/aspose-email-cloud/models/attachment_base.rb +254 -251
  40. data/lib/aspose-email-cloud/models/base_object.rb +5 -2
  41. data/lib/aspose-email-cloud/models/calendar_dto.rb +557 -554
  42. data/lib/aspose-email-cloud/models/calendar_dto_alternate_rq.rb +268 -265
  43. data/lib/aspose-email-cloud/models/calendar_dto_list.rb +215 -212
  44. data/lib/aspose-email-cloud/models/calendar_reminder.rb +318 -315
  45. data/lib/aspose-email-cloud/models/contact_dto.rb +699 -696
  46. data/lib/aspose-email-cloud/models/contact_dto_list.rb +215 -212
  47. data/lib/aspose-email-cloud/models/contact_photo.rb +231 -228
  48. data/lib/aspose-email-cloud/models/content_type.rb +267 -264
  49. data/lib/aspose-email-cloud/models/content_type_parameter.rb +226 -223
  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 -228
  53. data/lib/aspose-email-cloud/models/delete_folder_base_request.rb +318 -315
  54. data/lib/aspose-email-cloud/models/delete_message_base_request.rb +318 -315
  55. data/lib/aspose-email-cloud/models/disc_usage.rb +236 -233
  56. data/lib/aspose-email-cloud/models/discover_email_config_oauth.rb +391 -388
  57. data/lib/aspose-email-cloud/models/discover_email_config_password.rb +304 -301
  58. data/lib/aspose-email-cloud/models/discover_email_config_rq.rb +268 -265
  59. data/lib/aspose-email-cloud/models/email_account_config.rb +323 -320
  60. data/lib/aspose-email-cloud/models/email_account_config_list.rb +215 -212
  61. data/lib/aspose-email-cloud/models/email_account_request.rb +397 -394
  62. data/lib/aspose-email-cloud/models/email_address.rb +270 -267
  63. data/lib/aspose-email-cloud/models/email_client_account.rb +337 -0
  64. data/lib/aspose-email-cloud/models/email_client_account_credentials.rb +261 -0
  65. data/lib/aspose-email-cloud/models/email_client_account_oauth_credentials.rb +385 -0
  66. data/lib/aspose-email-cloud/models/email_client_account_password_credentials.rb +298 -0
  67. data/lib/aspose-email-cloud/models/email_client_multi_account.rb +233 -0
  68. data/lib/aspose-email-cloud/models/email_document.rb +233 -230
  69. data/lib/aspose-email-cloud/models/email_document_response.rb +213 -210
  70. data/lib/aspose-email-cloud/models/email_dto.rb +681 -678
  71. data/lib/aspose-email-cloud/models/email_dto_list.rb +215 -212
  72. data/lib/aspose-email-cloud/models/email_properties.rb +233 -230
  73. data/lib/aspose-email-cloud/models/email_property.rb +268 -265
  74. data/lib/aspose-email-cloud/models/email_property_response.rb +213 -210
  75. data/lib/aspose-email-cloud/models/enum_with_custom_of_associated_person_category.rb +230 -227
  76. data/lib/aspose-email-cloud/models/enum_with_custom_of_email_address_category.rb +230 -227
  77. data/lib/aspose-email-cloud/models/enum_with_custom_of_event_category.rb +230 -227
  78. data/lib/aspose-email-cloud/models/enum_with_custom_of_instant_messenger_category.rb +230 -227
  79. data/lib/aspose-email-cloud/models/enum_with_custom_of_phone_number_category.rb +230 -227
  80. data/lib/aspose-email-cloud/models/enum_with_custom_of_postal_address_category.rb +230 -227
  81. data/lib/aspose-email-cloud/models/enum_with_custom_of_url_category.rb +230 -227
  82. data/lib/aspose-email-cloud/models/error.rb +252 -249
  83. data/lib/aspose-email-cloud/models/error_details.rb +231 -228
  84. data/lib/aspose-email-cloud/models/file_version.rb +306 -303
  85. data/lib/aspose-email-cloud/models/file_versions.rb +215 -212
  86. data/lib/aspose-email-cloud/models/files_list.rb +215 -212
  87. data/lib/aspose-email-cloud/models/files_upload_result.rb +230 -227
  88. data/lib/aspose-email-cloud/models/hierarchical_object.rb +5 -2
  89. data/lib/aspose-email-cloud/models/hierarchical_object_request.rb +231 -228
  90. data/lib/aspose-email-cloud/models/hierarchical_object_response.rb +226 -223
  91. data/lib/aspose-email-cloud/models/indexed_hierarchical_object.rb +5 -2
  92. data/lib/aspose-email-cloud/models/indexed_primitive_object.rb +5 -2
  93. data/lib/aspose-email-cloud/models/instant_messenger_address.rb +244 -241
  94. data/lib/aspose-email-cloud/models/link.rb +252 -249
  95. data/lib/aspose-email-cloud/models/linked_resource.rb +267 -264
  96. data/lib/aspose-email-cloud/models/list_response_of_ai_bcr_ocr_data.rb +214 -211
  97. data/lib/aspose-email-cloud/models/list_response_of_ai_name_component.rb +214 -211
  98. data/lib/aspose-email-cloud/models/list_response_of_ai_name_extracted.rb +214 -211
  99. data/lib/aspose-email-cloud/models/list_response_of_ai_name_gender_hypothesis.rb +214 -211
  100. data/lib/aspose-email-cloud/models/list_response_of_contact_dto.rb +214 -211
  101. data/lib/aspose-email-cloud/models/list_response_of_email_account_config.rb +214 -211
  102. data/lib/aspose-email-cloud/models/list_response_of_email_dto.rb +214 -211
  103. data/lib/aspose-email-cloud/models/list_response_of_hierarchical_object.rb +214 -211
  104. data/lib/aspose-email-cloud/models/list_response_of_hierarchical_object_response.rb +214 -211
  105. data/lib/aspose-email-cloud/models/list_response_of_mail_server_folder.rb +214 -211
  106. data/lib/aspose-email-cloud/models/list_response_of_storage_file_location.rb +214 -211
  107. data/lib/aspose-email-cloud/models/list_response_of_storage_model_of_calendar_dto.rb +214 -211
  108. data/lib/aspose-email-cloud/models/list_response_of_storage_model_of_contact_dto.rb +214 -211
  109. data/lib/aspose-email-cloud/models/list_response_of_storage_model_of_email_dto.rb +214 -211
  110. data/lib/aspose-email-cloud/models/list_response_of_string.rb +214 -211
  111. data/lib/aspose-email-cloud/models/mail_address.rb +244 -241
  112. data/lib/aspose-email-cloud/models/mail_server_folder.rb +226 -223
  113. data/lib/aspose-email-cloud/models/mime_response.rb +213 -210
  114. data/lib/aspose-email-cloud/models/name_value_pair.rb +226 -222
  115. data/lib/aspose-email-cloud/models/object_exist.rb +236 -233
  116. data/lib/aspose-email-cloud/models/phone_number.rb +244 -241
  117. data/lib/aspose-email-cloud/models/postal_address.rb +353 -350
  118. data/lib/aspose-email-cloud/models/primitive_object.rb +5 -2
  119. data/lib/aspose-email-cloud/models/reminder_attendee.rb +213 -210
  120. data/lib/aspose-email-cloud/models/reminder_trigger.rb +249 -246
  121. data/lib/aspose-email-cloud/models/requests/add_calendar_attachment_request_data.rb +99 -99
  122. data/lib/aspose-email-cloud/models/requests/add_contact_attachment_request_data.rb +109 -109
  123. data/lib/aspose-email-cloud/models/requests/add_email_attachment_request_data.rb +99 -99
  124. data/lib/aspose-email-cloud/models/requests/add_mapi_attachment_request_data.rb +99 -99
  125. data/lib/aspose-email-cloud/models/requests/ai_bcr_ocr_request_data.rb +79 -79
  126. data/lib/aspose-email-cloud/models/requests/ai_bcr_ocr_storage_request_data.rb +79 -79
  127. data/lib/aspose-email-cloud/models/requests/ai_bcr_parse_model_request_data.rb +79 -79
  128. data/lib/aspose-email-cloud/models/requests/ai_bcr_parse_ocr_data_model_request_data.rb +79 -79
  129. data/lib/aspose-email-cloud/models/requests/ai_bcr_parse_request_data.rb +79 -79
  130. data/lib/aspose-email-cloud/models/requests/ai_bcr_parse_storage_request_data.rb +79 -79
  131. data/lib/aspose-email-cloud/models/requests/ai_name_complete_request_data.rb +110 -110
  132. data/lib/aspose-email-cloud/models/requests/ai_name_expand_parsed_request_data.rb +79 -79
  133. data/lib/aspose-email-cloud/models/requests/ai_name_expand_request_data.rb +110 -110
  134. data/lib/aspose-email-cloud/models/requests/ai_name_format_parsed_request_data.rb +79 -79
  135. data/lib/aspose-email-cloud/models/requests/ai_name_format_request_data.rb +116 -116
  136. data/lib/aspose-email-cloud/models/requests/ai_name_genderize_parsed_request_data.rb +79 -79
  137. data/lib/aspose-email-cloud/models/requests/ai_name_genderize_request_data.rb +110 -110
  138. data/lib/aspose-email-cloud/models/requests/ai_name_match_parsed_request_data.rb +79 -79
  139. data/lib/aspose-email-cloud/models/requests/ai_name_match_request_data.rb +121 -121
  140. data/lib/aspose-email-cloud/models/requests/ai_name_parse_email_address_request_data.rb +110 -110
  141. data/lib/aspose-email-cloud/models/requests/ai_name_parse_request_data.rb +110 -110
  142. data/lib/aspose-email-cloud/models/requests/append_email_message_request_data.rb +79 -79
  143. data/lib/aspose-email-cloud/models/requests/append_email_model_message_request_data.rb +79 -79
  144. data/lib/aspose-email-cloud/models/requests/append_mime_message_request_data.rb +79 -79
  145. data/lib/aspose-email-cloud/models/requests/convert_calendar_model_to_alternate_request_data.rb +79 -79
  146. data/lib/aspose-email-cloud/models/requests/convert_email_request_data.rb +90 -90
  147. data/lib/aspose-email-cloud/models/requests/copy_file_request_data.rb +108 -108
  148. data/lib/aspose-email-cloud/models/requests/copy_folder_request_data.rb +102 -102
  149. data/lib/aspose-email-cloud/models/requests/create_calendar_request_data.rb +89 -89
  150. data/lib/aspose-email-cloud/models/requests/create_contact_request_data.rb +99 -99
  151. data/lib/aspose-email-cloud/models/requests/create_email_folder_request_data.rb +79 -79
  152. data/lib/aspose-email-cloud/models/requests/create_email_request_data.rb +89 -89
  153. data/lib/aspose-email-cloud/models/requests/create_folder_request_data.rb +85 -85
  154. data/lib/aspose-email-cloud/models/requests/create_mapi_request_data.rb +89 -89
  155. data/lib/aspose-email-cloud/models/requests/delete_calendar_property_request_data.rb +109 -109
  156. data/lib/aspose-email-cloud/models/requests/delete_contact_property_request_data.rb +119 -119
  157. data/lib/aspose-email-cloud/models/requests/delete_email_folder_request_data.rb +79 -79
  158. data/lib/aspose-email-cloud/models/requests/delete_email_message_request_data.rb +79 -79
  159. data/lib/aspose-email-cloud/models/requests/delete_file_request_data.rb +91 -91
  160. data/lib/aspose-email-cloud/models/requests/delete_folder_request_data.rb +91 -91
  161. data/lib/aspose-email-cloud/models/requests/delete_mapi_attachment_request_data.rb +99 -99
  162. data/lib/aspose-email-cloud/models/requests/delete_mapi_properties_request_data.rb +89 -89
  163. data/lib/aspose-email-cloud/models/requests/discover_email_config_oauth_request_data.rb +79 -79
  164. data/lib/aspose-email-cloud/models/requests/discover_email_config_password_request_data.rb +79 -79
  165. data/lib/aspose-email-cloud/models/requests/discover_email_config_request_data.rb +86 -86
  166. data/lib/aspose-email-cloud/models/requests/download_file_request_data.rb +91 -91
  167. data/lib/aspose-email-cloud/models/requests/email_request.rb +75 -75
  168. data/lib/aspose-email-cloud/models/requests/fetch_email_message_request_data.rb +109 -109
  169. data/lib/aspose-email-cloud/models/requests/fetch_email_model_request_data.rb +109 -109
  170. data/lib/aspose-email-cloud/models/requests/get_calendar_attachment_request_data.rb +101 -101
  171. data/lib/aspose-email-cloud/models/requests/get_calendar_list_request_data.rb +108 -108
  172. data/lib/aspose-email-cloud/models/requests/get_calendar_model_as_alternate_request_data.rb +107 -107
  173. data/lib/aspose-email-cloud/models/requests/get_calendar_model_list_request_data.rb +98 -98
  174. data/lib/aspose-email-cloud/models/requests/get_calendar_model_request_data.rb +91 -91
  175. data/lib/aspose-email-cloud/models/requests/get_calendar_request_data.rb +91 -91
  176. data/lib/aspose-email-cloud/models/requests/get_contact_attachment_request_data.rb +111 -111
  177. data/lib/aspose-email-cloud/models/requests/get_contact_list_request_data.rb +103 -103
  178. data/lib/aspose-email-cloud/models/requests/get_contact_model_list_request_data.rb +103 -103
  179. data/lib/aspose-email-cloud/models/requests/get_contact_model_request_data.rb +101 -101
  180. data/lib/aspose-email-cloud/models/requests/get_contact_properties_request_data.rb +101 -101
  181. data/lib/aspose-email-cloud/models/requests/get_disc_usage_request_data.rb +75 -75
  182. data/lib/aspose-email-cloud/models/requests/get_email_as_file_request_data.rb +101 -101
  183. data/lib/aspose-email-cloud/models/requests/get_email_attachment_request_data.rb +101 -101
  184. data/lib/aspose-email-cloud/models/requests/get_email_client_account_request_data.rb +102 -0
  185. data/lib/aspose-email-cloud/models/requests/get_email_client_multi_account_request_data.rb +102 -0
  186. data/lib/aspose-email-cloud/models/requests/get_email_model_list_request_data.rb +103 -103
  187. data/lib/aspose-email-cloud/models/requests/get_email_model_request_data.rb +101 -101
  188. data/lib/aspose-email-cloud/models/requests/get_email_property_request_data.rb +101 -101
  189. data/lib/aspose-email-cloud/models/requests/get_email_request_data.rb +91 -91
  190. data/lib/aspose-email-cloud/models/requests/get_file_versions_request_data.rb +85 -85
  191. data/lib/aspose-email-cloud/models/requests/get_files_list_request_data.rb +85 -85
  192. data/lib/aspose-email-cloud/models/requests/get_mapi_attachment_request_data.rb +101 -101
  193. data/lib/aspose-email-cloud/models/requests/get_mapi_attachments_request_data.rb +91 -91
  194. data/lib/aspose-email-cloud/models/requests/get_mapi_list_request_data.rb +93 -93
  195. data/lib/aspose-email-cloud/models/requests/get_mapi_properties_request_data.rb +91 -91
  196. data/lib/aspose-email-cloud/models/requests/http_request.rb +51 -51
  197. data/lib/aspose-email-cloud/models/requests/is_email_address_disposable_request_data.rb +79 -0
  198. data/lib/aspose-email-cloud/models/requests/list_email_folders_request_data.rb +104 -104
  199. data/lib/aspose-email-cloud/models/requests/list_email_messages_request_data.rb +127 -127
  200. data/lib/aspose-email-cloud/models/requests/list_email_models_request_data.rb +127 -127
  201. data/lib/aspose-email-cloud/models/requests/move_file_request_data.rb +108 -108
  202. data/lib/aspose-email-cloud/models/requests/move_folder_request_data.rb +102 -102
  203. data/lib/aspose-email-cloud/models/requests/object_exists_request_data.rb +91 -91
  204. data/lib/aspose-email-cloud/models/requests/save_calendar_model_request_data.rb +89 -89
  205. data/lib/aspose-email-cloud/models/requests/save_contact_model_request_data.rb +99 -99
  206. data/lib/aspose-email-cloud/models/requests/save_email_client_account_request_data.rb +79 -0
  207. data/lib/aspose-email-cloud/models/requests/save_email_client_multi_account_request_data.rb +79 -0
  208. data/lib/aspose-email-cloud/models/requests/save_email_model_request_data.rb +99 -99
  209. data/lib/aspose-email-cloud/models/requests/save_mail_account_request_data.rb +79 -79
  210. data/lib/aspose-email-cloud/models/requests/save_mail_o_auth_account_request_data.rb +79 -79
  211. data/lib/aspose-email-cloud/models/requests/send_email_mime_request_data.rb +79 -79
  212. data/lib/aspose-email-cloud/models/requests/send_email_model_request_data.rb +79 -79
  213. data/lib/aspose-email-cloud/models/requests/send_email_request_data.rb +79 -79
  214. data/lib/aspose-email-cloud/models/requests/set_email_property_request_data.rb +99 -99
  215. data/lib/aspose-email-cloud/models/requests/set_email_read_flag_request_data.rb +79 -79
  216. data/lib/aspose-email-cloud/models/requests/storage_exists_request_data.rb +79 -79
  217. data/lib/aspose-email-cloud/models/requests/update_calendar_properties_request_data.rb +89 -89
  218. data/lib/aspose-email-cloud/models/requests/update_contact_properties_request_data.rb +99 -99
  219. data/lib/aspose-email-cloud/models/requests/update_mapi_properties_request_data.rb +89 -89
  220. data/lib/aspose-email-cloud/models/requests/upload_file_request_data.rb +97 -97
  221. data/lib/aspose-email-cloud/models/save_email_account_request.rb +434 -431
  222. data/lib/aspose-email-cloud/models/save_o_auth_email_account_request.rb +521 -505
  223. data/lib/aspose-email-cloud/models/send_email_base_request.rb +281 -278
  224. data/lib/aspose-email-cloud/models/send_email_mime_base_request.rb +300 -297
  225. data/lib/aspose-email-cloud/models/send_email_model_rq.rb +276 -273
  226. data/lib/aspose-email-cloud/models/set_email_property_request.rb +231 -228
  227. data/lib/aspose-email-cloud/models/set_message_read_flag_account_base_request.rb +318 -315
  228. data/lib/aspose-email-cloud/models/storage_exist.rb +218 -215
  229. data/lib/aspose-email-cloud/models/storage_file.rb +275 -272
  230. data/lib/aspose-email-cloud/models/storage_file_location.rb +263 -260
  231. data/lib/aspose-email-cloud/models/storage_file_rq_of_email_client_account.rb +225 -0
  232. data/lib/aspose-email-cloud/models/storage_file_rq_of_email_client_multi_account.rb +225 -0
  233. data/lib/aspose-email-cloud/models/storage_folder_location.rb +226 -223
  234. data/lib/aspose-email-cloud/models/storage_model_of_calendar_dto.rb +225 -222
  235. data/lib/aspose-email-cloud/models/storage_model_of_contact_dto.rb +225 -222
  236. data/lib/aspose-email-cloud/models/storage_model_of_email_dto.rb +225 -222
  237. data/lib/aspose-email-cloud/models/storage_model_rq_of_calendar_dto.rb +225 -222
  238. data/lib/aspose-email-cloud/models/storage_model_rq_of_contact_dto.rb +225 -222
  239. data/lib/aspose-email-cloud/models/storage_model_rq_of_email_dto.rb +225 -222
  240. data/lib/aspose-email-cloud/models/url.rb +244 -241
  241. data/lib/aspose-email-cloud/models/value_response.rb +213 -210
  242. data/lib/aspose-email-cloud/models/value_t_of_boolean.rb +217 -0
  243. data/lib/aspose-email-cloud/version.rb +1 -1
  244. metadata +15 -2
@@ -1,382 +1,386 @@
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-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
+ 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
+ encoding = nil
252
+ content_disposition = response.headers['Content-Disposition']
253
+ if content_disposition and content_disposition =~ /filename=/i
254
+ filename = content_disposition[/filename=['"]?([^'"\s]+)['"]?/, 1]
255
+ prefix = sanitize_filename(filename)
256
+ else
257
+ prefix = 'download-'
258
+ end
259
+ prefix += '-' unless prefix.end_with?('-')
260
+ encoding = response.body.encoding
261
+ tempfile = Tempfile.open(prefix, @config.temp_folder_path, encoding: encoding)
262
+ @tempfile = tempfile
263
+ tempfile.write(response.body)
264
+ response.on_complete do |resp|
265
+ tempfile.close
266
+ @config.logger.info "Temp file written to #{tempfile.path}, please copy the file to a proper folder "\
267
+ "with e.g. `FileUtils.cp(tempfile.path, '/new/file/path')` otherwise the temp file "\
268
+ "will be deleted automatically with GC. It's also recommended to delete the temp file "\
269
+ "explicitly with `tempfile.delete`"
270
+ end
271
+ end
272
+
273
+ # Sanitize filename by removing path.
274
+ # e.g. ../../sun.gif becomes sun.gif
275
+ #
276
+ # @param [String] filename the filename to be sanitized
277
+ # @return [String] the sanitized filename
278
+ def sanitize_filename(filename)
279
+ filename.gsub(%r{.*[/\\]}, '')
280
+ end
281
+
282
+ def build_request_url(path, host = nil)
283
+ # Add leading and trailing slashes to path
284
+ path = "/#{path}".gsub(%r{/+}, '/')
285
+ URI.encode((host || @config.base_url) + path)
286
+ end
287
+
288
+ # Builds the HTTP request body
289
+ #
290
+ # @param [Hash] header_params Header parameters
291
+ # @param [Hash] form_params Query parameters
292
+ # @param [Object] body HTTP body (JSON/XML)
293
+ # @return [String] HTTP body data in the form of string
294
+ def build_request_body(header_params, form_params, body)
295
+ # http form
296
+ if (header_params['Content-Type'] == 'application/x-www-form-urlencoded' ||
297
+ header_params['Content-Type'] == 'multipart/form-data') && form_params.any?
298
+ data = {}
299
+ form_params.each do |key, value|
300
+ case value
301
+ when ::File
302
+ data[key] = Faraday::UploadIO.new(value.path, MimeMagic.by_magic(value).to_s, key)
303
+ when ::Tempfile
304
+ data[key] = Faraday::UploadIO.new(value.path, key)
305
+ when ::Array, nil
306
+ data[key] = value
307
+ else
308
+ data[key] = value.to_s
309
+ end
310
+ end
311
+ elsif body
312
+ data = body.is_a?(String) ? body : body.to_json
313
+ else
314
+ data = nil
315
+ end
316
+ data
317
+ end
318
+
319
+ # Update hearder and query params based on authentication settings.
320
+ #
321
+ # @param [Hash] header_params Header parameters
322
+ # @param [Hash] query_params Query parameters
323
+ # @param [String] auth_names Authentication scheme name
324
+ def update_params_for_auth!(header_params, query_params, auth_names)
325
+ Array(auth_names).each do |auth_name|
326
+ auth_setting = @config.auth_settings[auth_name.to_sym]
327
+ next unless auth_setting
328
+
329
+ case auth_setting[:in]
330
+ when 'header'
331
+ header_params[auth_setting[:key]] = auth_setting[:value]
332
+ when 'query'
333
+ query_params[auth_setting[:key]] = auth_setting[:value]
334
+ else
335
+ raise ArgumentError, 'Authentication token must be in `query` of `header`'
336
+ end
337
+ end
338
+ end
339
+
340
+ # Convert object (array, hash, object, etc) to JSON string.
341
+ # @param [Object] model object to be converted into JSON string
342
+ # @return [String] JSON string representation of the object
343
+ def object_to_http_body(model)
344
+ return model if model.nil? || model.is_a?(String)
345
+
346
+ local_body = nil
347
+ local_body = if model.is_a?(Array)
348
+ model.map { |m| object_to_hash(m) }
349
+ else
350
+ object_to_hash(model)
351
+ end
352
+ local_body.to_json
353
+ end
354
+
355
+ # Convert object(non-array) to hash.
356
+ # @param [Object] obj object to be converted into JSON string
357
+ # @return [String] JSON string representation of the object
358
+ def object_to_hash(obj)
359
+ if obj.respond_to?(:to_hash)
360
+ obj.to_hash
361
+ else
362
+ obj
363
+ end
364
+ end
365
+
366
+ # Build parameter value according to the given collection format.
367
+ # @param [String] collection_format one of :csv, :ssv, :tsv, :pipes and :multi
368
+ def build_collection_param(param, collection_format)
369
+ case collection_format
370
+ when :csv
371
+ param.join(',')
372
+ when :ssv
373
+ param.join(' ')
374
+ when :tsv
375
+ param.join("\t")
376
+ when :pipes
377
+ param.join('|')
378
+ when :multi
379
+ # return the array directly as typhoeus will handle it as expected
380
+ param
381
+ else
382
+ raise "unknown collection format: #{collection_format.inspect}"
383
+ end
384
+ end
385
+ end
386
+ end