hubspot-api-client 2.0.0 → 2.1.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 (292) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +2 -2
  3. data/lib/hubspot-api-client.rb +3 -2
  4. data/lib/hubspot/codegen/crm/associations/api/batch_api.rb +3 -3
  5. data/lib/hubspot/codegen/crm/associations/api/types_api.rb +94 -0
  6. data/lib/hubspot/codegen/crm/associations/api_client.rb +1 -0
  7. data/lib/hubspot/codegen/crm/associations/models/associated_id.rb +229 -0
  8. data/lib/hubspot/codegen/crm/associations/models/batch_input_public_object_id.rb +1 -1
  9. data/lib/hubspot/codegen/crm/associations/models/batch_response_public_association.rb +0 -5
  10. data/lib/hubspot/codegen/crm/associations/models/batch_response_public_association_multi.rb +0 -5
  11. data/lib/hubspot/codegen/crm/associations/models/collection_response_public_association_definiton.rb +226 -0
  12. data/lib/hubspot/codegen/crm/associations/models/error.rb +12 -2
  13. data/lib/hubspot/codegen/crm/associations/models/error_detail.rb +20 -23
  14. data/lib/hubspot/codegen/crm/associations/models/next_page.rb +224 -0
  15. data/lib/hubspot/codegen/crm/associations/models/paging.rb +210 -0
  16. data/lib/hubspot/codegen/crm/associations/models/public_association.rb +19 -5
  17. data/lib/hubspot/codegen/crm/associations/models/public_association_definiton.rb +229 -0
  18. data/lib/hubspot/codegen/crm/associations/models/public_association_multi.rb +2 -2
  19. data/lib/hubspot/codegen/crm/companies/api/associations_api.rb +42 -30
  20. data/lib/hubspot/codegen/crm/companies/api/basic_api.rb +8 -5
  21. data/lib/hubspot/codegen/crm/companies/api/batch_api.rb +2 -2
  22. data/lib/hubspot/codegen/crm/companies/api_client.rb +1 -0
  23. data/lib/hubspot/codegen/crm/companies/models/associated_id.rb +229 -0
  24. data/lib/hubspot/codegen/crm/companies/models/batch_read_input_simple_public_object_id.rb +11 -2
  25. data/lib/hubspot/codegen/crm/companies/models/batch_response_simple_public_object.rb +1 -6
  26. data/lib/hubspot/codegen/crm/companies/models/{collection_response_simple_public_object_id.rb → collection_response_associated_id.rb} +5 -5
  27. data/lib/hubspot/codegen/crm/companies/models/error.rb +12 -2
  28. data/lib/hubspot/codegen/crm/companies/models/error_detail.rb +20 -23
  29. data/lib/hubspot/codegen/crm/companies/models/simple_public_object.rb +2 -12
  30. data/lib/hubspot/codegen/crm/companies/models/simple_public_object_input.rb +1 -1
  31. data/lib/hubspot/codegen/crm/contacts/api/associations_api.rb +42 -30
  32. data/lib/hubspot/codegen/crm/contacts/api/basic_api.rb +8 -5
  33. data/lib/hubspot/codegen/crm/contacts/api/batch_api.rb +2 -2
  34. data/lib/hubspot/codegen/crm/contacts/api_client.rb +1 -0
  35. data/lib/hubspot/codegen/crm/contacts/models/associated_id.rb +229 -0
  36. data/lib/hubspot/codegen/crm/contacts/models/batch_read_input_simple_public_object_id.rb +11 -2
  37. data/lib/hubspot/codegen/crm/contacts/models/batch_response_simple_public_object.rb +1 -6
  38. data/lib/hubspot/codegen/crm/contacts/models/{collection_response_simple_public_object_id.rb → collection_response_associated_id.rb} +5 -5
  39. data/lib/hubspot/codegen/crm/contacts/models/error.rb +12 -2
  40. data/lib/hubspot/codegen/crm/contacts/models/error_detail.rb +20 -23
  41. data/lib/hubspot/codegen/crm/contacts/models/filter.rb +3 -3
  42. data/lib/hubspot/codegen/crm/contacts/models/simple_public_object.rb +2 -12
  43. data/lib/hubspot/codegen/crm/deals/api/associations_api.rb +42 -30
  44. data/lib/hubspot/codegen/crm/deals/api/basic_api.rb +8 -5
  45. data/lib/hubspot/codegen/crm/deals/api/batch_api.rb +2 -2
  46. data/lib/hubspot/codegen/crm/deals/api_client.rb +1 -0
  47. data/lib/hubspot/codegen/crm/deals/models/associated_id.rb +229 -0
  48. data/lib/hubspot/codegen/crm/deals/models/batch_read_input_simple_public_object_id.rb +11 -2
  49. data/lib/hubspot/codegen/crm/deals/models/batch_response_simple_public_object.rb +1 -6
  50. data/lib/hubspot/codegen/crm/deals/models/{collection_response_simple_public_object_id.rb → collection_response_associated_id.rb} +5 -5
  51. data/lib/hubspot/codegen/crm/deals/models/error.rb +12 -2
  52. data/lib/hubspot/codegen/crm/deals/models/error_detail.rb +20 -23
  53. data/lib/hubspot/codegen/crm/deals/models/filter.rb +3 -3
  54. data/lib/hubspot/codegen/crm/deals/models/simple_public_object.rb +2 -12
  55. data/lib/hubspot/codegen/crm/extensions/cards/api/cards_api.rb +36 -36
  56. data/lib/hubspot/codegen/crm/extensions/cards/api_client.rb +1 -0
  57. data/lib/hubspot/codegen/crm/extensions/cards/models/card_actions.rb +5 -3
  58. data/lib/hubspot/codegen/crm/extensions/cards/models/card_create_request.rb +5 -3
  59. data/lib/hubspot/codegen/crm/extensions/cards/models/card_display_body.rb +5 -3
  60. data/lib/hubspot/codegen/crm/extensions/cards/models/card_display_property.rb +8 -3
  61. data/lib/hubspot/codegen/crm/extensions/cards/models/card_fetch_body.rb +6 -3
  62. data/lib/hubspot/codegen/crm/extensions/cards/models/card_fetch_body_patch.rb +7 -4
  63. data/lib/hubspot/codegen/crm/extensions/cards/models/card_list_response.rb +5 -3
  64. data/lib/hubspot/codegen/crm/extensions/cards/models/card_object_type_body.rb +5 -3
  65. data/lib/hubspot/codegen/crm/extensions/cards/models/card_patch_request.rb +5 -3
  66. data/lib/hubspot/codegen/crm/extensions/cards/models/card_response.rb +8 -3
  67. data/lib/hubspot/codegen/crm/extensions/cards/models/display_option.rb +7 -3
  68. data/lib/hubspot/codegen/crm/extensions/cards/models/error.rb +12 -2
  69. data/lib/hubspot/codegen/crm/extensions/cards/models/error_detail.rb +24 -4
  70. data/lib/hubspot/codegen/crm/line_items/api/associations_api.rb +42 -30
  71. data/lib/hubspot/codegen/crm/line_items/api/basic_api.rb +8 -5
  72. data/lib/hubspot/codegen/crm/line_items/api/batch_api.rb +2 -2
  73. data/lib/hubspot/codegen/crm/line_items/api_client.rb +1 -0
  74. data/lib/hubspot/codegen/crm/line_items/models/associated_id.rb +229 -0
  75. data/lib/hubspot/codegen/crm/line_items/models/batch_read_input_simple_public_object_id.rb +11 -2
  76. data/lib/hubspot/codegen/crm/line_items/models/batch_response_simple_public_object.rb +1 -6
  77. data/lib/hubspot/codegen/crm/line_items/models/{collection_response_simple_public_object_id.rb → collection_response_associated_id.rb} +5 -5
  78. data/lib/hubspot/codegen/crm/line_items/models/error.rb +12 -2
  79. data/lib/hubspot/codegen/crm/line_items/models/error_detail.rb +20 -23
  80. data/lib/hubspot/codegen/crm/line_items/models/filter.rb +3 -3
  81. data/lib/hubspot/codegen/crm/line_items/models/simple_public_object.rb +2 -12
  82. data/lib/hubspot/codegen/crm/owners/api/default_api.rb +2 -2
  83. data/lib/hubspot/codegen/crm/owners/api_client.rb +1 -0
  84. data/lib/hubspot/codegen/crm/owners/models/collection_response_public_owner.rb +1 -1
  85. data/lib/hubspot/codegen/crm/owners/models/error.rb +12 -2
  86. data/lib/hubspot/codegen/crm/owners/models/error_detail.rb +22 -2
  87. data/lib/hubspot/codegen/crm/owners/models/public_owner.rb +1 -6
  88. data/lib/hubspot/codegen/crm/pipelines/api/pipeline_stages_api.rb +6 -6
  89. data/lib/hubspot/codegen/crm/pipelines/api/pipelines_api.rb +7 -7
  90. data/lib/hubspot/codegen/crm/pipelines/api_client.rb +1 -0
  91. data/lib/hubspot/codegen/crm/pipelines/models/error.rb +12 -2
  92. data/lib/hubspot/codegen/crm/pipelines/models/error_detail.rb +22 -2
  93. data/lib/hubspot/codegen/crm/products/api/associations_api.rb +43 -31
  94. data/lib/hubspot/codegen/crm/products/api/basic_api.rb +9 -6
  95. data/lib/hubspot/codegen/crm/products/api/batch_api.rb +3 -3
  96. data/lib/hubspot/codegen/crm/products/api_client.rb +1 -0
  97. data/lib/hubspot/codegen/crm/products/models/associated_id.rb +229 -0
  98. data/lib/hubspot/codegen/crm/products/models/batch_read_input_simple_public_object_id.rb +11 -2
  99. data/lib/hubspot/codegen/crm/products/models/batch_response_simple_public_object.rb +1 -6
  100. data/lib/hubspot/codegen/crm/products/models/{collection_response_simple_public_object_id.rb → collection_response_associated_id.rb} +5 -5
  101. data/lib/hubspot/codegen/crm/products/models/error.rb +12 -2
  102. data/lib/hubspot/codegen/crm/products/models/error_detail.rb +20 -23
  103. data/lib/hubspot/codegen/crm/products/models/filter.rb +3 -3
  104. data/lib/hubspot/codegen/crm/products/models/simple_public_object.rb +2 -12
  105. data/lib/hubspot/codegen/crm/products/models/simple_public_object_id.rb +1 -1
  106. data/lib/hubspot/codegen/crm/products/models/simple_public_object_input.rb +1 -1
  107. data/lib/hubspot/codegen/crm/properties/api/batch_api.rb +4 -4
  108. data/lib/hubspot/codegen/crm/properties/api/core_api.rb +6 -6
  109. data/lib/hubspot/codegen/crm/properties/api/groups_api.rb +6 -6
  110. data/lib/hubspot/codegen/crm/properties/api_client.rb +1 -0
  111. data/lib/hubspot/codegen/crm/properties/models/error.rb +12 -2
  112. data/lib/hubspot/codegen/crm/properties/models/error_detail.rb +20 -23
  113. data/lib/hubspot/codegen/crm/quotes/api/associations_api.rb +43 -31
  114. data/lib/hubspot/codegen/crm/quotes/api/basic_api.rb +9 -6
  115. data/lib/hubspot/codegen/crm/quotes/api/batch_api.rb +3 -3
  116. data/lib/hubspot/codegen/crm/quotes/api_client.rb +1 -0
  117. data/lib/hubspot/codegen/crm/quotes/models/associated_id.rb +229 -0
  118. data/lib/hubspot/codegen/crm/quotes/models/batch_read_input_simple_public_object_id.rb +11 -2
  119. data/lib/hubspot/codegen/crm/quotes/models/batch_response_simple_public_object.rb +1 -6
  120. data/lib/hubspot/codegen/crm/quotes/models/{collection_response_simple_public_object_id.rb → collection_response_associated_id.rb} +5 -5
  121. data/lib/hubspot/codegen/crm/quotes/models/error.rb +12 -2
  122. data/lib/hubspot/codegen/crm/quotes/models/error_detail.rb +20 -23
  123. data/lib/hubspot/codegen/crm/quotes/models/filter.rb +4 -4
  124. data/lib/hubspot/codegen/crm/quotes/models/simple_public_object.rb +2 -12
  125. data/lib/hubspot/codegen/crm/tickets/api/associations_api.rb +43 -31
  126. data/lib/hubspot/codegen/crm/tickets/api/basic_api.rb +9 -6
  127. data/lib/hubspot/codegen/crm/tickets/api/batch_api.rb +3 -3
  128. data/lib/hubspot/codegen/crm/tickets/api_client.rb +1 -0
  129. data/lib/hubspot/codegen/crm/tickets/models/associated_id.rb +229 -0
  130. data/lib/hubspot/codegen/crm/tickets/models/batch_read_input_simple_public_object_id.rb +11 -2
  131. data/lib/hubspot/codegen/crm/tickets/models/batch_response_simple_public_object.rb +1 -6
  132. data/lib/hubspot/codegen/crm/tickets/models/{collection_response_simple_public_object_id.rb → collection_response_associated_id.rb} +6 -6
  133. data/lib/hubspot/codegen/crm/tickets/models/error.rb +12 -2
  134. data/lib/hubspot/codegen/crm/tickets/models/error_detail.rb +20 -23
  135. data/lib/hubspot/codegen/crm/tickets/models/filter.rb +3 -3
  136. data/lib/hubspot/codegen/crm/tickets/models/simple_public_object.rb +2 -12
  137. data/lib/hubspot/codegen/crm/timeline/api/events_api.rb +353 -0
  138. data/lib/hubspot/codegen/crm/timeline/api/templates_api.rb +362 -0
  139. data/lib/hubspot/codegen/crm/timeline/api/tokens_api.rb +250 -0
  140. data/lib/hubspot/codegen/crm/{objects → timeline}/api_client.rb +6 -5
  141. data/lib/hubspot/codegen/crm/{objects → timeline}/api_error.rb +4 -4
  142. data/lib/hubspot/codegen/crm/{objects → timeline}/configuration.rb +6 -6
  143. data/lib/hubspot/codegen/crm/timeline/models/add_numbers.rb +280 -0
  144. data/lib/hubspot/codegen/crm/timeline/models/batch_input_timeline_event.rb +219 -0
  145. data/lib/hubspot/codegen/crm/{objects/models/batch_response_simple_public_object.rb → timeline/models/batch_response_timeline_event_response.rb} +17 -14
  146. data/lib/hubspot/codegen/crm/timeline/models/begins_with.rb +294 -0
  147. data/lib/hubspot/codegen/crm/timeline/models/boolean_property_variable.rb +280 -0
  148. data/lib/hubspot/codegen/crm/timeline/models/collection_response_timeline_event_template.rb +228 -0
  149. data/lib/hubspot/codegen/crm/timeline/models/concat_strings.rb +280 -0
  150. data/lib/hubspot/codegen/crm/timeline/models/constant_boolean.rb +280 -0
  151. data/lib/hubspot/codegen/crm/timeline/models/constant_number.rb +280 -0
  152. data/lib/hubspot/codegen/crm/timeline/models/constant_string.rb +280 -0
  153. data/lib/hubspot/codegen/crm/timeline/models/contains.rb +294 -0
  154. data/lib/hubspot/codegen/crm/timeline/models/date.rb +280 -0
  155. data/lib/hubspot/codegen/crm/timeline/models/divide_numbers.rb +280 -0
  156. data/lib/hubspot/codegen/crm/{objects → timeline}/models/error.rb +18 -8
  157. data/lib/hubspot/codegen/crm/{objects → timeline}/models/error_detail.rb +26 -29
  158. data/lib/hubspot/codegen/crm/timeline/models/event_detail.rb +217 -0
  159. data/lib/hubspot/codegen/crm/timeline/models/extract_most_recent_email_reply_html.rb +280 -0
  160. data/lib/hubspot/codegen/crm/timeline/models/extract_most_recent_email_reply_text.rb +280 -0
  161. data/lib/hubspot/codegen/crm/timeline/models/extract_most_recent_plain_text_email_reply.rb +280 -0
  162. data/lib/hubspot/codegen/crm/timeline/models/fetch_exchange_rate.rb +280 -0
  163. data/lib/hubspot/codegen/crm/{objects/models/batch_input_simple_public_object_input.rb → timeline/models/has_email_reply.rb} +78 -15
  164. data/lib/hubspot/codegen/crm/timeline/models/has_plain_text_email_reply.rb +280 -0
  165. data/lib/hubspot/codegen/crm/timeline/models/if_boolean.rb +303 -0
  166. data/lib/hubspot/codegen/crm/timeline/models/if_number.rb +303 -0
  167. data/lib/hubspot/codegen/crm/timeline/models/if_string.rb +303 -0
  168. data/lib/hubspot/codegen/crm/timeline/models/is_present.rb +294 -0
  169. data/lib/hubspot/codegen/crm/timeline/models/less_than.rb +280 -0
  170. data/lib/hubspot/codegen/crm/timeline/models/less_than_or_equal.rb +280 -0
  171. data/lib/hubspot/codegen/crm/timeline/models/lower_case.rb +280 -0
  172. data/lib/hubspot/codegen/crm/timeline/models/max_numbers.rb +280 -0
  173. data/lib/hubspot/codegen/crm/timeline/models/min_numbers.rb +280 -0
  174. data/lib/hubspot/codegen/crm/timeline/models/model_and.rb +280 -0
  175. data/lib/hubspot/codegen/crm/timeline/models/model_not.rb +280 -0
  176. data/lib/hubspot/codegen/crm/timeline/models/model_or.rb +280 -0
  177. data/lib/hubspot/codegen/crm/{objects/models/filter.rb → timeline/models/month.rb} +36 -28
  178. data/lib/hubspot/codegen/crm/timeline/models/more_than.rb +280 -0
  179. data/lib/hubspot/codegen/crm/timeline/models/more_than_or_equal.rb +280 -0
  180. data/lib/hubspot/codegen/crm/timeline/models/multiply_numbers.rb +280 -0
  181. data/lib/hubspot/codegen/crm/timeline/models/next_page.rb +224 -0
  182. data/lib/hubspot/codegen/crm/{objects/models/batch_input_simple_public_object_id.rb → timeline/models/now.rb} +78 -15
  183. data/lib/hubspot/codegen/crm/timeline/models/number_equals.rb +280 -0
  184. data/lib/hubspot/codegen/crm/timeline/models/number_property_variable.rb +280 -0
  185. data/lib/hubspot/codegen/crm/timeline/models/number_to_string.rb +280 -0
  186. data/lib/hubspot/codegen/crm/timeline/models/paging.rb +210 -0
  187. data/lib/hubspot/codegen/crm/timeline/models/parse_number.rb +280 -0
  188. data/lib/hubspot/codegen/crm/timeline/models/period_to_months.rb +280 -0
  189. data/lib/hubspot/codegen/crm/timeline/models/pipeline_probability.rb +280 -0
  190. data/lib/hubspot/codegen/crm/timeline/models/round_down_numbers.rb +280 -0
  191. data/lib/hubspot/codegen/crm/timeline/models/round_up_numbers.rb +280 -0
  192. data/lib/hubspot/codegen/crm/timeline/models/string_equals.rb +280 -0
  193. data/lib/hubspot/codegen/crm/timeline/models/string_property_variable.rb +280 -0
  194. data/lib/hubspot/codegen/crm/timeline/models/subtract_numbers.rb +280 -0
  195. data/lib/hubspot/codegen/crm/timeline/models/time_between.rb +280 -0
  196. data/lib/hubspot/codegen/crm/{objects/models/public_object_search_request.rb → timeline/models/timeline_event.rb} +101 -69
  197. data/lib/hubspot/codegen/crm/{objects/models/simple_public_object_id.rb → timeline/models/timeline_event_i_frame.rb} +79 -18
  198. data/lib/hubspot/codegen/crm/timeline/models/timeline_event_response.rb +342 -0
  199. data/lib/hubspot/codegen/crm/{objects/models/simple_public_object.rb → timeline/models/timeline_event_template.rb} +62 -56
  200. data/lib/hubspot/codegen/crm/{objects/models/batch_read_input_simple_public_object_id.rb → timeline/models/timeline_event_template_create_request.rb} +63 -36
  201. data/lib/hubspot/codegen/crm/timeline/models/timeline_event_template_token.rb +328 -0
  202. data/lib/hubspot/codegen/crm/timeline/models/timeline_event_template_token_option.rb +229 -0
  203. data/lib/hubspot/codegen/crm/timeline/models/timeline_event_template_token_update_request.rb +244 -0
  204. data/lib/hubspot/codegen/crm/{objects/models/simple_public_object_batch_input.rb → timeline/models/timeline_event_template_update_request.rb} +57 -19
  205. data/lib/hubspot/codegen/crm/timeline/models/upper_case.rb +280 -0
  206. data/lib/hubspot/codegen/crm/timeline/models/xor.rb +280 -0
  207. data/lib/hubspot/codegen/crm/timeline/models/year.rb +280 -0
  208. data/lib/hubspot/codegen/oauth/api/default_api.rb +270 -0
  209. data/lib/hubspot/codegen/oauth/api_client.rb +3 -4
  210. data/lib/hubspot/codegen/oauth/configuration.rb +3 -3
  211. data/lib/hubspot/codegen/oauth/models/error.rb +14 -25
  212. data/lib/hubspot/codegen/oauth/models/error_detail.rb +26 -6
  213. data/lib/hubspot/codegen/oauth/models/{refresh_token.rb → token_response_if.rb} +33 -47
  214. data/lib/hubspot/codegen/webhooks/api/settings_api.rb +214 -0
  215. data/lib/hubspot/codegen/webhooks/api/subscriptions_api.rb +360 -0
  216. data/lib/hubspot/codegen/webhooks/api_client.rb +420 -0
  217. data/lib/hubspot/codegen/webhooks/api_error.rb +59 -0
  218. data/lib/hubspot/codegen/webhooks/configuration.rb +256 -0
  219. data/lib/hubspot/codegen/webhooks/models/error.rb +290 -0
  220. data/lib/hubspot/codegen/webhooks/models/error_detail.rb +256 -0
  221. data/lib/hubspot/codegen/webhooks/models/settings_change_request.rb +229 -0
  222. data/lib/hubspot/codegen/webhooks/models/settings_response.rb +254 -0
  223. data/lib/hubspot/codegen/webhooks/models/subscription_create_request.rb +268 -0
  224. data/lib/hubspot/codegen/webhooks/models/subscription_list_response.rb +217 -0
  225. data/lib/hubspot/codegen/webhooks/models/subscription_patch_request.rb +210 -0
  226. data/lib/hubspot/codegen/{oauth/models/json_node.rb → webhooks/models/subscription_response.rb} +75 -189
  227. data/lib/hubspot/codegen/webhooks/models/throttling_settings.rb +264 -0
  228. data/lib/hubspot/version.rb +1 -1
  229. data/sample-apps/companies-app/Gemfile.lock +2 -2
  230. data/sample-apps/companies-app/app/lib/services/authorization/tokens/generate.rb +2 -2
  231. data/sample-apps/companies-app/app/lib/services/authorization/tokens/refresh.rb +2 -2
  232. data/sample-apps/companies-app/app/lib/services/hubspot/associations/create.rb +3 -2
  233. data/sample-apps/companies-app/app/lib/services/hubspot/associations/delete.rb +3 -2
  234. data/sample-apps/contacts-app/Gemfile.lock +2 -2
  235. data/sample-apps/contacts-app/app/lib/services/authorization/tokens/generate.rb +2 -2
  236. data/sample-apps/contacts-app/app/lib/services/authorization/tokens/refresh.rb +2 -2
  237. data/sample-apps/contacts-app/app/lib/services/hubspot/contacts/create.rb +1 -1
  238. data/sample-apps/contacts-app/app/lib/services/hubspot/contacts/update.rb +1 -1
  239. data/sample-apps/contacts-app/app/views/contacts/show.html.erb +1 -0
  240. data/sample-apps/leaky-bucket-app/Gemfile.lock +2 -2
  241. data/sample-apps/leaky-bucket-app/app/lib/services/authorization/tokens/generate.rb +2 -2
  242. data/sample-apps/leaky-bucket-app/app/lib/services/authorization/tokens/refresh.rb +2 -2
  243. data/sample-apps/oauth-app/Gemfile.lock +2 -2
  244. data/sample-apps/oauth-app/app/lib/services/authorization/tokens/generate.rb +2 -2
  245. data/sample-apps/oauth-app/app/lib/services/authorization/tokens/refresh.rb +2 -2
  246. data/sample-apps/oauth-app/app/lib/services/hubspot/contacts/create.rb +1 -1
  247. data/sample-apps/oauth-app/app/lib/services/hubspot/contacts/update.rb +1 -1
  248. data/sample-apps/rate-limits-redis-sample-app/app/lib/services/authorization/tokens/generate.rb +2 -2
  249. data/sample-apps/rate-limits-redis-sample-app/app/lib/services/authorization/tokens/refresh.rb +2 -2
  250. data/sample-apps/retry-middleware-sample-app/app/lib/services/authorization/tokens/generate.rb +2 -2
  251. data/sample-apps/retry-middleware-sample-app/app/lib/services/authorization/tokens/refresh.rb +2 -2
  252. metadata +170 -90
  253. data/lib/hubspot/codegen/crm/objects/api/associations_api.rb +0 -254
  254. data/lib/hubspot/codegen/crm/objects/api/basic_api.rb +0 -389
  255. data/lib/hubspot/codegen/crm/objects/api/batch_api.rb +0 -293
  256. data/lib/hubspot/codegen/crm/objects/api/search_api.rb +0 -92
  257. data/lib/hubspot/codegen/crm/objects/models/batch_input_simple_public_object_batch_input.rb +0 -217
  258. data/lib/hubspot/codegen/crm/objects/models/collection_response_simple_public_object.rb +0 -226
  259. data/lib/hubspot/codegen/crm/objects/models/collection_response_simple_public_object_id.rb +0 -226
  260. data/lib/hubspot/codegen/crm/objects/models/collection_response_with_total_simple_public_object.rb +0 -241
  261. data/lib/hubspot/codegen/crm/objects/models/filter_group.rb +0 -217
  262. data/lib/hubspot/codegen/crm/objects/models/next_page.rb +0 -224
  263. data/lib/hubspot/codegen/crm/objects/models/paging.rb +0 -210
  264. data/lib/hubspot/codegen/crm/objects/models/simple_public_object_input.rb +0 -217
  265. data/lib/hubspot/codegen/oauth/api/access_tokens_api.rb +0 -84
  266. data/lib/hubspot/codegen/oauth/api/refresh_tokens_api.rb +0 -336
  267. data/lib/hubspot/codegen/oauth/api/tokens_api.rb +0 -98
  268. data/spec/objects/api/associations_api_spec.rb +0 -76
  269. data/spec/objects/api/basic_api_spec.rb +0 -108
  270. data/spec/objects/api/batch_api_spec.rb +0 -88
  271. data/spec/objects/api/search_api_spec.rb +0 -48
  272. data/spec/objects/api_client_spec.rb +0 -226
  273. data/spec/objects/configuration_spec.rb +0 -42
  274. data/spec/objects/models/batch_input_simple_public_object_batch_input_spec.rb +0 -41
  275. data/spec/objects/models/batch_input_simple_public_object_id_spec.rb +0 -41
  276. data/spec/objects/models/batch_input_simple_public_object_input_spec.rb +0 -41
  277. data/spec/objects/models/batch_read_input_simple_public_object_id_spec.rb +0 -47
  278. data/spec/objects/models/batch_response_simple_public_object_spec.rb +0 -81
  279. data/spec/objects/models/collection_response_simple_public_object_id_spec.rb +0 -47
  280. data/spec/objects/models/collection_response_simple_public_object_spec.rb +0 -47
  281. data/spec/objects/models/collection_response_with_total_simple_public_object_spec.rb +0 -53
  282. data/spec/objects/models/error_detail_spec.rb +0 -65
  283. data/spec/objects/models/error_spec.rb +0 -71
  284. data/spec/objects/models/filter_group_spec.rb +0 -41
  285. data/spec/objects/models/filter_spec.rb +0 -57
  286. data/spec/objects/models/next_page_spec.rb +0 -47
  287. data/spec/objects/models/paging_spec.rb +0 -41
  288. data/spec/objects/models/public_object_search_request_spec.rb +0 -71
  289. data/spec/objects/models/simple_public_object_batch_input_spec.rb +0 -47
  290. data/spec/objects/models/simple_public_object_id_spec.rb +0 -41
  291. data/spec/objects/models/simple_public_object_input_spec.rb +0 -41
  292. data/spec/objects/models/simple_public_object_spec.rb +0 -77
@@ -0,0 +1,360 @@
1
+ =begin
2
+ #Webhooks API
3
+
4
+ #Provides a way for apps to subscribe to certain change events in HubSpot. Once configured, apps will receive event payloads containing details about the changes at a specified target URL. There can only be one target URL for receiving event notifications per app.
5
+
6
+ The version of the OpenAPI document: v3
7
+
8
+ Generated by: https://openapi-generator.tech
9
+ OpenAPI Generator version: 4.2.3
10
+
11
+ =end
12
+
13
+ require 'cgi'
14
+
15
+ module Hubspot
16
+ module Webhooks
17
+ class SubscriptionsApi
18
+ attr_accessor :api_client
19
+
20
+ def initialize(api_client = ApiClient.default)
21
+ @api_client = api_client
22
+ end
23
+ # Delete a subscription
24
+ # Permanently deletes a subscription. This cannot be undone.
25
+ # @param subscription_id [Integer] The ID of subscription to delete.
26
+ # @param app_id [Integer] The ID of the target app.
27
+ # @param [Hash] opts the optional parameters
28
+ # @return [nil]
29
+ def delete_subscription(subscription_id, app_id, opts = {})
30
+ delete_subscription_with_http_info(subscription_id, app_id, opts)
31
+ nil
32
+ end
33
+
34
+ # Delete a subscription
35
+ # Permanently deletes a subscription. This cannot be undone.
36
+ # @param subscription_id [Integer] The ID of subscription to delete.
37
+ # @param app_id [Integer] The ID of the target app.
38
+ # @param [Hash] opts the optional parameters
39
+ # @return [Array<(nil, Integer, Hash)>] nil, response status code and response headers
40
+ def delete_subscription_with_http_info(subscription_id, app_id, opts = {})
41
+ if @api_client.config.debugging
42
+ @api_client.config.logger.debug 'Calling API: SubscriptionsApi.delete_subscription ...'
43
+ end
44
+ # verify the required parameter 'subscription_id' is set
45
+ if @api_client.config.client_side_validation && subscription_id.nil?
46
+ fail ArgumentError, "Missing the required parameter 'subscription_id' when calling SubscriptionsApi.delete_subscription"
47
+ end
48
+ # verify the required parameter 'app_id' is set
49
+ if @api_client.config.client_side_validation && app_id.nil?
50
+ fail ArgumentError, "Missing the required parameter 'app_id' when calling SubscriptionsApi.delete_subscription"
51
+ end
52
+ # resource path
53
+ local_var_path = '/webhooks/v3/{appId}/subscriptions/{subscriptionId}'.sub('{' + 'subscriptionId' + '}', CGI.escape(subscription_id.to_s)).sub('{' + 'appId' + '}', CGI.escape(app_id.to_s))
54
+
55
+ # query parameters
56
+ query_params = opts[:query_params] || {}
57
+
58
+ # header parameters
59
+ header_params = opts[:header_params] || {}
60
+ # HTTP header 'Accept' (if needed)
61
+ header_params['Accept'] = @api_client.select_header_accept(['*/*'])
62
+
63
+ # form parameters
64
+ form_params = opts[:form_params] || {}
65
+
66
+ # http body (model)
67
+ post_body = opts[:body]
68
+
69
+ # return_type
70
+ return_type = opts[:return_type]
71
+
72
+ # auth_names
73
+ auth_names = opts[:auth_names] || ['hapikey']
74
+
75
+ new_options = opts.merge(
76
+ :header_params => header_params,
77
+ :query_params => query_params,
78
+ :form_params => form_params,
79
+ :body => post_body,
80
+ :auth_names => auth_names,
81
+ :return_type => return_type
82
+ )
83
+
84
+ data, status_code, headers = @api_client.call_api(:DELETE, local_var_path, new_options)
85
+ if @api_client.config.debugging
86
+ @api_client.config.logger.debug "API called: SubscriptionsApi#delete_subscription\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
87
+ end
88
+ return data, status_code, headers
89
+ end
90
+
91
+ # Get subscription
92
+ # Returns details about a subscription.
93
+ # @param app_id [Integer] The ID of the target app.
94
+ # @param subscription_id [Integer] The ID of the target subscription.
95
+ # @param [Hash] opts the optional parameters
96
+ # @return [SubscriptionResponse]
97
+ def get_subscription(app_id, subscription_id, opts = {})
98
+ data, _status_code, _headers = get_subscription_with_http_info(app_id, subscription_id, opts)
99
+ data
100
+ end
101
+
102
+ # Get subscription
103
+ # Returns details about a subscription.
104
+ # @param app_id [Integer] The ID of the target app.
105
+ # @param subscription_id [Integer] The ID of the target subscription.
106
+ # @param [Hash] opts the optional parameters
107
+ # @return [Array<(SubscriptionResponse, Integer, Hash)>] SubscriptionResponse data, response status code and response headers
108
+ def get_subscription_with_http_info(app_id, subscription_id, opts = {})
109
+ if @api_client.config.debugging
110
+ @api_client.config.logger.debug 'Calling API: SubscriptionsApi.get_subscription ...'
111
+ end
112
+ # verify the required parameter 'app_id' is set
113
+ if @api_client.config.client_side_validation && app_id.nil?
114
+ fail ArgumentError, "Missing the required parameter 'app_id' when calling SubscriptionsApi.get_subscription"
115
+ end
116
+ # verify the required parameter 'subscription_id' is set
117
+ if @api_client.config.client_side_validation && subscription_id.nil?
118
+ fail ArgumentError, "Missing the required parameter 'subscription_id' when calling SubscriptionsApi.get_subscription"
119
+ end
120
+ # resource path
121
+ local_var_path = '/webhooks/v3/{appId}/subscriptions/{subscriptionId}'.sub('{' + 'appId' + '}', CGI.escape(app_id.to_s)).sub('{' + 'subscriptionId' + '}', CGI.escape(subscription_id.to_s))
122
+
123
+ # query parameters
124
+ query_params = opts[:query_params] || {}
125
+
126
+ # header parameters
127
+ header_params = opts[:header_params] || {}
128
+ # HTTP header 'Accept' (if needed)
129
+ header_params['Accept'] = @api_client.select_header_accept(['application/json', '*/*'])
130
+
131
+ # form parameters
132
+ form_params = opts[:form_params] || {}
133
+
134
+ # http body (model)
135
+ post_body = opts[:body]
136
+
137
+ # return_type
138
+ return_type = opts[:return_type] || 'SubscriptionResponse'
139
+
140
+ # auth_names
141
+ auth_names = opts[:auth_names] || ['hapikey']
142
+
143
+ new_options = opts.merge(
144
+ :header_params => header_params,
145
+ :query_params => query_params,
146
+ :form_params => form_params,
147
+ :body => post_body,
148
+ :auth_names => auth_names,
149
+ :return_type => return_type
150
+ )
151
+
152
+ data, status_code, headers = @api_client.call_api(:GET, local_var_path, new_options)
153
+ if @api_client.config.debugging
154
+ @api_client.config.logger.debug "API called: SubscriptionsApi#get_subscription\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
155
+ end
156
+ return data, status_code, headers
157
+ end
158
+
159
+ # Get subscription details
160
+ # Returns full details for all existing subscriptions for the given app.
161
+ # @param app_id [Integer] The ID of the target app.
162
+ # @param [Hash] opts the optional parameters
163
+ # @return [SubscriptionListResponse]
164
+ def get_subscriptions(app_id, opts = {})
165
+ data, _status_code, _headers = get_subscriptions_with_http_info(app_id, opts)
166
+ data
167
+ end
168
+
169
+ # Get subscription details
170
+ # Returns full details for all existing subscriptions for the given app.
171
+ # @param app_id [Integer] The ID of the target app.
172
+ # @param [Hash] opts the optional parameters
173
+ # @return [Array<(SubscriptionListResponse, Integer, Hash)>] SubscriptionListResponse data, response status code and response headers
174
+ def get_subscriptions_with_http_info(app_id, opts = {})
175
+ if @api_client.config.debugging
176
+ @api_client.config.logger.debug 'Calling API: SubscriptionsApi.get_subscriptions ...'
177
+ end
178
+ # verify the required parameter 'app_id' is set
179
+ if @api_client.config.client_side_validation && app_id.nil?
180
+ fail ArgumentError, "Missing the required parameter 'app_id' when calling SubscriptionsApi.get_subscriptions"
181
+ end
182
+ # resource path
183
+ local_var_path = '/webhooks/v3/{appId}/subscriptions'.sub('{' + 'appId' + '}', CGI.escape(app_id.to_s))
184
+
185
+ # query parameters
186
+ query_params = opts[:query_params] || {}
187
+
188
+ # header parameters
189
+ header_params = opts[:header_params] || {}
190
+ # HTTP header 'Accept' (if needed)
191
+ header_params['Accept'] = @api_client.select_header_accept(['application/json', '*/*'])
192
+
193
+ # form parameters
194
+ form_params = opts[:form_params] || {}
195
+
196
+ # http body (model)
197
+ post_body = opts[:body]
198
+
199
+ # return_type
200
+ return_type = opts[:return_type] || 'SubscriptionListResponse'
201
+
202
+ # auth_names
203
+ auth_names = opts[:auth_names] || ['hapikey']
204
+
205
+ new_options = opts.merge(
206
+ :header_params => header_params,
207
+ :query_params => query_params,
208
+ :form_params => form_params,
209
+ :body => post_body,
210
+ :auth_names => auth_names,
211
+ :return_type => return_type
212
+ )
213
+
214
+ data, status_code, headers = @api_client.call_api(:GET, local_var_path, new_options)
215
+ if @api_client.config.debugging
216
+ @api_client.config.logger.debug "API called: SubscriptionsApi#get_subscriptions\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
217
+ end
218
+ return data, status_code, headers
219
+ end
220
+
221
+ # Subscribe to an event
222
+ # Creates a new webhook subscription for the given app. Each subscription in an app must be unique.
223
+ # @param app_id [Integer] The ID of the target app.
224
+ # @param [Hash] opts the optional parameters
225
+ # @option opts [SubscriptionCreateRequest] :subscription_create_request Details about the new subscription.
226
+ # @return [SubscriptionResponse]
227
+ def subscribe(app_id, opts = {})
228
+ data, _status_code, _headers = subscribe_with_http_info(app_id, opts)
229
+ data
230
+ end
231
+
232
+ # Subscribe to an event
233
+ # Creates a new webhook subscription for the given app. Each subscription in an app must be unique.
234
+ # @param app_id [Integer] The ID of the target app.
235
+ # @param [Hash] opts the optional parameters
236
+ # @option opts [SubscriptionCreateRequest] :subscription_create_request Details about the new subscription.
237
+ # @return [Array<(SubscriptionResponse, Integer, Hash)>] SubscriptionResponse data, response status code and response headers
238
+ def subscribe_with_http_info(app_id, opts = {})
239
+ if @api_client.config.debugging
240
+ @api_client.config.logger.debug 'Calling API: SubscriptionsApi.subscribe ...'
241
+ end
242
+ # verify the required parameter 'app_id' is set
243
+ if @api_client.config.client_side_validation && app_id.nil?
244
+ fail ArgumentError, "Missing the required parameter 'app_id' when calling SubscriptionsApi.subscribe"
245
+ end
246
+ # resource path
247
+ local_var_path = '/webhooks/v3/{appId}/subscriptions'.sub('{' + 'appId' + '}', CGI.escape(app_id.to_s))
248
+
249
+ # query parameters
250
+ query_params = opts[:query_params] || {}
251
+
252
+ # header parameters
253
+ header_params = opts[:header_params] || {}
254
+ # HTTP header 'Accept' (if needed)
255
+ header_params['Accept'] = @api_client.select_header_accept(['application/json', '*/*'])
256
+ # HTTP header 'Content-Type'
257
+ header_params['Content-Type'] = @api_client.select_header_content_type(['application/json'])
258
+
259
+ # form parameters
260
+ form_params = opts[:form_params] || {}
261
+
262
+ # http body (model)
263
+ post_body = opts[:body] || @api_client.object_to_http_body(opts[:'subscription_create_request'])
264
+
265
+ # return_type
266
+ return_type = opts[:return_type] || 'SubscriptionResponse'
267
+
268
+ # auth_names
269
+ auth_names = opts[:auth_names] || ['hapikey']
270
+
271
+ new_options = opts.merge(
272
+ :header_params => header_params,
273
+ :query_params => query_params,
274
+ :form_params => form_params,
275
+ :body => post_body,
276
+ :auth_names => auth_names,
277
+ :return_type => return_type
278
+ )
279
+
280
+ data, status_code, headers = @api_client.call_api(:POST, local_var_path, new_options)
281
+ if @api_client.config.debugging
282
+ @api_client.config.logger.debug "API called: SubscriptionsApi#subscribe\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
283
+ end
284
+ return data, status_code, headers
285
+ end
286
+
287
+ # Update a subscription
288
+ # Updates the details for an existing subscription.
289
+ # @param subscription_id [Integer] The ID of the subscription to update.
290
+ # @param app_id [Integer] The ID of the target app.
291
+ # @param [Hash] opts the optional parameters
292
+ # @option opts [SubscriptionPatchRequest] :subscription_patch_request Updated details for the subscription.
293
+ # @return [SubscriptionResponse]
294
+ def update_subscription(subscription_id, app_id, opts = {})
295
+ data, _status_code, _headers = update_subscription_with_http_info(subscription_id, app_id, opts)
296
+ data
297
+ end
298
+
299
+ # Update a subscription
300
+ # Updates the details for an existing subscription.
301
+ # @param subscription_id [Integer] The ID of the subscription to update.
302
+ # @param app_id [Integer] The ID of the target app.
303
+ # @param [Hash] opts the optional parameters
304
+ # @option opts [SubscriptionPatchRequest] :subscription_patch_request Updated details for the subscription.
305
+ # @return [Array<(SubscriptionResponse, Integer, Hash)>] SubscriptionResponse data, response status code and response headers
306
+ def update_subscription_with_http_info(subscription_id, app_id, opts = {})
307
+ if @api_client.config.debugging
308
+ @api_client.config.logger.debug 'Calling API: SubscriptionsApi.update_subscription ...'
309
+ end
310
+ # verify the required parameter 'subscription_id' is set
311
+ if @api_client.config.client_side_validation && subscription_id.nil?
312
+ fail ArgumentError, "Missing the required parameter 'subscription_id' when calling SubscriptionsApi.update_subscription"
313
+ end
314
+ # verify the required parameter 'app_id' is set
315
+ if @api_client.config.client_side_validation && app_id.nil?
316
+ fail ArgumentError, "Missing the required parameter 'app_id' when calling SubscriptionsApi.update_subscription"
317
+ end
318
+ # resource path
319
+ local_var_path = '/webhooks/v3/{appId}/subscriptions/{subscriptionId}'.sub('{' + 'subscriptionId' + '}', CGI.escape(subscription_id.to_s)).sub('{' + 'appId' + '}', CGI.escape(app_id.to_s))
320
+
321
+ # query parameters
322
+ query_params = opts[:query_params] || {}
323
+
324
+ # header parameters
325
+ header_params = opts[:header_params] || {}
326
+ # HTTP header 'Accept' (if needed)
327
+ header_params['Accept'] = @api_client.select_header_accept(['application/json', '*/*'])
328
+ # HTTP header 'Content-Type'
329
+ header_params['Content-Type'] = @api_client.select_header_content_type(['application/json'])
330
+
331
+ # form parameters
332
+ form_params = opts[:form_params] || {}
333
+
334
+ # http body (model)
335
+ post_body = opts[:body] || @api_client.object_to_http_body(opts[:'subscription_patch_request'])
336
+
337
+ # return_type
338
+ return_type = opts[:return_type] || 'SubscriptionResponse'
339
+
340
+ # auth_names
341
+ auth_names = opts[:auth_names] || ['hapikey']
342
+
343
+ new_options = opts.merge(
344
+ :header_params => header_params,
345
+ :query_params => query_params,
346
+ :form_params => form_params,
347
+ :body => post_body,
348
+ :auth_names => auth_names,
349
+ :return_type => return_type
350
+ )
351
+
352
+ data, status_code, headers = @api_client.call_api(:PATCH, local_var_path, new_options)
353
+ if @api_client.config.debugging
354
+ @api_client.config.logger.debug "API called: SubscriptionsApi#update_subscription\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
355
+ end
356
+ return data, status_code, headers
357
+ end
358
+ end
359
+ end
360
+ end
@@ -0,0 +1,420 @@
1
+ =begin
2
+ #Webhooks API
3
+
4
+ #Provides a way for apps to subscribe to certain change events in HubSpot. Once configured, apps will receive event payloads containing details about the changes at a specified target URL. There can only be one target URL for receiving event notifications per app.
5
+
6
+ The version of the OpenAPI document: v3
7
+
8
+ Generated by: https://openapi-generator.tech
9
+ OpenAPI Generator version: 4.2.3
10
+
11
+ =end
12
+
13
+ require 'date'
14
+ require 'json'
15
+ require 'logger'
16
+ require 'tempfile'
17
+ require 'faraday'
18
+
19
+ module Hubspot
20
+ module Webhooks
21
+ class ApiClient
22
+ # The Configuration object holding settings to be used in the API client.
23
+ attr_accessor :config
24
+
25
+ # Defines the headers to be used in HTTP requests of all API calls by default.
26
+ #
27
+ # @return [Hash]
28
+ attr_accessor :default_headers
29
+
30
+ # Initializes the ApiClient
31
+ # @option config [Configuration] Configuration for initializing the object, default to Configuration.default
32
+ def initialize(config = Configuration.default)
33
+ @config = config
34
+ @user_agent = "hubspot-api-client-ruby; #{VERSION}"
35
+ @default_headers = {
36
+ 'Content-Type' => 'application/json',
37
+ 'User-Agent' => @user_agent
38
+ }
39
+ end
40
+
41
+ def self.default
42
+ @@default ||= ApiClient.new
43
+ end
44
+
45
+ # Call an API with given options.
46
+ #
47
+ # @return [Array<(Object, Integer, Hash)>] an array of 3 elements:
48
+ # the data deserialized from response body (could be nil), response status code and response headers.
49
+ def call_api(http_method, path, opts = {})
50
+ ssl_options = {
51
+ :ca_file => @config.ssl_ca_file,
52
+ :verify => @config.ssl_verify,
53
+ :verify_mode => @config.ssl_verify_mode,
54
+ :client_cert => @config.ssl_client_cert,
55
+ :client_key => @config.ssl_client_key
56
+ }
57
+
58
+ connection = Faraday.new(:url => config.base_url, :ssl => ssl_options) do |conn|
59
+ conn.basic_auth(config.username, config.password)
60
+ if opts[:header_params]["Content-Type"] == "multipart/form-data"
61
+ conn.request :multipart
62
+ conn.request :url_encoded
63
+ end
64
+ conn.adapter(Faraday.default_adapter)
65
+ conn.options[:params_encoder] = Faraday::FlatParamsEncoder
66
+
67
+ # Errors handler settings
68
+ if !config.error_handler.empty?
69
+ config.error_handler.each do |statuses, opts|
70
+ statuses = statuses.is_a?(Integer) ? [statuses] : statuses
71
+ retry_options = {
72
+ max: opts[:max_retries],
73
+ interval: opts[:seconds_delay],
74
+ retry_statuses: statuses,
75
+ methods: %i[post delete get head options put],
76
+ retry_block: -> (env, options, retries, exc) { opts[:retry_block].call }
77
+ }
78
+ conn.request :retry, retry_options
79
+ end
80
+ end
81
+ end
82
+
83
+ begin
84
+ response = connection.public_send(http_method.to_sym.downcase) do |req|
85
+ build_request(http_method, path, req, opts)
86
+ end
87
+
88
+ if @config.debugging
89
+ @config.logger.debug "HTTP response body ~BEGIN~\n#{response.body}\n~END~\n"
90
+ end
91
+
92
+ unless response.success?
93
+ if response.status == 0
94
+ # Errors from libcurl will be made visible here
95
+ fail ApiError.new(:code => 0,
96
+ :message => response.return_message)
97
+ else
98
+ fail ApiError.new(:code => response.status,
99
+ :response_headers => response.headers,
100
+ :response_body => response.body),
101
+ response.reason_phrase
102
+ end
103
+ end
104
+ rescue Faraday::TimeoutError
105
+ fail ApiError.new('Connection timed out')
106
+ end
107
+
108
+ if opts[:return_type]
109
+ data = deserialize(response, opts[:return_type])
110
+ else
111
+ data = nil
112
+ end
113
+ return data, response.status, response.headers
114
+ end
115
+
116
+ # Builds the HTTP request
117
+ #
118
+ # @param [String] http_method HTTP method/verb (e.g. POST)
119
+ # @param [String] path URL path (e.g. /account/new)
120
+ # @option opts [Hash] :header_params Header parameters
121
+ # @option opts [Hash] :query_params Query parameters
122
+ # @option opts [Hash] :form_params Query parameters
123
+ # @option opts [Object] :body HTTP body (JSON/XML)
124
+ # @return [Typhoeus::Request] A Typhoeus Request
125
+ def build_request(http_method, path, request, opts = {})
126
+ url = build_request_url(path)
127
+ http_method = http_method.to_sym.downcase
128
+
129
+ header_params = @default_headers.merge(opts[:header_params] || {})
130
+ query_params = opts[:query_params] || {}
131
+ form_params = opts[:form_params] || {}
132
+
133
+ update_params_for_auth! header_params, query_params, opts[:auth_names]
134
+
135
+ req_opts = {
136
+ :method => http_method,
137
+ :headers => header_params,
138
+ :params => query_params,
139
+ :params_encoding => @config.params_encoding,
140
+ :timeout => @config.timeout,
141
+ :verbose => @config.debugging
142
+ }
143
+
144
+ if [:post, :patch, :put, :delete].include?(http_method)
145
+ req_body = build_request_body(header_params, form_params, opts[:body])
146
+ req_opts.update :body => req_body
147
+ if @config.debugging
148
+ @config.logger.debug "HTTP request body param ~BEGIN~\n#{req_body}\n~END~\n"
149
+ end
150
+ end
151
+ request.headers = header_params
152
+ request.body = req_body
153
+ request.url url
154
+ request.params = query_params
155
+ download_file(request) if opts[:return_type] == 'File'
156
+ request
157
+ end
158
+
159
+ # Builds the HTTP request body
160
+ #
161
+ # @param [Hash] header_params Header parameters
162
+ # @param [Hash] form_params Query parameters
163
+ # @param [Object] body HTTP body (JSON/XML)
164
+ # @return [String] HTTP body data in the form of string
165
+ def build_request_body(header_params, form_params, body)
166
+ # http form
167
+ if header_params['Content-Type'] == 'application/x-www-form-urlencoded'
168
+ data = URI.encode_www_form(form_params)
169
+ elsif header_params['Content-Type'] == 'multipart/form-data'
170
+ data = {}
171
+ form_params.each do |key, value|
172
+ case value
173
+ when ::File, ::Tempfile
174
+ # TODO hardcode to application/octet-stream, need better way to detect content type
175
+ data[key] = Faraday::UploadIO.new(value.path, 'application/octet-stream', value.path)
176
+ when ::Array, nil
177
+ # let Faraday handle Array and nil parameters
178
+ data[key] = value
179
+ else
180
+ data[key] = value.to_s
181
+ end
182
+ end
183
+ elsif body
184
+ data = body.is_a?(String) ? body : body.to_json
185
+ else
186
+ data = nil
187
+ end
188
+ data
189
+ end
190
+
191
+ # Check if the given MIME is a JSON MIME.
192
+ # JSON MIME examples:
193
+ # application/json
194
+ # application/json; charset=UTF8
195
+ # APPLICATION/JSON
196
+ # */*
197
+ # @param [String] mime MIME
198
+ # @return [Boolean] True if the MIME is application/json
199
+ def json_mime?(mime)
200
+ (mime == '*/*') || !(mime =~ /Application\/.*json(?!p)(;.*)?/i).nil?
201
+ end
202
+
203
+ # Deserialize the response to the given return type.
204
+ #
205
+ # @param [Response] response HTTP response
206
+ # @param [String] return_type some examples: "User", "Array<User>", "Hash<String, Integer>"
207
+ def deserialize(response, return_type)
208
+ body = response.body
209
+
210
+ # handle file downloading - return the File instance processed in request callbacks
211
+ # note that response body is empty when the file is written in chunks in request on_body callback
212
+ return @tempfile if return_type == 'File'
213
+
214
+ return nil if body.nil? || body.empty?
215
+
216
+ # return response body directly for String return type
217
+ return body if return_type == 'String'
218
+
219
+ # ensuring a default content type
220
+ content_type = response.headers['Content-Type'] || 'application/json'
221
+
222
+ fail "Content-Type is not supported: #{content_type}" unless json_mime?(content_type)
223
+
224
+ begin
225
+ data = JSON.parse("[#{body}]", :symbolize_names => true)[0]
226
+ rescue JSON::ParserError => e
227
+ if %w(String Date DateTime).include?(return_type)
228
+ data = body
229
+ else
230
+ raise e
231
+ end
232
+ end
233
+
234
+ convert_to_type data, return_type
235
+ end
236
+
237
+ # Convert data to the given return type.
238
+ # @param [Object] data Data to be converted
239
+ # @param [String] return_type Return type
240
+ # @return [Mixed] Data in a particular type
241
+ def convert_to_type(data, return_type)
242
+ return nil if data.nil?
243
+ case return_type
244
+ when 'String'
245
+ data.to_s
246
+ when 'Integer'
247
+ data.to_i
248
+ when 'Float'
249
+ data.to_f
250
+ when 'Boolean'
251
+ data == true
252
+ when 'DateTime'
253
+ # parse date time (expecting ISO 8601 format)
254
+ DateTime.parse data
255
+ when 'Date'
256
+ # parse date time (expecting ISO 8601 format)
257
+ Date.parse data
258
+ when 'Object'
259
+ # generic object (usually a Hash), return directly
260
+ data
261
+ when /\AArray<(.+)>\z/
262
+ # e.g. Array<Pet>
263
+ sub_type = $1
264
+ data.map { |item| convert_to_type(item, sub_type) }
265
+ when /\AHash\<String, (.+)\>\z/
266
+ # e.g. Hash<String, Integer>
267
+ sub_type = $1
268
+ {}.tap do |hash|
269
+ data.each { |k, v| hash[k] = convert_to_type(v, sub_type) }
270
+ end
271
+ else
272
+ # models, e.g. Pet
273
+ Hubspot::Webhooks.const_get(return_type).build_from_hash(data)
274
+ end
275
+ end
276
+
277
+ # Save response body into a file in (the defined) temporary folder, using the filename
278
+ # from the "Content-Disposition" header if provided, otherwise a random filename.
279
+ # The response body is written to the file in chunks in order to handle files which
280
+ # size is larger than maximum Ruby String or even larger than the maximum memory a Ruby
281
+ # process can use.
282
+ #
283
+ # @see Configuration#temp_folder_path
284
+ def download_file(request)
285
+ tempfile = nil
286
+ encoding = nil
287
+ request.on_headers do |response|
288
+ content_disposition = response.headers['Content-Disposition']
289
+ if content_disposition && content_disposition =~ /filename=/i
290
+ filename = content_disposition[/filename=['"]?([^'"\s]+)['"]?/, 1]
291
+ prefix = sanitize_filename(filename)
292
+ else
293
+ prefix = 'download-'
294
+ end
295
+ prefix = prefix + '-' unless prefix.end_with?('-')
296
+ encoding = response.body.encoding
297
+ tempfile = Tempfile.open(prefix, @config.temp_folder_path, encoding: encoding)
298
+ @tempfile = tempfile
299
+ end
300
+ request.on_body do |chunk|
301
+ chunk.force_encoding(encoding)
302
+ tempfile.write(chunk)
303
+ end
304
+ request.on_complete do |response|
305
+ tempfile.close if tempfile
306
+ @config.logger.info "Temp file written to #{tempfile.path}, please copy the file to a proper folder "\
307
+ "with e.g. `FileUtils.cp(tempfile.path, '/new/file/path')` otherwise the temp file "\
308
+ "will be deleted automatically with GC. It's also recommended to delete the temp file "\
309
+ "explicitly with `tempfile.delete`"
310
+ end
311
+ end
312
+
313
+ # Sanitize filename by removing path.
314
+ # e.g. ../../sun.gif becomes sun.gif
315
+ #
316
+ # @param [String] filename the filename to be sanitized
317
+ # @return [String] the sanitized filename
318
+ def sanitize_filename(filename)
319
+ filename.gsub(/.*[\/\\]/, '')
320
+ end
321
+
322
+ def build_request_url(path)
323
+ # Add leading and trailing slashes to path
324
+ path = "/#{path}".gsub(/\/+/, '/')
325
+ @config.base_url + path
326
+ end
327
+
328
+ # Update hearder and query params based on authentication settings.
329
+ #
330
+ # @param [Hash] header_params Header parameters
331
+ # @param [Hash] query_params Query parameters
332
+ # @param [String] auth_names Authentication scheme name
333
+ def update_params_for_auth!(header_params, query_params, auth_names)
334
+ Array(auth_names).each do |auth_name|
335
+ auth_setting = @config.auth_settings[auth_name]
336
+ next unless auth_setting
337
+ case auth_setting[:in]
338
+ when 'header' then header_params[auth_setting[:key]] = auth_setting[:value]
339
+ when 'query' then query_params[auth_setting[:key]] = auth_setting[:value]
340
+ else fail ArgumentError, 'Authentication token must be in `query` of `header`'
341
+ end
342
+ end
343
+ end
344
+
345
+ # Sets user agent in HTTP header
346
+ #
347
+ # @param [String] user_agent User agent (e.g. openapi-generator/ruby/1.0.0)
348
+ def user_agent=(user_agent)
349
+ @user_agent = user_agent
350
+ @default_headers['User-Agent'] = @user_agent
351
+ end
352
+
353
+ # Return Accept header based on an array of accepts provided.
354
+ # @param [Array] accepts array for Accept
355
+ # @return [String] the Accept header (e.g. application/json)
356
+ def select_header_accept(accepts)
357
+ return nil if accepts.nil? || accepts.empty?
358
+ # use JSON when present, otherwise use all of the provided
359
+ json_accept = accepts.find { |s| json_mime?(s) }
360
+ json_accept || accepts.join(',')
361
+ end
362
+
363
+ # Return Content-Type header based on an array of content types provided.
364
+ # @param [Array] content_types array for Content-Type
365
+ # @return [String] the Content-Type header (e.g. application/json)
366
+ def select_header_content_type(content_types)
367
+ # use application/json by default
368
+ return 'application/json' if content_types.nil? || content_types.empty?
369
+ # use JSON when present, otherwise use the first one
370
+ json_content_type = content_types.find { |s| json_mime?(s) }
371
+ json_content_type || content_types.first
372
+ end
373
+
374
+ # Convert object (array, hash, object, etc) to JSON string.
375
+ # @param [Object] model object to be converted into JSON string
376
+ # @return [String] JSON string representation of the object
377
+ def object_to_http_body(model)
378
+ return model if model.nil? || model.is_a?(String)
379
+ local_body = nil
380
+ if model.is_a?(Array)
381
+ local_body = model.map { |m| object_to_hash(m) }
382
+ else
383
+ local_body = object_to_hash(model)
384
+ end
385
+ local_body.to_json
386
+ end
387
+
388
+ # Convert object(non-array) to hash.
389
+ # @param [Object] obj object to be converted into JSON string
390
+ # @return [String] JSON string representation of the object
391
+ def object_to_hash(obj)
392
+ if obj.respond_to?(:to_hash)
393
+ obj.to_hash
394
+ else
395
+ obj
396
+ end
397
+ end
398
+
399
+ # Build parameter value according to the given collection format.
400
+ # @param [String] collection_format one of :csv, :ssv, :tsv, :pipes and :multi
401
+ def build_collection_param(param, collection_format)
402
+ case collection_format
403
+ when :csv
404
+ param.join(',')
405
+ when :ssv
406
+ param.join(' ')
407
+ when :tsv
408
+ param.join("\t")
409
+ when :pipes
410
+ param.join('|')
411
+ when :multi
412
+ # return the array directly as typhoeus will handle it as expected
413
+ param
414
+ else
415
+ fail "unknown collection format: #{collection_format.inspect}"
416
+ end
417
+ end
418
+ end
419
+ end
420
+ end