aspose_cells_cloud 20.2 → 20.9

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 (294) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +1 -1
  3. data/README.md +80 -62
  4. data/aspose_cells_cloud-20.2.gem +0 -0
  5. data/aspose_cells_cloud-20.4.gem +0 -0
  6. data/aspose_cells_cloud-20.6.gem +0 -0
  7. data/aspose_cells_cloud-20.7.gem +0 -0
  8. data/aspose_cells_cloud-20.8.gem +0 -0
  9. data/aspose_cells_cloud.gemspec +48 -48
  10. data/lib/aspose_cells_cloud.rb +296 -289
  11. data/lib/aspose_cells_cloud/api/cells_api.rb +19866 -19020
  12. data/lib/aspose_cells_cloud/api_client.rb +484 -483
  13. data/lib/aspose_cells_cloud/configuration.rb +178 -178
  14. data/lib/aspose_cells_cloud/models/above_average.rb +234 -234
  15. data/lib/aspose_cells_cloud/models/access_token_response.rb +261 -261
  16. data/lib/aspose_cells_cloud/models/area.rb +243 -243
  17. data/lib/aspose_cells_cloud/models/auto_filter.rb +227 -227
  18. data/lib/aspose_cells_cloud/models/auto_filter_response.rb +221 -221
  19. data/lib/aspose_cells_cloud/models/auto_fitter_options.rb +231 -231
  20. data/lib/aspose_cells_cloud/models/auto_shape.rb +504 -504
  21. data/lib/aspose_cells_cloud/models/auto_shape_response.rb +221 -221
  22. data/lib/aspose_cells_cloud/models/auto_shapes.rb +209 -209
  23. data/lib/aspose_cells_cloud/models/auto_shapes_response.rb +221 -221
  24. data/lib/aspose_cells_cloud/models/border.rb +216 -216
  25. data/lib/aspose_cells_cloud/models/calculation_options.rb +225 -225
  26. data/lib/aspose_cells_cloud/models/cell.rb +401 -401
  27. data/lib/aspose_cells_cloud/models/cell_area.rb +245 -245
  28. data/lib/aspose_cells_cloud/models/cell_response.rb +221 -221
  29. data/lib/aspose_cells_cloud/models/cell_value.rb +234 -234
  30. data/lib/aspose_cells_cloud/models/cells.rb +270 -270
  31. data/lib/aspose_cells_cloud/models/cells_cloud_file_info.rb +230 -0
  32. data/lib/aspose_cells_cloud/models/cells_cloud_response.rb +212 -212
  33. data/lib/aspose_cells_cloud/models/cells_color.rb +234 -234
  34. data/lib/aspose_cells_cloud/models/cells_document_properties.rb +209 -209
  35. data/lib/aspose_cells_cloud/models/cells_document_properties_response.rb +221 -221
  36. data/lib/aspose_cells_cloud/models/cells_document_property.rb +225 -225
  37. data/lib/aspose_cells_cloud/models/cells_document_property_response.rb +221 -221
  38. data/lib/aspose_cells_cloud/models/cells_error.rb +229 -0
  39. data/lib/aspose_cells_cloud/models/cells_object_operate_task_parameter.rb +216 -216
  40. data/lib/aspose_cells_cloud/models/cells_response.rb +221 -221
  41. data/lib/aspose_cells_cloud/models/chart.rb +626 -626
  42. data/lib/aspose_cells_cloud/models/chart_area.rb +317 -317
  43. data/lib/aspose_cells_cloud/models/chart_area_response.rb +221 -221
  44. data/lib/aspose_cells_cloud/models/chart_frame.rb +317 -317
  45. data/lib/aspose_cells_cloud/models/chart_operate_parameter.rb +279 -279
  46. data/lib/aspose_cells_cloud/models/charts.rb +209 -209
  47. data/lib/aspose_cells_cloud/models/charts_response.rb +221 -221
  48. data/lib/aspose_cells_cloud/models/color.rb +245 -245
  49. data/lib/aspose_cells_cloud/models/color_filter.rb +234 -234
  50. data/lib/aspose_cells_cloud/models/color_filter_request.rb +216 -216
  51. data/lib/aspose_cells_cloud/models/color_scale.rb +249 -249
  52. data/lib/aspose_cells_cloud/models/column.rb +243 -243
  53. data/lib/aspose_cells_cloud/models/column_response.rb +221 -221
  54. data/lib/aspose_cells_cloud/models/columns.rb +237 -237
  55. data/lib/aspose_cells_cloud/models/columns_response.rb +221 -221
  56. data/lib/aspose_cells_cloud/models/comment.rb +297 -297
  57. data/lib/aspose_cells_cloud/models/comment_response.rb +221 -221
  58. data/lib/aspose_cells_cloud/models/comments.rb +209 -209
  59. data/lib/aspose_cells_cloud/models/comments_response.rb +221 -221
  60. data/lib/aspose_cells_cloud/models/conditional_formatting.rb +218 -218
  61. data/lib/aspose_cells_cloud/models/conditional_formatting_icon.rb +235 -235
  62. data/lib/aspose_cells_cloud/models/conditional_formatting_response.rb +221 -221
  63. data/lib/aspose_cells_cloud/models/conditional_formatting_value.rb +219 -219
  64. data/lib/aspose_cells_cloud/models/conditional_formattings.rb +223 -223
  65. data/lib/aspose_cells_cloud/models/conditional_formattings_response.rb +221 -221
  66. data/lib/aspose_cells_cloud/models/convert_task_parameter.rb +216 -216
  67. data/lib/aspose_cells_cloud/models/copy_options.rb +248 -248
  68. data/lib/aspose_cells_cloud/models/create_pivot_table_request.rb +263 -263
  69. data/lib/aspose_cells_cloud/models/custom_filter.rb +207 -207
  70. data/lib/aspose_cells_cloud/models/custom_parser_config.rb +216 -216
  71. data/lib/aspose_cells_cloud/models/data_bar.rb +309 -309
  72. data/lib/aspose_cells_cloud/models/data_bar_border.rb +209 -209
  73. data/lib/aspose_cells_cloud/models/data_sorter.rb +227 -227
  74. data/lib/aspose_cells_cloud/models/dif_save_options.rb +265 -265
  75. data/lib/aspose_cells_cloud/models/disc_usage.rb +219 -219
  76. data/lib/aspose_cells_cloud/models/dynamic_filter.rb +216 -216
  77. data/lib/aspose_cells_cloud/models/error.rb +229 -229
  78. data/lib/aspose_cells_cloud/models/error_details.rb +214 -214
  79. data/lib/aspose_cells_cloud/models/file_source.rb +207 -207
  80. data/lib/aspose_cells_cloud/models/file_version.rb +274 -274
  81. data/lib/aspose_cells_cloud/models/file_versions.rb +201 -201
  82. data/lib/aspose_cells_cloud/models/files_list.rb +201 -201
  83. data/lib/aspose_cells_cloud/models/files_upload_result.rb +213 -213
  84. data/lib/aspose_cells_cloud/models/fill_format.rb +259 -259
  85. data/lib/aspose_cells_cloud/models/fill_format_response.rb +221 -221
  86. data/lib/aspose_cells_cloud/models/filter_column.rb +277 -277
  87. data/lib/aspose_cells_cloud/models/font.rb +279 -279
  88. data/lib/aspose_cells_cloud/models/font_setting.rb +244 -244
  89. data/lib/aspose_cells_cloud/models/format_condition.rb +327 -327
  90. data/lib/aspose_cells_cloud/models/gradient_fill.rb +227 -227
  91. data/lib/aspose_cells_cloud/models/gradient_fill_stop.rb +226 -226
  92. data/lib/aspose_cells_cloud/models/horizontal_page_break.rb +231 -231
  93. data/lib/aspose_cells_cloud/models/horizontal_page_break_response.rb +221 -221
  94. data/lib/aspose_cells_cloud/models/horizontal_page_breaks.rb +209 -209
  95. data/lib/aspose_cells_cloud/models/horizontal_page_breaks_response.rb +221 -221
  96. data/lib/aspose_cells_cloud/models/html_save_options.rb +373 -373
  97. data/lib/aspose_cells_cloud/models/hyperlink.rb +234 -234
  98. data/lib/aspose_cells_cloud/models/hyperlink_response.rb +221 -221
  99. data/lib/aspose_cells_cloud/models/hyperlinks.rb +223 -223
  100. data/lib/aspose_cells_cloud/models/hyperlinks_response.rb +221 -221
  101. data/lib/aspose_cells_cloud/models/icon_filter.rb +212 -212
  102. data/lib/aspose_cells_cloud/models/icon_set.rb +253 -253
  103. data/lib/aspose_cells_cloud/models/image_save_options.rb +373 -373
  104. data/lib/aspose_cells_cloud/models/import_batch_data_option.rb +236 -236
  105. data/lib/aspose_cells_cloud/models/import_csv_data_option.rb +281 -281
  106. data/lib/aspose_cells_cloud/models/import_data_task_parameter.rb +216 -216
  107. data/lib/aspose_cells_cloud/models/import_double_array_option.rb +263 -263
  108. data/lib/aspose_cells_cloud/models/import_int_array_option.rb +263 -263
  109. data/lib/aspose_cells_cloud/models/import_option.rb +225 -225
  110. data/lib/aspose_cells_cloud/models/import_string_array_option.rb +263 -263
  111. data/lib/aspose_cells_cloud/models/legend.rb +335 -335
  112. data/lib/aspose_cells_cloud/models/legend_response.rb +221 -221
  113. data/lib/aspose_cells_cloud/models/line.rb +360 -360
  114. data/lib/aspose_cells_cloud/models/line_format.rb +358 -358
  115. data/lib/aspose_cells_cloud/models/line_response.rb +221 -221
  116. data/lib/aspose_cells_cloud/models/link.rb +225 -225
  117. data/lib/aspose_cells_cloud/models/link_element.rb +198 -198
  118. data/lib/aspose_cells_cloud/models/list_column.rb +209 -209
  119. data/lib/aspose_cells_cloud/models/list_object.rb +350 -350
  120. data/lib/aspose_cells_cloud/models/list_object_operate_parameter.rb +207 -207
  121. data/lib/aspose_cells_cloud/models/list_object_response.rb +221 -221
  122. data/lib/aspose_cells_cloud/models/list_objects.rb +209 -209
  123. data/lib/aspose_cells_cloud/models/list_objects_response.rb +221 -221
  124. data/lib/aspose_cells_cloud/models/m_html_save_options.rb +373 -373
  125. data/lib/aspose_cells_cloud/models/markdown_save_options.rb +292 -292
  126. data/lib/aspose_cells_cloud/models/merged_cell.rb +254 -254
  127. data/lib/aspose_cells_cloud/models/merged_cell_response.rb +221 -221
  128. data/lib/aspose_cells_cloud/models/merged_cells.rb +223 -223
  129. data/lib/aspose_cells_cloud/models/merged_cells_response.rb +221 -221
  130. data/lib/aspose_cells_cloud/models/multiple_filter.rb +189 -189
  131. data/lib/aspose_cells_cloud/models/multiple_filters.rb +209 -209
  132. data/lib/aspose_cells_cloud/models/name.rb +276 -276
  133. data/lib/aspose_cells_cloud/models/name_response.rb +221 -221
  134. data/lib/aspose_cells_cloud/models/names.rb +223 -223
  135. data/lib/aspose_cells_cloud/models/names_response.rb +221 -221
  136. data/lib/aspose_cells_cloud/models/negative_bar_format.rb +229 -229
  137. data/lib/aspose_cells_cloud/models/object_exist.rb +219 -219
  138. data/lib/aspose_cells_cloud/models/ods_save_options.rb +265 -265
  139. data/lib/aspose_cells_cloud/models/ole_object.rb +567 -567
  140. data/lib/aspose_cells_cloud/models/ole_object_response.rb +221 -221
  141. data/lib/aspose_cells_cloud/models/ole_objects.rb +209 -209
  142. data/lib/aspose_cells_cloud/models/ole_objects_response.rb +221 -221
  143. data/lib/aspose_cells_cloud/models/ooxml_save_options.rb +274 -274
  144. data/lib/aspose_cells_cloud/models/operate_object.rb +207 -207
  145. data/lib/aspose_cells_cloud/models/operate_object_position.rb +243 -243
  146. data/lib/aspose_cells_cloud/models/operate_parameter.rb +198 -198
  147. data/lib/aspose_cells_cloud/models/page_break_operate_parameter.rb +252 -252
  148. data/lib/aspose_cells_cloud/models/page_section.rb +259 -259
  149. data/lib/aspose_cells_cloud/models/page_sections_response.rb +223 -223
  150. data/lib/aspose_cells_cloud/models/page_setup.rb +542 -542
  151. data/lib/aspose_cells_cloud/models/page_setup_operate_parameter.rb +207 -207
  152. data/lib/aspose_cells_cloud/models/page_setup_response.rb +221 -221
  153. data/lib/aspose_cells_cloud/models/password_request.rb +198 -198
  154. data/lib/aspose_cells_cloud/models/paste_options.rb +225 -225
  155. data/lib/aspose_cells_cloud/models/pattern_fill.rb +252 -252
  156. data/lib/aspose_cells_cloud/models/pdf_save_options.rb +355 -355
  157. data/lib/aspose_cells_cloud/models/pdf_security_options.rb +283 -283
  158. data/lib/aspose_cells_cloud/models/pic_format_option.rb +243 -243
  159. data/lib/aspose_cells_cloud/models/picture.rb +558 -558
  160. data/lib/aspose_cells_cloud/models/picture_response.rb +221 -221
  161. data/lib/aspose_cells_cloud/models/pictures.rb +209 -209
  162. data/lib/aspose_cells_cloud/models/pictures_response.rb +221 -221
  163. data/lib/aspose_cells_cloud/models/pivot_field.rb +546 -546
  164. data/lib/aspose_cells_cloud/models/pivot_field_response.rb +221 -221
  165. data/lib/aspose_cells_cloud/models/pivot_filter.rb +279 -279
  166. data/lib/aspose_cells_cloud/models/pivot_filter_response.rb +221 -221
  167. data/lib/aspose_cells_cloud/models/pivot_filters_response.rb +223 -223
  168. data/lib/aspose_cells_cloud/models/pivot_item.rb +228 -228
  169. data/lib/aspose_cells_cloud/models/pivot_table.rb +824 -824
  170. data/lib/aspose_cells_cloud/models/pivot_table_field_request.rb +200 -200
  171. data/lib/aspose_cells_cloud/models/pivot_table_operate_parameter.rb +276 -276
  172. data/lib/aspose_cells_cloud/models/pivot_table_response.rb +221 -221
  173. data/lib/aspose_cells_cloud/models/pivot_tables.rb +209 -209
  174. data/lib/aspose_cells_cloud/models/pivot_tables_response.rb +221 -221
  175. data/lib/aspose_cells_cloud/models/protect_sheet_parameter.rb +335 -335
  176. data/lib/aspose_cells_cloud/models/range.rb +309 -309
  177. data/lib/aspose_cells_cloud/models/range_copy_request.rb +225 -225
  178. data/lib/aspose_cells_cloud/models/range_set_outline_border_request.rb +225 -225
  179. data/lib/aspose_cells_cloud/models/range_set_style_request.rb +207 -207
  180. data/lib/aspose_cells_cloud/models/range_value_response.rb +223 -223
  181. data/lib/aspose_cells_cloud/models/ranges.rb +200 -200
  182. data/lib/aspose_cells_cloud/models/ranges_response.rb +221 -221
  183. data/lib/aspose_cells_cloud/models/result_destination.rb +216 -216
  184. data/lib/aspose_cells_cloud/models/row.rb +261 -261
  185. data/lib/aspose_cells_cloud/models/row_response.rb +221 -221
  186. data/lib/aspose_cells_cloud/models/rows.rb +237 -237
  187. data/lib/aspose_cells_cloud/models/rows_response.rb +221 -221
  188. data/lib/aspose_cells_cloud/models/save_options.rb +265 -265
  189. data/lib/aspose_cells_cloud/models/save_response.rb +221 -221
  190. data/lib/aspose_cells_cloud/models/save_result.rb +200 -218
  191. data/lib/aspose_cells_cloud/models/save_result_task_parameter.rb +207 -207
  192. data/lib/aspose_cells_cloud/models/shadow_effect.rb +252 -252
  193. data/lib/aspose_cells_cloud/models/shape.rb +504 -504
  194. data/lib/aspose_cells_cloud/models/shape_operate_parameter.rb +207 -207
  195. data/lib/aspose_cells_cloud/models/shape_response.rb +221 -221
  196. data/lib/aspose_cells_cloud/models/shapes.rb +209 -209
  197. data/lib/aspose_cells_cloud/models/shapes_response.rb +221 -221
  198. data/lib/aspose_cells_cloud/models/single_value.rb +207 -207
  199. data/lib/aspose_cells_cloud/models/single_value_response.rb +221 -221
  200. data/lib/aspose_cells_cloud/models/smart_marker_task_parameter.rb +216 -216
  201. data/lib/aspose_cells_cloud/models/solid_fill.rb +216 -216
  202. data/lib/aspose_cells_cloud/models/sort_key.rb +221 -221
  203. data/lib/aspose_cells_cloud/models/sparkline.rb +226 -0
  204. data/lib/aspose_cells_cloud/models/sparkline_group.rb +434 -0
  205. data/lib/aspose_cells_cloud/models/sparkline_group_response.rb +221 -0
  206. data/lib/aspose_cells_cloud/models/sparkline_groups.rb +200 -0
  207. data/lib/aspose_cells_cloud/models/sparkline_groups_response.rb +221 -0
  208. data/lib/aspose_cells_cloud/models/split_result.rb +200 -200
  209. data/lib/aspose_cells_cloud/models/split_result_document.rb +212 -212
  210. data/lib/aspose_cells_cloud/models/split_result_response.rb +222 -222
  211. data/lib/aspose_cells_cloud/models/split_workbook_task_parameter.rb +243 -243
  212. data/lib/aspose_cells_cloud/models/spreadsheet_ml2003_save_options.rb +292 -292
  213. data/lib/aspose_cells_cloud/models/storage_exist.rb +204 -204
  214. data/lib/aspose_cells_cloud/models/storage_file.rb +249 -249
  215. data/lib/aspose_cells_cloud/models/style.rb +407 -407
  216. data/lib/aspose_cells_cloud/models/style_response.rb +221 -221
  217. data/lib/aspose_cells_cloud/models/svg_save_options.rb +274 -274
  218. data/lib/aspose_cells_cloud/models/task_data.rb +200 -200
  219. data/lib/aspose_cells_cloud/models/task_description.rb +207 -207
  220. data/lib/aspose_cells_cloud/models/task_parameter.rb +189 -189
  221. data/lib/aspose_cells_cloud/models/text_item.rb +207 -207
  222. data/lib/aspose_cells_cloud/models/text_items.rb +209 -209
  223. data/lib/aspose_cells_cloud/models/text_items_response.rb +221 -221
  224. data/lib/aspose_cells_cloud/models/text_options.rb +333 -333
  225. data/lib/aspose_cells_cloud/models/text_water_marker_request.rb +239 -0
  226. data/lib/aspose_cells_cloud/models/texture_fill.rb +243 -243
  227. data/lib/aspose_cells_cloud/models/theme_color.rb +207 -207
  228. data/lib/aspose_cells_cloud/models/tile_pic_option.rb +263 -263
  229. data/lib/aspose_cells_cloud/models/title.rb +380 -380
  230. data/lib/aspose_cells_cloud/models/title_response.rb +221 -221
  231. data/lib/aspose_cells_cloud/models/top10.rb +219 -219
  232. data/lib/aspose_cells_cloud/models/top10_filter.rb +240 -240
  233. data/lib/aspose_cells_cloud/models/txt_save_options.rb +301 -301
  234. data/lib/aspose_cells_cloud/models/validation.rb +360 -360
  235. data/lib/aspose_cells_cloud/models/validation_response.rb +221 -221
  236. data/lib/aspose_cells_cloud/models/validations.rb +223 -223
  237. data/lib/aspose_cells_cloud/models/validations_response.rb +221 -221
  238. data/lib/aspose_cells_cloud/models/value_type.rb +189 -189
  239. data/lib/aspose_cells_cloud/models/vertical_page_break.rb +231 -231
  240. data/lib/aspose_cells_cloud/models/vertical_page_break_response.rb +221 -221
  241. data/lib/aspose_cells_cloud/models/vertical_page_breaks.rb +209 -209
  242. data/lib/aspose_cells_cloud/models/vertical_page_breaks_response.rb +221 -221
  243. data/lib/aspose_cells_cloud/models/workbook.rb +290 -290
  244. data/lib/aspose_cells_cloud/models/workbook_encryption_request.rb +224 -224
  245. data/lib/aspose_cells_cloud/models/workbook_operate_parameter.rb +198 -198
  246. data/lib/aspose_cells_cloud/models/workbook_protection_request.rb +209 -209
  247. data/lib/aspose_cells_cloud/models/workbook_replace_response.rb +235 -235
  248. data/lib/aspose_cells_cloud/models/workbook_response.rb +221 -221
  249. data/lib/aspose_cells_cloud/models/workbook_settings.rb +626 -626
  250. data/lib/aspose_cells_cloud/models/workbook_settings_operate_parameter.rb +207 -207
  251. data/lib/aspose_cells_cloud/models/workbook_settings_response.rb +221 -221
  252. data/lib/aspose_cells_cloud/models/worksheet.rb +510 -510
  253. data/lib/aspose_cells_cloud/models/worksheet_moving_request.rb +209 -209
  254. data/lib/aspose_cells_cloud/models/worksheet_replace_response.rb +235 -235
  255. data/lib/aspose_cells_cloud/models/worksheet_response.rb +221 -221
  256. data/lib/aspose_cells_cloud/models/worksheets.rb +209 -209
  257. data/lib/aspose_cells_cloud/models/worksheets_response.rb +221 -221
  258. data/lib/aspose_cells_cloud/models/xls_save_options.rb +265 -265
  259. data/lib/aspose_cells_cloud/models/xlsb_save_options.rb +265 -265
  260. data/lib/aspose_cells_cloud/models/xps_save_options.rb +265 -265
  261. data/lib/aspose_cells_cloud/version.rb +25 -25
  262. data/nohup.out +4 -0
  263. data/runTest.sh +26 -1
  264. data/spec/api/cells_api_spec.rb +28 -27
  265. data/spec/api/cells_auto_filter_api_spec.rb +1 -1
  266. data/spec/api/cells_autoshapes_api_spec.rb +1 -1
  267. data/spec/api/cells_chart_area_api_spec.rb +1 -1
  268. data/spec/api/cells_charts_api_spec.rb +1 -1
  269. data/spec/api/cells_conditional_formattings_api_spec.rb +1 -1
  270. data/spec/api/cells_hypelinks_api_spec.rb +1 -1
  271. data/spec/api/cells_list_objects_api_spec.rb +1 -1
  272. data/spec/api/cells_ole_objects_api_spec.rb +4 -2
  273. data/spec/api/cells_one_spec.rb +37 -0
  274. data/spec/api/cells_page_breaks_api_spec.rb +3 -3
  275. data/spec/api/cells_page_setup_api_spec.rb +1 -1
  276. data/spec/api/cells_pictures_api_spec.rb +3 -2
  277. data/spec/api/cells_pivot_tables_api_spec.rb +36 -29
  278. data/spec/api/cells_properties_api_spec.rb +1 -1
  279. data/spec/api/cells_ranges_api_spec.rb +1 -1
  280. data/spec/api/cells_save_as_api_spec.rb +3 -3
  281. data/spec/api/cells_shapes_api_spec.rb +2 -2
  282. data/spec/api/cells_simple_spec.rb +9 -12
  283. data/spec/api/cells_sparkline_group_spec.rb +42 -0
  284. data/spec/api/cells_storage_api_spec.rb +5 -5
  285. data/spec/api/cells_storage_spec.rb +8 -15
  286. data/spec/api/cells_task_api_spec.rb +2 -2
  287. data/spec/api/cells_workbook_api_spec.rb +6 -4
  288. data/spec/api/cells_worksheet_validations_api_spec.rb +1 -1
  289. data/spec/api/cells_worksheets_api_spec.rb +35 -35
  290. data/spec/spec_helper.rb +3 -2
  291. data/testResult.txt +15 -0
  292. metadata +29 -9
  293. data/lib/aspose_cells_cloud/.api_client.rb.swp +0 -0
  294. data/spec/api/o_auth_api_spec.rb +0 -51
@@ -1,488 +1,489 @@
1
- =begin
2
- --------------------------------------------------------------------------------------------------------------------
3
- Copyright (c) 2020 Aspose.Cells Cloud
4
- Permission is hereby granted, free of charge, to any person obtaining a copy
5
- of this software and associated documentation files (the "Software"), to deal
6
- in the Software without restriction, including without limitation the rights
7
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8
- copies of the Software, and to permit persons to whom the Software is
9
- furnished to do so, subject to the following conditions:
10
- The above copyright notice and this permission notice shall be included in all
11
- copies or substantial portions of the Software.
12
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
13
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
14
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
15
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
16
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
17
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
18
- SOFTWARE.
19
- --------------------------------------------------------------------------------------------------------------------
20
-
21
- =end
22
-
23
- require 'date'
24
- require 'json'
25
- require 'logger'
26
- require 'tempfile'
27
- require 'uri'
28
- require 'faraday'
29
- require_relative 'version'
30
- require_relative 'api_error'
31
-
32
- module AsposeCellsCloud
33
- class ApiClient
34
- # The Configuration object holding settings to be used in the API client.
35
- attr_accessor :config
36
-
37
- # Defines the headers to be used in HTTP requests of all API calls by default.
38
- #
39
- # @return [Hash]
40
- attr_accessor :default_headers
41
- attr_accessor :get_access_token_time
42
- # Initializes the ApiClient
43
- # @option config [Configuration] Configuration for initializing the object, default to Configuration.default
44
- def initialize(config = Configuration.default)
45
- @config = config
46
-
47
- @default_headers = {
48
- 'Content-Type' => "application/json",
49
- 'x-aspose-client' => "ruby sdk",
50
- 'x-aspose-version' => "#{ AsposeCellsCloud::VERSION }"
51
- }
52
- end
53
-
54
- def self.default
55
- @@default ||= ApiClient.new
56
- end
57
-
58
- # Call an API with given options.
59
- #
60
- # @return [Array<(Object, Fixnum, Hash)>] an array of 3 elements:
61
- # the data deserialized from response body (could be nil), response status code and response headers.
62
- def call_api(http_method, path, opts = {})
63
- response = build_request(http_method, path, opts)
64
- download_file response if opts[:return_type] == 'File'
65
-
66
- if @config.debugging
67
- @config.logger.debug "HTTP response body ~BEGIN~\n#{response.body}\n~END~\n"
68
- end
69
-
70
- unless response.success?
71
-
72
- if response.status == 0
73
- # Errors from libcurl will be made visible here
74
- fail ApiError.new(:code => 0,
75
- :message => response.reason_phrase)
76
- else
77
- fail ApiError.new(:code => response.status,
78
- :response_headers => response.headers,
79
- :response_body => response.body),
80
- response.reason_phrase
81
- end
82
- end
83
-
84
- if opts[:return_type]
85
- data = deserialize(response, opts[:return_type])
86
- else
87
- data = nil
88
- end
89
- [data, response.status, response.headers]
90
- end
91
-
92
- # Builds the HTTP request
93
- #
94
- # @param [String] http_method HTTP method/verb (e.g. POST)
95
- # @param [String] path URL path (e.g. /account/new)
96
- # @option opts [Hash] :header_params Header parameters
97
- # @option opts [Hash] :query_params Query parameters
98
- # @option opts [Hash] :form_params Query parameters
99
- # @option opts [Object] :body HTTP body (JSON/XML)
100
- # @return [Faraday::Response] A Faraday Response
101
- def build_request(http_method, path, opts = {})
102
- url = build_request_url(path)
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] || {}
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
- end
126
-
127
- # OAuth 2.0
128
- req_opts[:params] = opts[:query_params]
129
-
130
- add_o_auth_token(req_opts)
131
-
132
-
133
- conn = Faraday.new url, {:params => query_params, :headers => header_params} do |f|
134
- f.request :multipart
135
- f.request :url_encoded
136
- f.adapter Faraday.default_adapter
137
- end
138
-
139
- if req_opts[:body] == {}
140
- req_opts[:body] = nil
141
- end
142
-
143
- case http_method
144
- when :post
145
- return conn.post url, req_opts[:body]
146
- when :put
147
- return conn.put url, req_opts[:body]
148
- when :get
149
- return conn.get url, req_opts[:body]
150
- else
151
- return conn.delete url do |c|
152
- c.body = req_opts[:body]
153
- end
154
- end
155
- end
156
-
157
- # Check if the given MIME is a JSON MIME.
158
- # JSON MIME examples:
159
- # application/json
160
- # application/json; charset=UTF8
161
- # APPLICATION/JSON
162
- # */*
163
- # @param [String] mime MIME
164
- # @return [Boolean] True if the MIME is application/json
165
- def json_mime?(mime)
166
- (mime == "*/*") || !(mime =~ /Application\/.*json(?!p)(;.*)?/i).nil?
167
- end
168
-
169
- # Deserialize the response to the given return type.
170
- #
171
- # @param [Response] response HTTP response
172
- # @param [String] return_type some examples: "User", "Array[User]", "Hash[String,Integer]"
173
- def deserialize(response, return_type)
174
- body = response.body
175
-
176
- # handle file downloading - return the File instance processed in request callbacks
177
- # note that response body is empty when the file is written in chunks in request on_body callback
178
- return @tempfile if return_type == 'File'
179
-
180
- return nil if body.nil? || body.empty?
181
-
182
- # return response body directly for String return type
183
- return body if return_type == 'String'
184
-
185
- # ensuring a default content type
186
- content_type = response.headers['Content-Type'] || 'application/json'
187
-
188
- raise "Content-Type is not supported: #{content_type}" unless json_mime?(content_type)
189
-
190
- begin
191
- data = JSON.parse("[#{body}]", :symbolize_names => true)[0]
192
- rescue JSON::ParserError => e
193
- if %w(String Date DateTime).include?(return_type)
194
- data = body
195
- else
196
- raise e
197
- end
198
- end
199
-
200
- convert_to_type data, return_type
201
- end
202
-
203
- # Convert data to the given return type.
204
- # @param [Object] data Data to be converted
205
- # @param [String] return_type Return type
206
- # @return [Mixed] Data in a particular type
207
- def convert_to_type(data, return_type)
208
- return nil if data.nil?
209
- case return_type
210
- when 'String'
211
- data.to_s
212
- when 'Integer'
213
- data.to_i
214
- when 'Float'
215
- data.to_f
216
- when 'BOOLEAN'
217
- data == true
218
- when 'DateTime'
219
- # parse date time (expecting ISO 8601 format)
220
- DateTime.parse data
221
- when 'Date'
222
- # parse date time (expecting ISO 8601 format)
223
- Date.parse data
224
- when 'Object'
225
- # generic object (usually a Hash), return directly
226
- data
227
- when /\AArray<(.+)>\z/
228
- # e.g. Array<Pet>
229
- sub_type = $1
230
- data.map {|item| convert_to_type(item, sub_type) }
231
- when /\AHash\<String, (.+)\>\z/
232
- # e.g. Hash<String, Integer>
233
- sub_type = $1
234
- {}.tap do |hash|
235
- data.each {|k, v| hash[k] = convert_to_type(v, sub_type) }
236
- end
237
- else
238
- # models, e.g. Pet
239
- AsposeCellsCloud.const_get(return_type).new.tap do |model|
240
- model.build_from_hash data
241
- end
242
- end
243
- end
244
-
245
- # Save response body into a file in (the defined) temporary folder, using the filename
246
- # from the "Content-Disposition" header if provided, otherwise a random filename.
247
- # The response body is written to the file in chunks in order to handle files which
248
- # size is larger than maximum Ruby String or even larger than the maximum memory a Ruby
249
- # process can use.
250
- #
251
- # @see Configuration#temp_folder_path
252
- def download_file(response)
253
- tempfile = nil
254
- encoding = nil
255
-
256
- content_disposition = response.headers['Content-Disposition']
257
- if content_disposition and content_disposition =~ /filename=/i
258
- filename = content_disposition[/filename=['"]?([^'"\s]+)['"]?/, 1]
259
- prefix = sanitize_filename(filename)
260
- else
261
- prefix = 'download-'
262
- end
263
- prefix = prefix + '-' unless prefix.end_with?('-')
264
- encoding = response.body.encoding
265
- tempfile = Tempfile.open(prefix, @config.temp_folder_path, encoding: encoding)
266
- @tempfile = tempfile
267
-
268
- tempfile.write(response.body)
269
-
270
- response.on_complete do |resp|
271
- tempfile.close
272
- @config.logger.info "Temp file written to #{tempfile.path}, please copy the file to a proper folder "\
273
- "with e.g. `FileUtils.cp(tempfile.path, '/new/file/path')` otherwise the temp file "\
274
- "will be deleted automatically with GC. It's also recommended to delete the temp file "\
275
- "explicitly with `tempfile.delete`"
276
- end
277
- end
278
-
279
- # Sanitize filename by removing path.
280
- # e.g. ../../sun.gif becomes sun.gif
281
- #
282
- # @param [String] filename the filename to be sanitized
283
- # @return [String] the sanitized filename
284
- def sanitize_filename(filename)
285
- filename.gsub(/.*[\/\\]/, '')
286
- end
287
-
288
- def build_request_url(path)
289
- # Add leading and trailing slashes to path
290
- path = "/#{path}".gsub(/\/+/, '/')
291
- URI.encode(@config.base_url + path)
292
- end
293
-
294
- # Builds the HTTP request body
295
- #
296
- # @param [Hash] header_params Header parameters
297
- # @param [Hash] form_params Query parameters
298
- # @param [Object] body HTTP body (JSON/XML)
299
- # @return [String] HTTP body data in the form of string
300
- def build_request_body(header_params, form_params, body)
301
- # http form
302
- if header_params['Content-Type'] == 'application/x-www-form-urlencoded' ||
303
- header_params['Content-Type'] == 'multipart/form-data'
304
- data = {}
305
- form_params.each do |key, value|
306
- case value
307
- when ::File
308
- data[key] = Faraday::UploadIO.new(value.path, MimeMagic.by_magic(value).to_s, key)
309
- when ::Array, nil
310
- # let typhoeus handle File, Array and nil parameters
311
- data[key] = value
312
- else
313
- data[key] = value.to_s
314
- end
315
- end
316
- elsif body
317
- data = body.is_a?(String) ? body : body.to_json
318
- else
319
- data = nil
320
- end
321
- data
322
- end
323
-
324
- # Update hearder and query params based on authentication settings.
325
- #
326
- # @param [Hash] header_params Header parameters
327
- # @param [Hash] query_params Query parameters
328
- # @param [String] auth_names Authentication scheme name
329
- def update_params_for_auth!(header_params, query_params, auth_names)
330
- Array(auth_names).each do |auth_name|
331
- auth_setting = @config.auth_settings[auth_name]
332
- next unless auth_setting
333
- case auth_setting[:in]
334
- when 'header' then header_params[auth_setting[:key]] = auth_setting[:value]
335
- when 'query' then query_params[auth_setting[:key]] = auth_setting[:value]
336
- else raise ArgumentError, 'Authentication token must be in `query` of `header`'
337
- end
338
- end
339
- end
340
-
341
- # Sets user agent in HTTP header
342
- #
343
- # @param [String] user_agent User agent (e.g. swagger-codegen/ruby/1.0.0)
344
- def user_agent=(user_agent)
345
- @user_agent = user_agent
346
- @default_headers['User-Agent'] = @user_agent
347
- end
348
-
349
- # Return Accept header based on an array of accepts provided.
350
- # @param [Array] accepts array for Accept
351
- # @return [String] the Accept header (e.g. application/json)
352
- def select_header_accept(accepts)
353
- return nil if accepts.nil? || accepts.empty?
354
- # use JSON when present, otherwise use all of the provided
355
- json_accept = accepts.find { |s| json_mime?(s) }
356
- return json_accept || accepts.join(',')
357
- end
358
-
359
- # Return Content-Type header based on an array of content types provided.
360
- # @param [Array] content_types array for Content-Type
361
- # @return [String] the Content-Type header (e.g. application/json)
362
- def select_header_content_type(content_types)
363
- # use application/json by default
364
- return 'application/json' if content_types.nil? || content_types.empty?
365
- # use JSON when present, otherwise use the first one
366
- json_content_type = content_types.find { |s| json_mime?(s) }
367
- return json_content_type || content_types.first
368
- end
369
-
370
- # Convert object (array, hash, object, etc) to JSON string.
371
- # @param [Object] model object to be converted into JSON string
372
- # @return [String] JSON string representation of the object
373
- def object_to_http_body(model)
374
- return '"' + model + '"' if model.is_a?(String)
375
- return model if model.nil?
376
- local_body = nil
377
- if model.is_a?(Array)
378
- local_body = model.map{|m| object_to_hash(m) }
379
- else
380
- local_body = object_to_hash(model)
381
- end
382
- local_body.to_json
383
- end
384
-
385
- # Convert object(non-array) to hash.
386
- # @param [Object] obj object to be converted into JSON string
387
- # @return [String] JSON string representation of the object
388
- def object_to_hash(obj)
389
- if obj.respond_to?(:to_hash)
390
- obj.to_hash
391
- else
392
- obj
393
- end
394
- end
395
-
396
- # Build parameter value according to the given collection format.
397
- # @param [String] collection_format one of :csv, :ssv, :tsv, :pipes and :multi
398
- def build_collection_param(param, collection_format)
399
- case collection_format
400
- when :csv
401
- param.join(',')
402
- when :ssv
403
- param.join(' ')
404
- when :tsv
405
- param.join("\t")
406
- when :pipes
407
- param.join('|')
408
- when :multi
409
- # return the array directly as faraday will handle it as expected
410
- param
411
- else
412
- fail "unknown collection format: #{collection_format.inspect}"
413
- end
414
- end
415
-
416
- # Request access and refresh tokens if needed
417
- def request_token_if_needed
418
- # check token exists
419
- if @config.access_token
1
+ =begin
2
+ --------------------------------------------------------------------------------------------------------------------
3
+ Copyright (c) 2020 Aspose.Cells Cloud
4
+ Permission is hereby granted, free of charge, to any person obtaining a copy
5
+ of this software and associated documentation files (the "Software"), to deal
6
+ in the Software without restriction, including without limitation the rights
7
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8
+ copies of the Software, and to permit persons to whom the Software is
9
+ furnished to do so, subject to the following conditions:
10
+ The above copyright notice and this permission notice shall be included in all
11
+ copies or substantial portions of the Software.
12
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
13
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
14
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
15
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
16
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
17
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
18
+ SOFTWARE.
19
+ --------------------------------------------------------------------------------------------------------------------
20
+
21
+ =end
22
+
23
+ require 'date'
24
+ require 'json'
25
+ require 'logger'
26
+ require 'tempfile'
27
+ require 'uri'
28
+ require 'faraday'
29
+ require_relative 'version'
30
+ require_relative 'api_error'
31
+
32
+ module AsposeCellsCloud
33
+ class ApiClient
34
+ # The Configuration object holding settings to be used in the API client.
35
+ attr_accessor :config
36
+
37
+ # Defines the headers to be used in HTTP requests of all API calls by default.
38
+ #
39
+ # @return [Hash]
40
+ attr_accessor :default_headers
41
+
42
+ attr_accessor :get_access_token_time
43
+ # Initializes the ApiClient
44
+ # @option config [Configuration] Configuration for initializing the object, default to Configuration.default
45
+ def initialize(config = Configuration.default)
46
+ @config = config
47
+
48
+ @default_headers = {
49
+ 'Content-Type' => "application/json",
50
+ 'x-aspose-client' => "ruby sdk",
51
+ 'x-aspose-version' => "#{ AsposeCellsCloud::VERSION }"
52
+ }
53
+ end
54
+
55
+ def self.default
56
+ @@default ||= ApiClient.new
57
+ end
58
+
59
+ # Call an API with given options.
60
+ #
61
+ # @return [Array<(Object, Fixnum, Hash)>] an array of 3 elements:
62
+ # the data deserialized from response body (could be nil), response status code and response headers.
63
+ def call_api(http_method, path, opts = {})
64
+ response = build_request(http_method, path, opts)
65
+ download_file response if opts[:return_type] == 'File'
66
+
67
+ if @config.debugging
68
+ @config.logger.debug "HTTP response body ~BEGIN~\n#{response.body}\n~END~\n"
69
+ end
70
+
71
+ unless response.success?
72
+
73
+ if response.status == 0
74
+ # Errors from libcurl will be made visible here
75
+ fail ApiError.new(:code => 0,
76
+ :message => response.reason_phrase)
77
+ else
78
+ fail ApiError.new(:code => response.status,
79
+ :response_headers => response.headers,
80
+ :response_body => response.body),
81
+ response.reason_phrase
82
+ end
83
+ end
84
+
85
+ if opts[:return_type]
86
+ data = deserialize(response, opts[:return_type])
87
+ else
88
+ data = nil
89
+ end
90
+ [data, response.status, response.headers]
91
+ end
92
+
93
+ # Builds the HTTP request
94
+ #
95
+ # @param [String] http_method HTTP method/verb (e.g. POST)
96
+ # @param [String] path URL path (e.g. /account/new)
97
+ # @option opts [Hash] :header_params Header parameters
98
+ # @option opts [Hash] :query_params Query parameters
99
+ # @option opts [Hash] :form_params Query parameters
100
+ # @option opts [Object] :body HTTP body (JSON/XML)
101
+ # @return [Faraday::Response] A Faraday Response
102
+ def build_request(http_method, path, opts = {})
103
+ url = build_request_url(path)
104
+ http_method = http_method.to_sym.downcase
105
+
106
+ header_params = @default_headers.merge(opts[:header_params] || {})
107
+ query_params = opts[:query_params] || {}
108
+ form_params = opts[:form_params] || {}
109
+ body = opts[:body] || {}
110
+
111
+ update_params_for_auth! header_params, query_params, opts[:auth_names]
112
+
113
+ req_opts = {
114
+ :method => http_method,
115
+ :headers => header_params,
116
+ :params => query_params,
117
+ :body => body
118
+ }
119
+
120
+ if [:post, :patch, :put, :delete].include?(http_method)
121
+ req_body = build_request_body(header_params, form_params, opts[:body])
122
+ req_opts.update :body => req_body
123
+ if @config.debugging
124
+ @config.logger.debug "HTTP request body param ~BEGIN~\n#{req_body}\n~END~\n"
125
+ end
126
+ end
127
+
128
+ # OAuth 2.0
129
+ req_opts[:params] = opts[:query_params]
130
+
131
+ add_o_auth_token(req_opts)
132
+
133
+
134
+ conn = Faraday.new url, {:params => query_params, :headers => header_params} do |f|
135
+ f.request :multipart
136
+ f.request :url_encoded
137
+ f.adapter Faraday.default_adapter
138
+ end
139
+
140
+ if req_opts[:body] == {}
141
+ req_opts[:body] = nil
142
+ end
143
+
144
+ case http_method
145
+ when :post
146
+ return conn.post url, req_opts[:body]
147
+ when :put
148
+ return conn.put url, req_opts[:body]
149
+ when :get
150
+ return conn.get url, req_opts[:body]
151
+ else
152
+ return conn.delete url do |c|
153
+ c.body = req_opts[:body]
154
+ end
155
+ end
156
+ end
157
+
158
+ # Check if the given MIME is a JSON MIME.
159
+ # JSON MIME examples:
160
+ # application/json
161
+ # application/json; charset=UTF8
162
+ # APPLICATION/JSON
163
+ # */*
164
+ # @param [String] mime MIME
165
+ # @return [Boolean] True if the MIME is application/json
166
+ def json_mime?(mime)
167
+ (mime == "*/*") || !(mime =~ /Application\/.*json(?!p)(;.*)?/i).nil?
168
+ end
169
+
170
+ # Deserialize the response to the given return type.
171
+ #
172
+ # @param [Response] response HTTP response
173
+ # @param [String] return_type some examples: "User", "Array[User]", "Hash[String,Integer]"
174
+ def deserialize(response, return_type)
175
+ body = response.body
176
+
177
+ # handle file downloading - return the File instance processed in request callbacks
178
+ # note that response body is empty when the file is written in chunks in request on_body callback
179
+ return @tempfile if return_type == 'File'
180
+
181
+ return nil if body.nil? || body.empty?
182
+
183
+ # return response body directly for String return type
184
+ return body if return_type == 'String'
185
+
186
+ # ensuring a default content type
187
+ content_type = response.headers['Content-Type'] || 'application/json'
188
+
189
+ raise "Content-Type is not supported: #{content_type}" unless json_mime?(content_type)
190
+
191
+ begin
192
+ data = JSON.parse("[#{body}]", :symbolize_names => true)[0]
193
+ rescue JSON::ParserError => e
194
+ if %w(String Date DateTime).include?(return_type)
195
+ data = body
196
+ else
197
+ raise e
198
+ end
199
+ end
200
+
201
+ convert_to_type data, return_type
202
+ end
203
+
204
+ # Convert data to the given return type.
205
+ # @param [Object] data Data to be converted
206
+ # @param [String] return_type Return type
207
+ # @return [Mixed] Data in a particular type
208
+ def convert_to_type(data, return_type)
209
+ return nil if data.nil?
210
+ case return_type
211
+ when 'String'
212
+ data.to_s
213
+ when 'Integer'
214
+ data.to_i
215
+ when 'Float'
216
+ data.to_f
217
+ when 'BOOLEAN'
218
+ data == true
219
+ when 'DateTime'
220
+ # parse date time (expecting ISO 8601 format)
221
+ DateTime.parse data
222
+ when 'Date'
223
+ # parse date time (expecting ISO 8601 format)
224
+ Date.parse data
225
+ when 'Object'
226
+ # generic object (usually a Hash), return directly
227
+ data
228
+ when /\AArray<(.+)>\z/
229
+ # e.g. Array<Pet>
230
+ sub_type = $1
231
+ data.map {|item| convert_to_type(item, sub_type) }
232
+ when /\AHash\<String, (.+)\>\z/
233
+ # e.g. Hash<String, Integer>
234
+ sub_type = $1
235
+ {}.tap do |hash|
236
+ data.each {|k, v| hash[k] = convert_to_type(v, sub_type) }
237
+ end
238
+ else
239
+ # models, e.g. Pet
240
+ AsposeCellsCloud.const_get(return_type).new.tap do |model|
241
+ model.build_from_hash data
242
+ end
243
+ end
244
+ end
245
+
246
+ # Save response body into a file in (the defined) temporary folder, using the filename
247
+ # from the "Content-Disposition" header if provided, otherwise a random filename.
248
+ # The response body is written to the file in chunks in order to handle files which
249
+ # size is larger than maximum Ruby String or even larger than the maximum memory a Ruby
250
+ # process can use.
251
+ #
252
+ # @see Configuration#temp_folder_path
253
+ def download_file(response)
254
+ tempfile = nil
255
+ encoding = nil
256
+
257
+ content_disposition = response.headers['Content-Disposition']
258
+ if content_disposition and content_disposition =~ /filename=/i
259
+ filename = content_disposition[/filename=['"]?([^'"\s]+)['"]?/, 1]
260
+ prefix = sanitize_filename(filename)
261
+ else
262
+ prefix = 'download-'
263
+ end
264
+ prefix = prefix + '-' unless prefix.end_with?('-')
265
+ encoding = response.body.encoding
266
+ tempfile = Tempfile.open(prefix, @config.temp_folder_path, encoding: encoding)
267
+ @tempfile = tempfile
268
+
269
+ tempfile.write(response.body)
270
+
271
+ response.on_complete do |resp|
272
+ tempfile.close
273
+ @config.logger.info "Temp file written to #{tempfile.path}, please copy the file to a proper folder "\
274
+ "with e.g. `FileUtils.cp(tempfile.path, '/new/file/path')` otherwise the temp file "\
275
+ "will be deleted automatically with GC. It's also recommended to delete the temp file "\
276
+ "explicitly with `tempfile.delete`"
277
+ end
278
+ end
279
+
280
+ # Sanitize filename by removing path.
281
+ # e.g. ../../sun.gif becomes sun.gif
282
+ #
283
+ # @param [String] filename the filename to be sanitized
284
+ # @return [String] the sanitized filename
285
+ def sanitize_filename(filename)
286
+ filename.gsub(/.*[\/\\]/, '')
287
+ end
288
+
289
+ def build_request_url(path)
290
+ # Add leading and trailing slashes to path
291
+ path = "/#{path}".gsub(/\/+/, '/')
292
+ URI.encode(@config.base_url + path)
293
+ end
294
+
295
+ # Builds the HTTP request body
296
+ #
297
+ # @param [Hash] header_params Header parameters
298
+ # @param [Hash] form_params Query parameters
299
+ # @param [Object] body HTTP body (JSON/XML)
300
+ # @return [String] HTTP body data in the form of string
301
+ def build_request_body(header_params, form_params, body)
302
+ # http form
303
+ if header_params['Content-Type'] == 'application/x-www-form-urlencoded' ||
304
+ header_params['Content-Type'] == 'multipart/form-data'
305
+ data = {}
306
+ form_params.each do |key, value|
307
+ case value
308
+ when ::File
309
+ data[key] = Faraday::UploadIO.new(value.path, MimeMagic.by_magic(value).to_s, key)
310
+ when ::Array, nil
311
+ # let typhoeus handle File, Array and nil parameters
312
+ data[key] = value
313
+ else
314
+ data[key] = value.to_s
315
+ end
316
+ end
317
+ elsif body
318
+ data = body.is_a?(String) ? body : body.to_json
319
+ else
320
+ data = nil
321
+ end
322
+ data
323
+ end
324
+
325
+ # Update hearder and query params based on authentication settings.
326
+ #
327
+ # @param [Hash] header_params Header parameters
328
+ # @param [Hash] query_params Query parameters
329
+ # @param [String] auth_names Authentication scheme name
330
+ def update_params_for_auth!(header_params, query_params, auth_names)
331
+ Array(auth_names).each do |auth_name|
332
+ auth_setting = @config.auth_settings[auth_name]
333
+ next unless auth_setting
334
+ case auth_setting[:in]
335
+ when 'header' then header_params[auth_setting[:key]] = auth_setting[:value]
336
+ when 'query' then query_params[auth_setting[:key]] = auth_setting[:value]
337
+ else raise ArgumentError, 'Authentication token must be in `query` of `header`'
338
+ end
339
+ end
340
+ end
341
+
342
+ # Sets user agent in HTTP header
343
+ #
344
+ # @param [String] user_agent User agent (e.g. swagger-codegen/ruby/1.0.0)
345
+ def user_agent=(user_agent)
346
+ @user_agent = user_agent
347
+ @default_headers['User-Agent'] = @user_agent
348
+ end
349
+
350
+ # Return Accept header based on an array of accepts provided.
351
+ # @param [Array] accepts array for Accept
352
+ # @return [String] the Accept header (e.g. application/json)
353
+ def select_header_accept(accepts)
354
+ return nil if accepts.nil? || accepts.empty?
355
+ # use JSON when present, otherwise use all of the provided
356
+ json_accept = accepts.find { |s| json_mime?(s) }
357
+ return json_accept || accepts.join(',')
358
+ end
359
+
360
+ # Return Content-Type header based on an array of content types provided.
361
+ # @param [Array] content_types array for Content-Type
362
+ # @return [String] the Content-Type header (e.g. application/json)
363
+ def select_header_content_type(content_types)
364
+ # use application/json by default
365
+ return 'application/json' if content_types.nil? || content_types.empty?
366
+ # use JSON when present, otherwise use the first one
367
+ json_content_type = content_types.find { |s| json_mime?(s) }
368
+ return json_content_type || content_types.first
369
+ end
370
+
371
+ # Convert object (array, hash, object, etc) to JSON string.
372
+ # @param [Object] model object to be converted into JSON string
373
+ # @return [String] JSON string representation of the object
374
+ def object_to_http_body(model)
375
+ return '"' + model + '"' if model.is_a?(String)
376
+ return model if model.nil?
377
+ local_body = nil
378
+ if model.is_a?(Array)
379
+ local_body = model.map{|m| object_to_hash(m) }
380
+ else
381
+ local_body = object_to_hash(model)
382
+ end
383
+ local_body.to_json
384
+ end
385
+
386
+ # Convert object(non-array) to hash.
387
+ # @param [Object] obj object to be converted into JSON string
388
+ # @return [String] JSON string representation of the object
389
+ def object_to_hash(obj)
390
+ if obj.respond_to?(:to_hash)
391
+ obj.to_hash
392
+ else
393
+ obj
394
+ end
395
+ end
396
+
397
+ # Build parameter value according to the given collection format.
398
+ # @param [String] collection_format one of :csv, :ssv, :tsv, :pipes and :multi
399
+ def build_collection_param(param, collection_format)
400
+ case collection_format
401
+ when :csv
402
+ param.join(',')
403
+ when :ssv
404
+ param.join(' ')
405
+ when :tsv
406
+ param.join("\t")
407
+ when :pipes
408
+ param.join('|')
409
+ when :multi
410
+ # return the array directly as faraday will handle it as expected
411
+ param
412
+ else
413
+ fail "unknown collection format: #{collection_format.inspect}"
414
+ end
415
+ end
416
+
417
+ # Request access and refresh tokens if needed
418
+ def request_token_if_needed
419
+ # check token exists
420
+ if @config.access_token
420
421
  now = Time.now
421
422
  time_difference = now - $get_access_token_time
422
423
  if time_difference < 86300
423
424
  return
424
425
  end
425
- end
426
-
427
- # resource path
428
- local_var_path = "/connect/token"
429
- if @config.api_version === "v1.1"
430
- local_var_path ="/oauth2/token"
431
- end
432
- url = build_request_url(local_var_path).gsub('/'+config.api_version, '')
433
- #url = build_request_url(local_var_path).gsub('/v3.0', '')
434
-
435
- # header parameters
436
- header_params = {}
437
- # HTTP header 'Content-Type'
438
- header_params['Content-Type'] = select_header_content_type(['application/x-www-form-urlencoded'])
439
-
440
- query_params = {}
441
- # form parameters
442
- form_params = {}
443
- form_params["grant_type"] = 'client_credentials'
444
- form_params["client_id"] = @config.app_sid
445
- form_params["client_secret"] = @config.app_key
446
-
447
- body = {}
448
-
449
-
450
- req_opts = {
451
- :headers => header_params,
452
- :params => query_params,
453
- :body => body
454
- }
455
-
456
-
457
- req_body = build_request_body(header_params, form_params, body)
458
- req_opts.update :body => req_body
459
-
460
- req_opts[:params] = query_params
461
-
462
-
463
- conn = Faraday.new url, {:params => query_params, :headers => header_params} do |f|
464
- f.request :multipart
465
- f.request :url_encoded
466
- f.adapter Faraday.default_adapter
467
- end
468
-
469
- if req_opts[:body] == {}
470
- req_opts[:body] = nil
471
- end
472
-
473
-
474
- response = conn.post url, form_params, req_opts[:body]
475
- data = JSON.parse("[#{response.body}]", :symbolize_names => true)[0]
476
-
477
- @config.access_token = data[:access_token]
478
-
479
- $get_access_token_time = Time.now
480
- end
481
-
482
- # Adds OAuth2.0 token
483
- def add_o_auth_token(req_opts)
484
- req_opts[:headers][:Authorization] = "Bearer " + @config.access_token
485
- end
486
-
487
- end
488
- end
426
+ end
427
+
428
+ # resource path
429
+ local_var_path = "/connect/token"
430
+ if @config.api_version === "v1.1"
431
+ local_var_path ="/oauth2/token"
432
+ end
433
+ url = build_request_url(local_var_path).gsub('/'+config.api_version, '')
434
+ #url = build_request_url(local_var_path).gsub('/v3.0', '')
435
+
436
+ # header parameters
437
+ header_params = {}
438
+ # HTTP header 'Content-Type'
439
+ header_params['Content-Type'] = select_header_content_type(['application/x-www-form-urlencoded'])
440
+
441
+ query_params = {}
442
+ # form parameters
443
+ form_params = {}
444
+ form_params["grant_type"] = 'client_credentials'
445
+ form_params["client_id"] = @config.app_sid
446
+ form_params["client_secret"] = @config.app_key
447
+
448
+ body = {}
449
+
450
+
451
+ req_opts = {
452
+ :headers => header_params,
453
+ :params => query_params,
454
+ :body => body
455
+ }
456
+
457
+
458
+ req_body = build_request_body(header_params, form_params, body)
459
+ req_opts.update :body => req_body
460
+
461
+ req_opts[:params] = query_params
462
+
463
+
464
+ conn = Faraday.new url, {:params => query_params, :headers => header_params} do |f|
465
+ f.request :multipart
466
+ f.request :url_encoded
467
+ f.adapter Faraday.default_adapter
468
+ end
469
+
470
+ if req_opts[:body] == {}
471
+ req_opts[:body] = nil
472
+ end
473
+
474
+
475
+ response = conn.post url, form_params, req_opts[:body]
476
+ data = JSON.parse("[#{response.body}]", :symbolize_names => true)[0]
477
+
478
+ @config.access_token = data[:access_token]
479
+
480
+ $get_access_token_time = Time.now
481
+ end
482
+
483
+ # Adds OAuth2.0 token
484
+ def add_o_auth_token(req_opts)
485
+ req_opts[:headers][:Authorization] = "Bearer " + @config.access_token
486
+ end
487
+
488
+ end
489
+ end