hubspot-api-client 3.1.1 → 6.0.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 (330) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +28 -0
  3. data/lib/hubspot-api-client.rb +73 -1
  4. data/lib/hubspot/codegen/cms/audit-logs/api/default_api.rb +106 -0
  5. data/lib/hubspot/codegen/cms/audit-logs/api_client.rb +422 -0
  6. data/lib/hubspot/codegen/cms/audit-logs/api_error.rb +61 -0
  7. data/lib/hubspot/codegen/cms/audit-logs/configuration.rb +265 -0
  8. data/lib/hubspot/codegen/cms/audit-logs/models/collection_response_public_audit_log.rb +226 -0
  9. data/lib/hubspot/codegen/cms/audit-logs/models/error.rb +292 -0
  10. data/lib/hubspot/codegen/cms/audit-logs/models/error_detail.rb +258 -0
  11. data/lib/hubspot/codegen/cms/audit-logs/models/next_page.rb +224 -0
  12. data/lib/hubspot/codegen/cms/audit-logs/models/paging.rb +210 -0
  13. data/lib/hubspot/codegen/cms/audit-logs/models/public_audit_log.rb +352 -0
  14. data/lib/hubspot/codegen/cms/domains/api/domains_api.rb +183 -0
  15. data/lib/hubspot/codegen/cms/domains/api_client.rb +422 -0
  16. data/lib/hubspot/codegen/cms/domains/api_error.rb +61 -0
  17. data/lib/hubspot/codegen/cms/domains/configuration.rb +265 -0
  18. data/lib/hubspot/codegen/cms/domains/models/collection_response_with_total_domain.rb +240 -0
  19. data/lib/hubspot/codegen/cms/domains/models/domain.rb +1091 -0
  20. data/lib/hubspot/codegen/cms/domains/models/domain_cdn_config.rb +497 -0
  21. data/lib/hubspot/codegen/cms/domains/models/domain_setup_info.rb +231 -0
  22. data/lib/hubspot/codegen/cms/domains/models/error.rb +292 -0
  23. data/lib/hubspot/codegen/cms/domains/models/error_detail.rb +258 -0
  24. data/lib/hubspot/codegen/cms/domains/models/next_page.rb +224 -0
  25. data/lib/hubspot/codegen/cms/domains/models/paging.rb +210 -0
  26. data/lib/hubspot/codegen/cms/performance/api/default_api.rb +186 -0
  27. data/lib/hubspot/codegen/cms/performance/api_client.rb +422 -0
  28. data/lib/hubspot/codegen/cms/performance/api_error.rb +61 -0
  29. data/lib/hubspot/codegen/cms/performance/configuration.rb +265 -0
  30. data/lib/hubspot/codegen/cms/performance/models/error.rb +292 -0
  31. data/lib/hubspot/codegen/cms/performance/models/error_detail.rb +258 -0
  32. data/lib/hubspot/codegen/cms/performance/models/performance_view.rb +528 -0
  33. data/lib/hubspot/codegen/cms/performance/models/public_performance_response.rb +332 -0
  34. data/lib/hubspot/codegen/cms/site-search/api/default_api.rb +225 -0
  35. data/lib/hubspot/codegen/cms/site-search/api_client.rb +422 -0
  36. data/lib/hubspot/codegen/cms/site-search/api_error.rb +61 -0
  37. data/lib/hubspot/codegen/cms/site-search/configuration.rb +265 -0
  38. data/lib/hubspot/codegen/cms/site-search/models/content_search_result.rb +427 -0
  39. data/lib/hubspot/codegen/cms/site-search/models/error.rb +292 -0
  40. data/lib/hubspot/codegen/cms/site-search/models/error_detail.rb +258 -0
  41. data/lib/hubspot/codegen/cms/site-search/models/indexed_data.rb +279 -0
  42. data/lib/hubspot/codegen/cms/site-search/models/public_search_results.rb +282 -0
  43. data/lib/hubspot/codegen/cms/site-search/models/search_hit_field.rb +259 -0
  44. data/lib/hubspot/codegen/cms/url-redirects/api/redirects_api.rb +368 -0
  45. data/lib/hubspot/codegen/cms/url-redirects/api_client.rb +422 -0
  46. data/lib/hubspot/codegen/cms/url-redirects/api_error.rb +61 -0
  47. data/lib/hubspot/codegen/cms/url-redirects/configuration.rb +265 -0
  48. data/lib/hubspot/codegen/cms/url-redirects/models/collection_response_with_total_url_mapping.rb +242 -0
  49. data/lib/hubspot/codegen/cms/url-redirects/models/error.rb +292 -0
  50. data/lib/hubspot/codegen/cms/url-redirects/models/error_detail.rb +258 -0
  51. data/lib/hubspot/codegen/cms/url-redirects/models/next_page.rb +224 -0
  52. data/lib/hubspot/codegen/cms/url-redirects/models/paging.rb +210 -0
  53. data/lib/hubspot/codegen/cms/url-redirects/models/url_mapping.rb +596 -0
  54. data/lib/hubspot/codegen/cms/url-redirects/models/url_mapping_create_request_body.rb +306 -0
  55. data/lib/hubspot/codegen/crm/associations/configuration.rb +7 -0
  56. data/lib/hubspot/codegen/crm/companies/api/associations_api.rb +2 -2
  57. data/lib/hubspot/codegen/crm/companies/api/basic_api.rb +20 -12
  58. data/lib/hubspot/codegen/crm/companies/api/batch_api.rb +40 -24
  59. data/lib/hubspot/codegen/crm/companies/api/search_api.rb +10 -6
  60. data/lib/hubspot/codegen/crm/companies/configuration.rb +7 -0
  61. data/lib/hubspot/codegen/crm/companies/models/batch_read_input_simple_public_object_id.rb +20 -20
  62. data/lib/hubspot/codegen/crm/companies/models/batch_response_simple_public_object.rb +29 -38
  63. data/lib/hubspot/codegen/crm/companies/models/batch_response_simple_public_object_with_errors.rb +333 -0
  64. data/lib/hubspot/codegen/crm/companies/models/filter.rb +15 -15
  65. data/lib/hubspot/codegen/crm/companies/models/simple_public_object_batch_input.rb +18 -18
  66. data/lib/hubspot/codegen/crm/contacts/api/associations_api.rb +2 -2
  67. data/lib/hubspot/codegen/crm/contacts/api/basic_api.rb +20 -12
  68. data/lib/hubspot/codegen/crm/contacts/api/batch_api.rb +40 -24
  69. data/lib/hubspot/codegen/crm/contacts/api/search_api.rb +10 -6
  70. data/lib/hubspot/codegen/crm/contacts/configuration.rb +7 -0
  71. data/lib/hubspot/codegen/crm/contacts/models/batch_read_input_simple_public_object_id.rb +20 -20
  72. data/lib/hubspot/codegen/crm/contacts/models/batch_response_simple_public_object.rb +29 -38
  73. data/lib/hubspot/codegen/crm/contacts/models/batch_response_simple_public_object_with_errors.rb +333 -0
  74. data/lib/hubspot/codegen/crm/contacts/models/filter.rb +15 -15
  75. data/lib/hubspot/codegen/crm/contacts/models/simple_public_object_batch_input.rb +18 -18
  76. data/lib/hubspot/codegen/crm/deals/api/associations_api.rb +2 -2
  77. data/lib/hubspot/codegen/crm/deals/api/basic_api.rb +20 -12
  78. data/lib/hubspot/codegen/crm/deals/api/batch_api.rb +40 -24
  79. data/lib/hubspot/codegen/crm/deals/api/search_api.rb +10 -6
  80. data/lib/hubspot/codegen/crm/deals/configuration.rb +7 -0
  81. data/lib/hubspot/codegen/crm/deals/models/batch_read_input_simple_public_object_id.rb +20 -20
  82. data/lib/hubspot/codegen/crm/deals/models/batch_response_simple_public_object.rb +29 -38
  83. data/lib/hubspot/codegen/crm/deals/models/batch_response_simple_public_object_with_errors.rb +333 -0
  84. data/lib/hubspot/codegen/crm/deals/models/filter.rb +15 -15
  85. data/lib/hubspot/codegen/crm/deals/models/simple_public_object_batch_input.rb +18 -18
  86. data/lib/hubspot/codegen/crm/extensions/cards/configuration.rb +7 -0
  87. data/lib/hubspot/codegen/crm/imports/api/core_api.rb +41 -41
  88. data/lib/hubspot/codegen/crm/imports/configuration.rb +7 -0
  89. data/lib/hubspot/codegen/crm/line_items/api/associations_api.rb +2 -2
  90. data/lib/hubspot/codegen/crm/line_items/api/basic_api.rb +20 -12
  91. data/lib/hubspot/codegen/crm/line_items/api/batch_api.rb +40 -24
  92. data/lib/hubspot/codegen/crm/line_items/api/search_api.rb +10 -6
  93. data/lib/hubspot/codegen/crm/line_items/configuration.rb +7 -0
  94. data/lib/hubspot/codegen/crm/line_items/models/batch_read_input_simple_public_object_id.rb +20 -20
  95. data/lib/hubspot/codegen/crm/line_items/models/batch_response_simple_public_object.rb +29 -38
  96. data/lib/hubspot/codegen/crm/line_items/models/batch_response_simple_public_object_with_errors.rb +333 -0
  97. data/lib/hubspot/codegen/crm/line_items/models/filter.rb +15 -15
  98. data/lib/hubspot/codegen/crm/line_items/models/simple_public_object_batch_input.rb +18 -18
  99. data/lib/hubspot/codegen/crm/owners/api/default_api.rb +0 -2
  100. data/lib/hubspot/codegen/crm/owners/configuration.rb +7 -0
  101. data/lib/hubspot/codegen/crm/pipelines/configuration.rb +7 -0
  102. data/lib/hubspot/codegen/crm/products/api/associations_api.rb +2 -2
  103. data/lib/hubspot/codegen/crm/products/api/basic_api.rb +20 -12
  104. data/lib/hubspot/codegen/crm/products/api/batch_api.rb +40 -24
  105. data/lib/hubspot/codegen/crm/products/api/search_api.rb +10 -6
  106. data/lib/hubspot/codegen/crm/products/configuration.rb +7 -0
  107. data/lib/hubspot/codegen/crm/products/models/batch_read_input_simple_public_object_id.rb +20 -20
  108. data/lib/hubspot/codegen/crm/products/models/batch_response_simple_public_object.rb +29 -38
  109. data/lib/hubspot/codegen/crm/products/models/batch_response_simple_public_object_with_errors.rb +333 -0
  110. data/lib/hubspot/codegen/crm/products/models/filter.rb +15 -15
  111. data/lib/hubspot/codegen/crm/products/models/simple_public_object_batch_input.rb +18 -18
  112. data/lib/hubspot/codegen/crm/properties/api/batch_api.rb +30 -18
  113. data/lib/hubspot/codegen/crm/properties/api/core_api.rb +20 -12
  114. data/lib/hubspot/codegen/crm/properties/api/groups_api.rb +20 -12
  115. data/lib/hubspot/codegen/crm/properties/configuration.rb +7 -0
  116. data/lib/hubspot/codegen/crm/properties/models/batch_read_input_property_name.rb +18 -18
  117. data/lib/hubspot/codegen/crm/properties/models/batch_response_property.rb +29 -23
  118. data/lib/hubspot/codegen/crm/properties/models/property_create.rb +14 -4
  119. data/lib/hubspot/codegen/crm/properties/models/property_update.rb +14 -4
  120. data/lib/hubspot/codegen/crm/quotes/api/associations_api.rb +1 -157
  121. data/lib/hubspot/codegen/crm/quotes/api/basic_api.rb +2 -190
  122. data/lib/hubspot/codegen/crm/quotes/api/batch_api.rb +11 -187
  123. data/lib/hubspot/codegen/crm/quotes/api/default_api.rb +426 -0
  124. data/lib/hubspot/codegen/crm/quotes/api/search_api.rb +11 -7
  125. data/lib/hubspot/codegen/crm/quotes/configuration.rb +7 -0
  126. data/lib/hubspot/codegen/crm/quotes/models/batch_read_input_simple_public_object_id.rb +20 -20
  127. data/lib/hubspot/codegen/crm/quotes/models/batch_response_simple_public_object.rb +29 -38
  128. data/lib/hubspot/codegen/crm/quotes/models/batch_response_simple_public_object_with_errors.rb +333 -0
  129. data/lib/hubspot/codegen/crm/quotes/models/filter.rb +15 -15
  130. data/lib/hubspot/codegen/crm/quotes/models/simple_public_object_batch_input.rb +18 -18
  131. data/lib/hubspot/codegen/crm/tickets/api/associations_api.rb +2 -2
  132. data/lib/hubspot/codegen/crm/tickets/api/basic_api.rb +20 -12
  133. data/lib/hubspot/codegen/crm/tickets/api/batch_api.rb +40 -24
  134. data/lib/hubspot/codegen/crm/tickets/api/search_api.rb +10 -6
  135. data/lib/hubspot/codegen/crm/tickets/configuration.rb +7 -0
  136. data/lib/hubspot/codegen/crm/tickets/models/batch_read_input_simple_public_object_id.rb +20 -20
  137. data/lib/hubspot/codegen/crm/tickets/models/batch_response_simple_public_object.rb +29 -38
  138. data/lib/hubspot/codegen/crm/tickets/models/batch_response_simple_public_object_with_errors.rb +333 -0
  139. data/lib/hubspot/codegen/crm/tickets/models/filter.rb +15 -15
  140. data/lib/hubspot/codegen/crm/tickets/models/simple_public_object_batch_input.rb +18 -18
  141. data/lib/hubspot/codegen/crm/timeline/configuration.rb +7 -0
  142. data/lib/hubspot/codegen/oauth/configuration.rb +7 -0
  143. data/lib/hubspot/codegen/webhooks/api/subscriptions_api.rb +70 -0
  144. data/lib/hubspot/codegen/webhooks/configuration.rb +7 -0
  145. data/lib/hubspot/codegen/webhooks/models/batch_input_subscription_batch_update_request.rb +215 -0
  146. data/lib/hubspot/codegen/webhooks/models/batch_response_subscription_response.rb +331 -0
  147. data/lib/hubspot/codegen/webhooks/models/subscription_batch_update_request.rb +227 -0
  148. data/lib/hubspot/exceptions.rb +11 -0
  149. data/lib/hubspot/helpers/webhooks_helper.rb +31 -0
  150. data/lib/hubspot/version.rb +1 -1
  151. data/sample-apps/imports-contacts-app/.env.template +2 -0
  152. data/sample-apps/imports-contacts-app/.env.test.template +3 -0
  153. data/sample-apps/imports-contacts-app/.gitignore +37 -0
  154. data/sample-apps/imports-contacts-app/.rspec +1 -0
  155. data/sample-apps/imports-contacts-app/.ruby-version +1 -0
  156. data/sample-apps/imports-contacts-app/Dockerfile +22 -0
  157. data/sample-apps/imports-contacts-app/Gemfile +33 -0
  158. data/sample-apps/imports-contacts-app/Gemfile.lock +271 -0
  159. data/sample-apps/imports-contacts-app/README.md +27 -0
  160. data/sample-apps/imports-contacts-app/Rakefile +6 -0
  161. data/sample-apps/imports-contacts-app/app/assets/config/manifest.js +3 -0
  162. data/sample-apps/imports-contacts-app/app/assets/images/.keep +0 -0
  163. data/sample-apps/imports-contacts-app/app/assets/javascripts/application.js +15 -0
  164. data/sample-apps/imports-contacts-app/app/assets/javascripts/cable.js +13 -0
  165. data/sample-apps/imports-contacts-app/app/assets/javascripts/channels/.keep +0 -0
  166. data/sample-apps/imports-contacts-app/app/assets/stylesheets/application.css +87 -0
  167. data/sample-apps/imports-contacts-app/app/controllers/application_controller.rb +12 -0
  168. data/sample-apps/imports-contacts-app/app/controllers/concerns/.keep +0 -0
  169. data/sample-apps/imports-contacts-app/app/controllers/concerns/exception_handler.rb +12 -0
  170. data/sample-apps/imports-contacts-app/app/controllers/imports_controller.rb +24 -0
  171. data/sample-apps/imports-contacts-app/app/controllers/oauth/authorization_controller.rb +19 -0
  172. data/sample-apps/imports-contacts-app/app/helpers/application_helper.rb +2 -0
  173. data/sample-apps/{webhooks-contacts-app → imports-contacts-app}/app/lib/services/authorization/authorize_hubspot.rb +0 -0
  174. data/sample-apps/{webhooks-contacts-app → imports-contacts-app}/app/lib/services/authorization/get_authorization_uri.rb +1 -1
  175. data/sample-apps/{webhooks-contacts-app → imports-contacts-app}/app/lib/services/authorization/tokens/base.rb +0 -0
  176. data/sample-apps/{webhooks-contacts-app → imports-contacts-app}/app/lib/services/authorization/tokens/generate.rb +2 -2
  177. data/sample-apps/{webhooks-contacts-app → imports-contacts-app}/app/lib/services/authorization/tokens/refresh.rb +3 -4
  178. data/sample-apps/imports-contacts-app/app/lib/services/hubspot/imports/create.rb +52 -0
  179. data/sample-apps/imports-contacts-app/app/models/application_record.rb +3 -0
  180. data/sample-apps/imports-contacts-app/app/models/concerns/.keep +0 -0
  181. data/sample-apps/imports-contacts-app/app/views/imports/index.html.erb +70 -0
  182. data/sample-apps/imports-contacts-app/app/views/layouts/application.html.erb +23 -0
  183. data/sample-apps/imports-contacts-app/app/views/oauth/authorization/login.html.erb +15 -0
  184. data/sample-apps/imports-contacts-app/app/views/shared/_header.html.erb +15 -0
  185. data/sample-apps/imports-contacts-app/bin/bundle +3 -0
  186. data/sample-apps/imports-contacts-app/bin/rails +9 -0
  187. data/sample-apps/imports-contacts-app/bin/rake +9 -0
  188. data/sample-apps/imports-contacts-app/bin/setup +36 -0
  189. data/sample-apps/imports-contacts-app/bin/spring +17 -0
  190. data/sample-apps/imports-contacts-app/bin/update +31 -0
  191. data/sample-apps/imports-contacts-app/bin/yarn +11 -0
  192. data/sample-apps/imports-contacts-app/config.ru +5 -0
  193. data/sample-apps/imports-contacts-app/config/application.rb +19 -0
  194. data/sample-apps/imports-contacts-app/config/boot.rb +3 -0
  195. data/sample-apps/imports-contacts-app/config/cable.yml +10 -0
  196. data/sample-apps/imports-contacts-app/config/database.yml +25 -0
  197. data/sample-apps/imports-contacts-app/config/environment.rb +5 -0
  198. data/sample-apps/imports-contacts-app/config/environments/development.rb +61 -0
  199. data/sample-apps/imports-contacts-app/config/environments/production.rb +94 -0
  200. data/sample-apps/imports-contacts-app/config/environments/test.rb +46 -0
  201. data/sample-apps/imports-contacts-app/config/initializers/assets.rb +14 -0
  202. data/sample-apps/imports-contacts-app/config/initializers/filter_parameter_logging.rb +4 -0
  203. data/sample-apps/imports-contacts-app/config/initializers/hubspot-api-client.rb +3 -0
  204. data/sample-apps/imports-contacts-app/config/initializers/mime_types.rb +1 -0
  205. data/sample-apps/imports-contacts-app/config/initializers/wrap_parameters.rb +14 -0
  206. data/sample-apps/imports-contacts-app/config/locales/en.yml +33 -0
  207. data/sample-apps/imports-contacts-app/config/puma.rb +34 -0
  208. data/sample-apps/imports-contacts-app/config/routes.rb +11 -0
  209. data/sample-apps/imports-contacts-app/config/spring.rb +6 -0
  210. data/sample-apps/imports-contacts-app/db/seeds.rb +7 -0
  211. data/sample-apps/imports-contacts-app/docker-compose.yml +11 -0
  212. data/sample-apps/imports-contacts-app/docker-entrypoint.sh +8 -0
  213. data/sample-apps/imports-contacts-app/lib/assets/.keep +0 -0
  214. data/sample-apps/imports-contacts-app/lib/tasks/.keep +0 -0
  215. data/sample-apps/imports-contacts-app/log/.keep +0 -0
  216. data/sample-apps/imports-contacts-app/package.json +5 -0
  217. data/sample-apps/imports-contacts-app/public/404.html +67 -0
  218. data/sample-apps/imports-contacts-app/public/422.html +67 -0
  219. data/sample-apps/imports-contacts-app/public/500.html +66 -0
  220. data/sample-apps/imports-contacts-app/public/apple-touch-icon-precomposed.png +0 -0
  221. data/sample-apps/imports-contacts-app/public/apple-touch-icon.png +0 -0
  222. data/sample-apps/imports-contacts-app/public/examples/example.csv +2 -0
  223. data/sample-apps/imports-contacts-app/public/favicon.ico +0 -0
  224. data/sample-apps/imports-contacts-app/public/robots.txt +1 -0
  225. data/sample-apps/imports-contacts-app/tmp/.keep +0 -0
  226. data/sample-apps/search-result-paging-app/.env.template +4 -0
  227. data/sample-apps/search-result-paging-app/.gitignore +35 -0
  228. data/sample-apps/search-result-paging-app/.rspec +1 -0
  229. data/sample-apps/search-result-paging-app/.ruby-version +1 -0
  230. data/sample-apps/search-result-paging-app/Dockerfile +22 -0
  231. data/sample-apps/search-result-paging-app/Gemfile +35 -0
  232. data/sample-apps/search-result-paging-app/Gemfile.lock +279 -0
  233. data/sample-apps/search-result-paging-app/README.md +0 -0
  234. data/sample-apps/search-result-paging-app/Rakefile +6 -0
  235. data/sample-apps/search-result-paging-app/app/assets/config/manifest.js +3 -0
  236. data/sample-apps/search-result-paging-app/app/assets/images/.keep +0 -0
  237. data/sample-apps/search-result-paging-app/app/assets/javascripts/application.js +25 -0
  238. data/sample-apps/search-result-paging-app/app/assets/javascripts/cable.js +13 -0
  239. data/sample-apps/search-result-paging-app/app/assets/javascripts/channels/.keep +0 -0
  240. data/sample-apps/search-result-paging-app/app/assets/stylesheets/application.css +77 -0
  241. data/sample-apps/search-result-paging-app/app/controllers/application_controller.rb +12 -0
  242. data/sample-apps/search-result-paging-app/app/controllers/concerns/.keep +0 -0
  243. data/sample-apps/search-result-paging-app/app/controllers/concerns/exception_handler.rb +12 -0
  244. data/sample-apps/search-result-paging-app/app/controllers/home_controller.rb +14 -0
  245. data/sample-apps/search-result-paging-app/app/controllers/oauth/authorization_controller.rb +19 -0
  246. data/sample-apps/search-result-paging-app/app/helpers/application_helper.rb +2 -0
  247. data/sample-apps/search-result-paging-app/app/lib/services/hubspot/authorization/authorize.rb +17 -0
  248. data/sample-apps/search-result-paging-app/app/lib/services/hubspot/authorization/get_authorization_uri.rb +35 -0
  249. data/sample-apps/search-result-paging-app/app/lib/services/hubspot/authorization/tokens/base.rb +21 -0
  250. data/sample-apps/search-result-paging-app/app/lib/services/hubspot/authorization/tokens/generate.rb +28 -0
  251. data/sample-apps/search-result-paging-app/app/lib/services/hubspot/authorization/tokens/refresh.rb +35 -0
  252. data/sample-apps/search-result-paging-app/app/lib/services/hubspot/contacts/get_page.rb +26 -0
  253. data/sample-apps/search-result-paging-app/app/lib/services/hubspot/contacts/search.rb +35 -0
  254. data/sample-apps/search-result-paging-app/app/lib/services/hubspot/properties/create.rb +23 -0
  255. data/sample-apps/search-result-paging-app/app/lib/services/hubspot/properties/destroy.rb +16 -0
  256. data/sample-apps/search-result-paging-app/app/models/application_record.rb +3 -0
  257. data/sample-apps/search-result-paging-app/app/models/concerns/.keep +0 -0
  258. data/sample-apps/search-result-paging-app/app/views/home/index.html.erb +13 -0
  259. data/sample-apps/search-result-paging-app/app/views/layouts/application.html.erb +23 -0
  260. data/sample-apps/search-result-paging-app/app/views/oauth/authorization/login.html.erb +15 -0
  261. data/sample-apps/search-result-paging-app/app/views/shared/_header.html.erb +18 -0
  262. data/sample-apps/search-result-paging-app/bin/bundle +3 -0
  263. data/sample-apps/search-result-paging-app/bin/rails +9 -0
  264. data/sample-apps/search-result-paging-app/bin/rake +9 -0
  265. data/sample-apps/search-result-paging-app/bin/setup +36 -0
  266. data/sample-apps/search-result-paging-app/bin/spring +17 -0
  267. data/sample-apps/search-result-paging-app/bin/update +31 -0
  268. data/sample-apps/search-result-paging-app/bin/yarn +11 -0
  269. data/sample-apps/search-result-paging-app/config.ru +5 -0
  270. data/sample-apps/search-result-paging-app/config/application.rb +19 -0
  271. data/sample-apps/search-result-paging-app/config/boot.rb +3 -0
  272. data/sample-apps/search-result-paging-app/config/cable.yml +10 -0
  273. data/sample-apps/search-result-paging-app/config/database.yml +25 -0
  274. data/sample-apps/search-result-paging-app/config/environment.rb +5 -0
  275. data/sample-apps/search-result-paging-app/config/environments/development.rb +61 -0
  276. data/sample-apps/search-result-paging-app/config/environments/production.rb +94 -0
  277. data/sample-apps/search-result-paging-app/config/environments/test.rb +46 -0
  278. data/sample-apps/search-result-paging-app/config/initializers/assets.rb +14 -0
  279. data/sample-apps/search-result-paging-app/config/initializers/filter_parameter_logging.rb +4 -0
  280. data/sample-apps/search-result-paging-app/config/initializers/hubspot-api-client.rb +3 -0
  281. data/sample-apps/search-result-paging-app/config/initializers/mime_types.rb +1 -0
  282. data/sample-apps/search-result-paging-app/config/initializers/wrap_parameters.rb +14 -0
  283. data/sample-apps/search-result-paging-app/config/locales/en.yml +33 -0
  284. data/sample-apps/search-result-paging-app/config/puma.rb +34 -0
  285. data/sample-apps/search-result-paging-app/config/routes.rb +7 -0
  286. data/sample-apps/search-result-paging-app/config/spring.rb +6 -0
  287. data/sample-apps/search-result-paging-app/db/seeds.rb +7 -0
  288. data/sample-apps/search-result-paging-app/docker-compose.yml +11 -0
  289. data/sample-apps/search-result-paging-app/docker-entrypoint.sh +8 -0
  290. data/sample-apps/search-result-paging-app/lib/assets/.keep +0 -0
  291. data/sample-apps/search-result-paging-app/lib/tasks/.keep +0 -0
  292. data/sample-apps/search-result-paging-app/lib/tasks/search_contacts.rake +36 -0
  293. data/sample-apps/search-result-paging-app/log/.keep +0 -0
  294. data/sample-apps/search-result-paging-app/package.json +5 -0
  295. data/sample-apps/search-result-paging-app/public/404.html +67 -0
  296. data/sample-apps/search-result-paging-app/public/422.html +67 -0
  297. data/sample-apps/search-result-paging-app/public/500.html +66 -0
  298. data/sample-apps/search-result-paging-app/public/apple-touch-icon-precomposed.png +0 -0
  299. data/sample-apps/search-result-paging-app/public/apple-touch-icon.png +0 -0
  300. data/sample-apps/search-result-paging-app/public/favicon.ico +0 -0
  301. data/sample-apps/search-result-paging-app/public/robots.txt +1 -0
  302. data/sample-apps/search-result-paging-app/tmp/.keep +0 -0
  303. data/sample-apps/trello-integration-app/.env +13 -0
  304. data/sample-apps/webhooks-contacts-app/.env.template +3 -1
  305. data/sample-apps/webhooks-contacts-app/Gemfile.lock +1 -1
  306. data/sample-apps/webhooks-contacts-app/README.md +24 -21
  307. data/sample-apps/webhooks-contacts-app/app/assets/stylesheets/application.css +7 -55
  308. data/sample-apps/webhooks-contacts-app/app/controllers/events_controller.rb +8 -10
  309. data/sample-apps/webhooks-contacts-app/app/controllers/home_controller.rb +44 -0
  310. data/sample-apps/webhooks-contacts-app/app/controllers/oauth/authorization_controller.rb +6 -6
  311. data/sample-apps/webhooks-contacts-app/app/controllers/webhooks_controller.rb +1 -1
  312. data/sample-apps/webhooks-contacts-app/app/lib/services/hubspot/authorization/authorize.rb +17 -0
  313. data/sample-apps/webhooks-contacts-app/app/lib/services/hubspot/authorization/get_authorization_uri.rb +35 -0
  314. data/sample-apps/webhooks-contacts-app/app/lib/services/hubspot/authorization/tokens/base.rb +21 -0
  315. data/sample-apps/webhooks-contacts-app/app/lib/services/hubspot/authorization/tokens/generate.rb +28 -0
  316. data/sample-apps/webhooks-contacts-app/app/lib/services/hubspot/authorization/tokens/refresh.rb +35 -0
  317. data/sample-apps/webhooks-contacts-app/app/lib/services/hubspot/webhooks/configure_target_url.rb +25 -0
  318. data/sample-apps/webhooks-contacts-app/app/lib/services/hubspot/webhooks/create_or_activate_subscription.rb +44 -0
  319. data/sample-apps/webhooks-contacts-app/app/lib/services/hubspot/webhooks/handle.rb +13 -1
  320. data/sample-apps/webhooks-contacts-app/app/lib/services/hubspot/webhooks/pause_active_subscriptions.rb +39 -0
  321. data/sample-apps/webhooks-contacts-app/app/models/event.rb +3 -0
  322. data/sample-apps/webhooks-contacts-app/app/views/events/index.html.erb +14 -16
  323. data/sample-apps/webhooks-contacts-app/app/views/home/index.html.erb +47 -0
  324. data/sample-apps/webhooks-contacts-app/app/views/oauth/authorization/login.html.erb +6 -6
  325. data/sample-apps/webhooks-contacts-app/app/views/shared/_header.html.erb +3 -0
  326. data/sample-apps/webhooks-contacts-app/config/database.yml +9 -9
  327. data/sample-apps/webhooks-contacts-app/config/routes.rb +2 -0
  328. data/sample-apps/webhooks-contacts-app/db/schema.rb +2 -5
  329. data/sample-apps/webhooks-contacts-app/docker-compose.yml +13 -10
  330. metadata +618 -7
@@ -0,0 +1,210 @@
1
+ =begin
2
+ #Domains
3
+
4
+ #No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
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
+
15
+ module Hubspot
16
+ module Cms
17
+ module Domains
18
+ class Paging
19
+ attr_accessor :_next
20
+
21
+ # Attribute mapping from ruby-style variable name to JSON key.
22
+ def self.attribute_map
23
+ {
24
+ :'_next' => :'next'
25
+ }
26
+ end
27
+
28
+ # Attribute type mapping.
29
+ def self.openapi_types
30
+ {
31
+ :'_next' => :'NextPage'
32
+ }
33
+ end
34
+
35
+ # List of attributes with nullable: true
36
+ def self.openapi_nullable
37
+ Set.new([
38
+ ])
39
+ end
40
+
41
+ # Initializes the object
42
+ # @param [Hash] attributes Model attributes in the form of hash
43
+ def initialize(attributes = {})
44
+ if (!attributes.is_a?(Hash))
45
+ fail ArgumentError, "The input argument (attributes) must be a hash in `Hubspot::Cms::Domains::Paging` initialize method"
46
+ end
47
+
48
+ # check to see if the attribute exists and convert string to symbol for hash key
49
+ attributes = attributes.each_with_object({}) { |(k, v), h|
50
+ if (!self.class.attribute_map.key?(k.to_sym))
51
+ fail ArgumentError, "`#{k}` is not a valid attribute in `Hubspot::Cms::Domains::Paging`. Please check the name to make sure it's valid. List of attributes: " + self.class.attribute_map.keys.inspect
52
+ end
53
+ h[k.to_sym] = v
54
+ }
55
+
56
+ if attributes.key?(:'_next')
57
+ self._next = attributes[:'_next']
58
+ end
59
+ end
60
+
61
+ # Show invalid properties with the reasons. Usually used together with valid?
62
+ # @return Array for valid properties with the reasons
63
+ def list_invalid_properties
64
+ invalid_properties = Array.new
65
+ invalid_properties
66
+ end
67
+
68
+ # Check to see if the all the properties in the model are valid
69
+ # @return true if the model is valid
70
+ def valid?
71
+ true
72
+ end
73
+
74
+ # Checks equality by comparing each attribute.
75
+ # @param [Object] Object to be compared
76
+ def ==(o)
77
+ return true if self.equal?(o)
78
+ self.class == o.class &&
79
+ _next == o._next
80
+ end
81
+
82
+ # @see the `==` method
83
+ # @param [Object] Object to be compared
84
+ def eql?(o)
85
+ self == o
86
+ end
87
+
88
+ # Calculates hash code according to all attributes.
89
+ # @return [Integer] Hash code
90
+ def hash
91
+ [_next].hash
92
+ end
93
+
94
+ # Builds the object from hash
95
+ # @param [Hash] attributes Model attributes in the form of hash
96
+ # @return [Object] Returns the model itself
97
+ def self.build_from_hash(attributes)
98
+ new.build_from_hash(attributes)
99
+ end
100
+
101
+ # Builds the object from hash
102
+ # @param [Hash] attributes Model attributes in the form of hash
103
+ # @return [Object] Returns the model itself
104
+ def build_from_hash(attributes)
105
+ return nil unless attributes.is_a?(Hash)
106
+ self.class.openapi_types.each_pair do |key, type|
107
+ if type =~ /\AArray<(.*)>/i
108
+ # check to ensure the input is an array given that the attribute
109
+ # is documented as an array but the input is not
110
+ if attributes[self.class.attribute_map[key]].is_a?(Array)
111
+ self.send("#{key}=", attributes[self.class.attribute_map[key]].map { |v| _deserialize($1, v) })
112
+ end
113
+ elsif !attributes[self.class.attribute_map[key]].nil?
114
+ self.send("#{key}=", _deserialize(type, attributes[self.class.attribute_map[key]]))
115
+ end # or else data not found in attributes(hash), not an issue as the data can be optional
116
+ end
117
+
118
+ self
119
+ end
120
+
121
+ # Deserializes the data based on type
122
+ # @param string type Data type
123
+ # @param string value Value to be deserialized
124
+ # @return [Object] Deserialized data
125
+ def _deserialize(type, value)
126
+ case type.to_sym
127
+ when :DateTime
128
+ DateTime.parse(value)
129
+ when :Date
130
+ Date.parse(value)
131
+ when :String
132
+ value.to_s
133
+ when :Integer
134
+ value.to_i
135
+ when :Float
136
+ value.to_f
137
+ when :Boolean
138
+ if value.to_s =~ /\A(true|t|yes|y|1)\z/i
139
+ true
140
+ else
141
+ false
142
+ end
143
+ when :Object
144
+ # generic object (usually a Hash), return directly
145
+ value
146
+ when /\AArray<(?<inner_type>.+)>\z/
147
+ inner_type = Regexp.last_match[:inner_type]
148
+ value.map { |v| _deserialize(inner_type, v) }
149
+ when /\AHash<(?<k_type>.+?), (?<v_type>.+)>\z/
150
+ k_type = Regexp.last_match[:k_type]
151
+ v_type = Regexp.last_match[:v_type]
152
+ {}.tap do |hash|
153
+ value.each do |k, v|
154
+ hash[_deserialize(k_type, k)] = _deserialize(v_type, v)
155
+ end
156
+ end
157
+ else # model
158
+ Hubspot::Cms::Domains.const_get(type).build_from_hash(value)
159
+ end
160
+ end
161
+
162
+ # Returns the string representation of the object
163
+ # @return [String] String presentation of the object
164
+ def to_s
165
+ to_hash.to_s
166
+ end
167
+
168
+ # to_body is an alias to to_hash (backward compatibility)
169
+ # @return [Hash] Returns the object in the form of hash
170
+ def to_body
171
+ to_hash
172
+ end
173
+
174
+ # Returns the object in the form of hash
175
+ # @return [Hash] Returns the object in the form of hash
176
+ def to_hash
177
+ hash = {}
178
+ self.class.attribute_map.each_pair do |attr, param|
179
+ value = self.send(attr)
180
+ if value.nil?
181
+ is_nullable = self.class.openapi_nullable.include?(attr)
182
+ next if !is_nullable || (is_nullable && !instance_variable_defined?(:"@#{attr}"))
183
+ end
184
+
185
+ hash[param] = _to_hash(value)
186
+ end
187
+ hash
188
+ end
189
+
190
+ # Outputs non-array value in the form of hash
191
+ # For object, use to_hash. Otherwise, just return the value
192
+ # @param [Object] value Any valid value
193
+ # @return [Hash] Returns the value in the form of hash
194
+ def _to_hash(value)
195
+ if value.is_a?(Array)
196
+ value.compact.map { |v| _to_hash(v) }
197
+ elsif value.is_a?(Hash)
198
+ {}.tap do |hash|
199
+ value.each { |k, v| hash[k] = _to_hash(v) }
200
+ end
201
+ elsif value.respond_to? :to_hash
202
+ value.to_hash
203
+ else
204
+ value
205
+ end
206
+ end
207
+ end
208
+ end
209
+ end
210
+ end
@@ -0,0 +1,186 @@
1
+ =begin
2
+ #CMS Performance API
3
+
4
+ #Use these endpoints to get a time series view of your website's performance.
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 Cms
17
+ module Performance
18
+ class DefaultApi
19
+ attr_accessor :api_client
20
+
21
+ def initialize(api_client = ApiClient.default)
22
+ @api_client = api_client
23
+ end
24
+ # View your website's performance.
25
+ # Returns time series data website performance data for the given domain and/or path.
26
+ # @param [Hash] opts the optional parameters
27
+ # @option opts [String] :domain The domain to search return data for.
28
+ # @option opts [String] :path The url path of the domain to return data for.
29
+ # @option opts [Boolean] :pad Specifies whether the time series data should have empty intervals if performance data is not present to create a continuous set.
30
+ # @option opts [Boolean] :sum Specifies whether the time series data should be summated for the given period. Defaults to false.
31
+ # @option opts [String] :period A relative period to return time series data for. This value is ignored if start and/or end are provided. Valid periods: [15m, 30m, 1h, 4h, 12h, 1d, 1w]
32
+ # @option opts [String] :interval The time series interval to group data by. Valid intervals: [1m, 5m, 15m, 30m, 1h, 4h, 12h, 1d, 1w]
33
+ # @option opts [Integer] :start A timestamp in milliseconds that indicates the start of the time period.
34
+ # @option opts [Integer] :_end A timestamp in milliseconds that indicates the end of the time period.
35
+ # @return [PublicPerformanceResponse]
36
+ def get_page(opts = {})
37
+ data, _status_code, _headers = get_page_with_http_info(opts)
38
+ data
39
+ end
40
+
41
+ # View your website&#39;s performance.
42
+ # Returns time series data website performance data for the given domain and/or path.
43
+ # @param [Hash] opts the optional parameters
44
+ # @option opts [String] :domain The domain to search return data for.
45
+ # @option opts [String] :path The url path of the domain to return data for.
46
+ # @option opts [Boolean] :pad Specifies whether the time series data should have empty intervals if performance data is not present to create a continuous set.
47
+ # @option opts [Boolean] :sum Specifies whether the time series data should be summated for the given period. Defaults to false.
48
+ # @option opts [String] :period A relative period to return time series data for. This value is ignored if start and/or end are provided. Valid periods: [15m, 30m, 1h, 4h, 12h, 1d, 1w]
49
+ # @option opts [String] :interval The time series interval to group data by. Valid intervals: [1m, 5m, 15m, 30m, 1h, 4h, 12h, 1d, 1w]
50
+ # @option opts [Integer] :start A timestamp in milliseconds that indicates the start of the time period.
51
+ # @option opts [Integer] :_end A timestamp in milliseconds that indicates the end of the time period.
52
+ # @return [Array<(PublicPerformanceResponse, Integer, Hash)>] PublicPerformanceResponse data, response status code and response headers
53
+ def get_page_with_http_info(opts = {})
54
+ if @api_client.config.debugging
55
+ @api_client.config.logger.debug 'Calling API: DefaultApi.get_page ...'
56
+ end
57
+ # resource path
58
+ local_var_path = '/cms/v3/performance/'
59
+
60
+ # query parameters
61
+ query_params = opts[:query_params] || {}
62
+ query_params[:'domain'] = opts[:'domain'] if !opts[:'domain'].nil?
63
+ query_params[:'path'] = opts[:'path'] if !opts[:'path'].nil?
64
+ query_params[:'pad'] = opts[:'pad'] if !opts[:'pad'].nil?
65
+ query_params[:'sum'] = opts[:'sum'] if !opts[:'sum'].nil?
66
+ query_params[:'period'] = opts[:'period'] if !opts[:'period'].nil?
67
+ query_params[:'interval'] = opts[:'interval'] if !opts[:'interval'].nil?
68
+ query_params[:'start'] = opts[:'start'] if !opts[:'start'].nil?
69
+ query_params[:'end'] = opts[:'_end'] if !opts[:'_end'].nil?
70
+
71
+ # header parameters
72
+ header_params = opts[:header_params] || {}
73
+ # HTTP header 'Accept' (if needed)
74
+ header_params['Accept'] = @api_client.select_header_accept(['application/json', '*/*'])
75
+
76
+ # form parameters
77
+ form_params = opts[:form_params] || {}
78
+
79
+ # http body (model)
80
+ post_body = opts[:body]
81
+
82
+ # return_type
83
+ return_type = opts[:return_type] || 'PublicPerformanceResponse'
84
+
85
+ # auth_names
86
+ auth_names = opts[:auth_names] || ['hapikey']
87
+
88
+ new_options = opts.merge(
89
+ :header_params => header_params,
90
+ :query_params => query_params,
91
+ :form_params => form_params,
92
+ :body => post_body,
93
+ :auth_names => auth_names,
94
+ :return_type => return_type
95
+ )
96
+
97
+ data, status_code, headers = @api_client.call_api(:GET, local_var_path, new_options)
98
+ if @api_client.config.debugging
99
+ @api_client.config.logger.debug "API called: DefaultApi#get_page\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
100
+ end
101
+ return data, status_code, headers
102
+ end
103
+
104
+ # View your website's uptime.
105
+ # Returns uptime time series website performance data for the given domain.
106
+ # @param [Hash] opts the optional parameters
107
+ # @option opts [String] :domain The domain to search return data for.
108
+ # @option opts [String] :path
109
+ # @option opts [Boolean] :pad Specifies whether the time series data should have empty intervals if performance data is not present to create a continuous set.
110
+ # @option opts [Boolean] :sum Specifies whether the time series data should be summated for the given period. Defaults to false.
111
+ # @option opts [String] :period A relative period to return time series data for. This value is ignored if start and/or end are provided. Valid periods: [15m, 30m, 1h, 4h, 12h, 1d, 1w]
112
+ # @option opts [String] :interval The time series interval to group data by. Valid intervals: [1m, 5m, 15m, 30m, 1h, 4h, 12h, 1d, 1w]
113
+ # @option opts [Integer] :start A timestamp in milliseconds that indicates the start of the time period.
114
+ # @option opts [Integer] :_end A timestamp in milliseconds that indicates the end of the time period.
115
+ # @return [PublicPerformanceResponse]
116
+ def get_uptime(opts = {})
117
+ data, _status_code, _headers = get_uptime_with_http_info(opts)
118
+ data
119
+ end
120
+
121
+ # View your website&#39;s uptime.
122
+ # Returns uptime time series website performance data for the given domain.
123
+ # @param [Hash] opts the optional parameters
124
+ # @option opts [String] :domain The domain to search return data for.
125
+ # @option opts [String] :path
126
+ # @option opts [Boolean] :pad Specifies whether the time series data should have empty intervals if performance data is not present to create a continuous set.
127
+ # @option opts [Boolean] :sum Specifies whether the time series data should be summated for the given period. Defaults to false.
128
+ # @option opts [String] :period A relative period to return time series data for. This value is ignored if start and/or end are provided. Valid periods: [15m, 30m, 1h, 4h, 12h, 1d, 1w]
129
+ # @option opts [String] :interval The time series interval to group data by. Valid intervals: [1m, 5m, 15m, 30m, 1h, 4h, 12h, 1d, 1w]
130
+ # @option opts [Integer] :start A timestamp in milliseconds that indicates the start of the time period.
131
+ # @option opts [Integer] :_end A timestamp in milliseconds that indicates the end of the time period.
132
+ # @return [Array<(PublicPerformanceResponse, Integer, Hash)>] PublicPerformanceResponse data, response status code and response headers
133
+ def get_uptime_with_http_info(opts = {})
134
+ if @api_client.config.debugging
135
+ @api_client.config.logger.debug 'Calling API: DefaultApi.get_uptime ...'
136
+ end
137
+ # resource path
138
+ local_var_path = '/cms/v3/performance/uptime'
139
+
140
+ # query parameters
141
+ query_params = opts[:query_params] || {}
142
+ query_params[:'domain'] = opts[:'domain'] if !opts[:'domain'].nil?
143
+ query_params[:'path'] = opts[:'path'] if !opts[:'path'].nil?
144
+ query_params[:'pad'] = opts[:'pad'] if !opts[:'pad'].nil?
145
+ query_params[:'sum'] = opts[:'sum'] if !opts[:'sum'].nil?
146
+ query_params[:'period'] = opts[:'period'] if !opts[:'period'].nil?
147
+ query_params[:'interval'] = opts[:'interval'] if !opts[:'interval'].nil?
148
+ query_params[:'start'] = opts[:'start'] if !opts[:'start'].nil?
149
+ query_params[:'end'] = opts[:'_end'] if !opts[:'_end'].nil?
150
+
151
+ # header parameters
152
+ header_params = opts[:header_params] || {}
153
+ # HTTP header 'Accept' (if needed)
154
+ header_params['Accept'] = @api_client.select_header_accept(['application/json', '*/*'])
155
+
156
+ # form parameters
157
+ form_params = opts[:form_params] || {}
158
+
159
+ # http body (model)
160
+ post_body = opts[:body]
161
+
162
+ # return_type
163
+ return_type = opts[:return_type] || 'PublicPerformanceResponse'
164
+
165
+ # auth_names
166
+ auth_names = opts[:auth_names] || ['hapikey']
167
+
168
+ new_options = opts.merge(
169
+ :header_params => header_params,
170
+ :query_params => query_params,
171
+ :form_params => form_params,
172
+ :body => post_body,
173
+ :auth_names => auth_names,
174
+ :return_type => return_type
175
+ )
176
+
177
+ data, status_code, headers = @api_client.call_api(:GET, local_var_path, new_options)
178
+ if @api_client.config.debugging
179
+ @api_client.config.logger.debug "API called: DefaultApi#get_uptime\nData: #{data.inspect}\nStatus code: #{status_code}\nHeaders: #{headers}"
180
+ end
181
+ return data, status_code, headers
182
+ end
183
+ end
184
+ end
185
+ end
186
+ end
@@ -0,0 +1,422 @@
1
+ =begin
2
+ #CMS Performance API
3
+
4
+ #Use these endpoints to get a time series view of your website's performance.
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 Cms
21
+ module Performance
22
+ class ApiClient
23
+ # The Configuration object holding settings to be used in the API client.
24
+ attr_accessor :config
25
+
26
+ # Defines the headers to be used in HTTP requests of all API calls by default.
27
+ #
28
+ # @return [Hash]
29
+ attr_accessor :default_headers
30
+
31
+ # Initializes the ApiClient
32
+ # @option config [Configuration] Configuration for initializing the object, default to Configuration.default
33
+ def initialize(config = Configuration.default)
34
+ @config = config
35
+ @user_agent = "hubspot-api-client-ruby; #{VERSION}"
36
+ @default_headers = {
37
+ 'Content-Type' => 'application/json',
38
+ 'User-Agent' => @user_agent
39
+ }
40
+ end
41
+
42
+ def self.default
43
+ @@default ||= ApiClient.new
44
+ end
45
+
46
+ # Call an API with given options.
47
+ #
48
+ # @return [Array<(Object, Integer, Hash)>] an array of 3 elements:
49
+ # the data deserialized from response body (could be nil), response status code and response headers.
50
+ def call_api(http_method, path, opts = {})
51
+ ssl_options = {
52
+ :ca_file => @config.ssl_ca_file,
53
+ :verify => @config.ssl_verify,
54
+ :verify_mode => @config.ssl_verify_mode,
55
+ :client_cert => @config.ssl_client_cert,
56
+ :client_key => @config.ssl_client_key
57
+ }
58
+
59
+ connection = Faraday.new(:url => config.base_url, :ssl => ssl_options) do |conn|
60
+ conn.basic_auth(config.username, config.password)
61
+ if opts[:header_params]["Content-Type"] == "multipart/form-data"
62
+ conn.request :multipart
63
+ conn.request :url_encoded
64
+ end
65
+ conn.adapter(Faraday.default_adapter)
66
+ conn.options[:params_encoder] = Faraday::FlatParamsEncoder
67
+
68
+ # Errors handler settings
69
+ if !config.error_handler.empty?
70
+ config.error_handler.each do |statuses, opts|
71
+ statuses = statuses.is_a?(Integer) ? [statuses] : statuses
72
+ retry_options = {
73
+ max: opts[:max_retries],
74
+ interval: opts[:seconds_delay],
75
+ retry_statuses: statuses,
76
+ methods: %i[post delete get head options put],
77
+ retry_block: -> (env, options, retries, exc) { opts[:retry_block].call }
78
+ }
79
+ conn.request :retry, retry_options
80
+ end
81
+ end
82
+ end
83
+
84
+ begin
85
+ response = connection.public_send(http_method.to_sym.downcase) do |req|
86
+ build_request(http_method, path, req, opts)
87
+ end
88
+
89
+ if @config.debugging
90
+ @config.logger.debug "HTTP response body ~BEGIN~\n#{response.body}\n~END~\n"
91
+ end
92
+
93
+ unless response.success?
94
+ if response.status == 0
95
+ # Errors from libcurl will be made visible here
96
+ fail ApiError.new(:code => 0,
97
+ :message => response.return_message)
98
+ else
99
+ fail ApiError.new(:code => response.status,
100
+ :response_headers => response.headers,
101
+ :response_body => response.body),
102
+ response.reason_phrase
103
+ end
104
+ end
105
+ rescue Faraday::TimeoutError
106
+ fail ApiError.new('Connection timed out')
107
+ end
108
+
109
+ if opts[:return_type]
110
+ data = deserialize(response, opts[:return_type])
111
+ else
112
+ data = nil
113
+ end
114
+ return data, response.status, response.headers
115
+ end
116
+
117
+ # Builds the HTTP request
118
+ #
119
+ # @param [String] http_method HTTP method/verb (e.g. POST)
120
+ # @param [String] path URL path (e.g. /account/new)
121
+ # @option opts [Hash] :header_params Header parameters
122
+ # @option opts [Hash] :query_params Query parameters
123
+ # @option opts [Hash] :form_params Query parameters
124
+ # @option opts [Object] :body HTTP body (JSON/XML)
125
+ # @return [Typhoeus::Request] A Typhoeus Request
126
+ def build_request(http_method, path, request, opts = {})
127
+ url = build_request_url(path)
128
+ http_method = http_method.to_sym.downcase
129
+
130
+ header_params = @default_headers.merge(opts[:header_params] || {})
131
+ query_params = opts[:query_params] || {}
132
+ form_params = opts[:form_params] || {}
133
+
134
+ update_params_for_auth! header_params, query_params, opts[:auth_names]
135
+
136
+ req_opts = {
137
+ :method => http_method,
138
+ :headers => header_params,
139
+ :params => query_params,
140
+ :params_encoding => @config.params_encoding,
141
+ :timeout => @config.timeout,
142
+ :verbose => @config.debugging
143
+ }
144
+
145
+ if [:post, :patch, :put, :delete].include?(http_method)
146
+ req_body = build_request_body(header_params, form_params, opts[:body])
147
+ req_opts.update :body => req_body
148
+ if @config.debugging
149
+ @config.logger.debug "HTTP request body param ~BEGIN~\n#{req_body}\n~END~\n"
150
+ end
151
+ end
152
+ request.headers = header_params
153
+ request.body = req_body
154
+ request.url url
155
+ request.params = query_params
156
+ download_file(request) if opts[:return_type] == 'File'
157
+ request
158
+ end
159
+
160
+ # Builds the HTTP request body
161
+ #
162
+ # @param [Hash] header_params Header parameters
163
+ # @param [Hash] form_params Query parameters
164
+ # @param [Object] body HTTP body (JSON/XML)
165
+ # @return [String] HTTP body data in the form of string
166
+ def build_request_body(header_params, form_params, body)
167
+ # http form
168
+ if header_params['Content-Type'] == 'application/x-www-form-urlencoded'
169
+ data = URI.encode_www_form(form_params)
170
+ elsif header_params['Content-Type'] == 'multipart/form-data'
171
+ data = {}
172
+ form_params.each do |key, value|
173
+ case value
174
+ when ::File, ::Tempfile
175
+ # TODO hardcode to application/octet-stream, need better way to detect content type
176
+ data[key] = Faraday::UploadIO.new(value.path, 'application/octet-stream', value.path)
177
+ when ::Array, nil
178
+ # let Faraday handle Array and nil parameters
179
+ data[key] = value
180
+ else
181
+ data[key] = value.to_s
182
+ end
183
+ end
184
+ elsif body
185
+ data = body.is_a?(String) ? body : body.to_json
186
+ else
187
+ data = nil
188
+ end
189
+ data
190
+ end
191
+
192
+ # Check if the given MIME is a JSON MIME.
193
+ # JSON MIME examples:
194
+ # application/json
195
+ # application/json; charset=UTF8
196
+ # APPLICATION/JSON
197
+ # */*
198
+ # @param [String] mime MIME
199
+ # @return [Boolean] True if the MIME is application/json
200
+ def json_mime?(mime)
201
+ (mime == '*/*') || !(mime =~ /Application\/.*json(?!p)(;.*)?/i).nil?
202
+ end
203
+
204
+ # Deserialize the response to the given return type.
205
+ #
206
+ # @param [Response] response HTTP response
207
+ # @param [String] return_type some examples: "User", "Array<User>", "Hash<String, Integer>"
208
+ def deserialize(response, return_type)
209
+ body = response.body
210
+
211
+ # handle file downloading - return the File instance processed in request callbacks
212
+ # note that response body is empty when the file is written in chunks in request on_body callback
213
+ return @tempfile if return_type == 'File'
214
+
215
+ return nil if body.nil? || body.empty?
216
+
217
+ # return response body directly for String return type
218
+ return body if return_type == 'String'
219
+
220
+ # ensuring a default content type
221
+ content_type = response.headers['Content-Type'] || 'application/json'
222
+
223
+ fail "Content-Type is not supported: #{content_type}" unless json_mime?(content_type)
224
+
225
+ begin
226
+ data = JSON.parse("[#{body}]", :symbolize_names => true)[0]
227
+ rescue JSON::ParserError => e
228
+ if %w(String Date DateTime).include?(return_type)
229
+ data = body
230
+ else
231
+ raise e
232
+ end
233
+ end
234
+
235
+ convert_to_type data, return_type
236
+ end
237
+
238
+ # Convert data to the given return type.
239
+ # @param [Object] data Data to be converted
240
+ # @param [String] return_type Return type
241
+ # @return [Mixed] Data in a particular type
242
+ def convert_to_type(data, return_type)
243
+ return nil if data.nil?
244
+ case return_type
245
+ when 'String'
246
+ data.to_s
247
+ when 'Integer'
248
+ data.to_i
249
+ when 'Float'
250
+ data.to_f
251
+ when 'Boolean'
252
+ data == true
253
+ when 'DateTime'
254
+ # parse date time (expecting ISO 8601 format)
255
+ DateTime.parse data
256
+ when 'Date'
257
+ # parse date time (expecting ISO 8601 format)
258
+ Date.parse data
259
+ when 'Object'
260
+ # generic object (usually a Hash), return directly
261
+ data
262
+ when /\AArray<(.+)>\z/
263
+ # e.g. Array<Pet>
264
+ sub_type = $1
265
+ data.map { |item| convert_to_type(item, sub_type) }
266
+ when /\AHash\<String, (.+)\>\z/
267
+ # e.g. Hash<String, Integer>
268
+ sub_type = $1
269
+ {}.tap do |hash|
270
+ data.each { |k, v| hash[k] = convert_to_type(v, sub_type) }
271
+ end
272
+ else
273
+ # models, e.g. Pet
274
+ Hubspot::Cms::Performance.const_get(return_type).build_from_hash(data)
275
+ end
276
+ end
277
+
278
+ # Save response body into a file in (the defined) temporary folder, using the filename
279
+ # from the "Content-Disposition" header if provided, otherwise a random filename.
280
+ # The response body is written to the file in chunks in order to handle files which
281
+ # size is larger than maximum Ruby String or even larger than the maximum memory a Ruby
282
+ # process can use.
283
+ #
284
+ # @see Configuration#temp_folder_path
285
+ def download_file(request)
286
+ tempfile = nil
287
+ encoding = nil
288
+ request.on_headers do |response|
289
+ content_disposition = response.headers['Content-Disposition']
290
+ if content_disposition && content_disposition =~ /filename=/i
291
+ filename = content_disposition[/filename=['"]?([^'"\s]+)['"]?/, 1]
292
+ prefix = sanitize_filename(filename)
293
+ else
294
+ prefix = 'download-'
295
+ end
296
+ prefix = prefix + '-' unless prefix.end_with?('-')
297
+ encoding = response.body.encoding
298
+ tempfile = Tempfile.open(prefix, @config.temp_folder_path, encoding: encoding)
299
+ @tempfile = tempfile
300
+ end
301
+ request.on_body do |chunk|
302
+ chunk.force_encoding(encoding)
303
+ tempfile.write(chunk)
304
+ end
305
+ request.on_complete do |response|
306
+ tempfile.close if tempfile
307
+ @config.logger.info "Temp file written to #{tempfile.path}, please copy the file to a proper folder "\
308
+ "with e.g. `FileUtils.cp(tempfile.path, '/new/file/path')` otherwise the temp file "\
309
+ "will be deleted automatically with GC. It's also recommended to delete the temp file "\
310
+ "explicitly with `tempfile.delete`"
311
+ end
312
+ end
313
+
314
+ # Sanitize filename by removing path.
315
+ # e.g. ../../sun.gif becomes sun.gif
316
+ #
317
+ # @param [String] filename the filename to be sanitized
318
+ # @return [String] the sanitized filename
319
+ def sanitize_filename(filename)
320
+ filename.gsub(/.*[\/\\]/, '')
321
+ end
322
+
323
+ def build_request_url(path)
324
+ # Add leading and trailing slashes to path
325
+ path = "/#{path}".gsub(/\/+/, '/')
326
+ @config.base_url + path
327
+ end
328
+
329
+ # Update hearder and query params based on authentication settings.
330
+ #
331
+ # @param [Hash] header_params Header parameters
332
+ # @param [Hash] query_params Query parameters
333
+ # @param [String] auth_names Authentication scheme name
334
+ def update_params_for_auth!(header_params, query_params, auth_names)
335
+ Array(auth_names).each do |auth_name|
336
+ auth_setting = @config.auth_settings[auth_name]
337
+ next unless auth_setting
338
+ case auth_setting[:in]
339
+ when 'header' then header_params[auth_setting[:key]] = auth_setting[:value]
340
+ when 'query' then query_params[auth_setting[:key]] = auth_setting[:value]
341
+ else fail ArgumentError, 'Authentication token must be in `query` of `header`'
342
+ end
343
+ end
344
+ end
345
+
346
+ # Sets user agent in HTTP header
347
+ #
348
+ # @param [String] user_agent User agent (e.g. openapi-generator/ruby/1.0.0)
349
+ def user_agent=(user_agent)
350
+ @user_agent = user_agent
351
+ @default_headers['User-Agent'] = @user_agent
352
+ end
353
+
354
+ # Return Accept header based on an array of accepts provided.
355
+ # @param [Array] accepts array for Accept
356
+ # @return [String] the Accept header (e.g. application/json)
357
+ def select_header_accept(accepts)
358
+ return nil if accepts.nil? || accepts.empty?
359
+ # use JSON when present, otherwise use all of the provided
360
+ json_accept = accepts.find { |s| json_mime?(s) }
361
+ json_accept || accepts.join(',')
362
+ end
363
+
364
+ # Return Content-Type header based on an array of content types provided.
365
+ # @param [Array] content_types array for Content-Type
366
+ # @return [String] the Content-Type header (e.g. application/json)
367
+ def select_header_content_type(content_types)
368
+ # use application/json by default
369
+ return 'application/json' if content_types.nil? || content_types.empty?
370
+ # use JSON when present, otherwise use the first one
371
+ json_content_type = content_types.find { |s| json_mime?(s) }
372
+ json_content_type || content_types.first
373
+ end
374
+
375
+ # Convert object (array, hash, object, etc) to JSON string.
376
+ # @param [Object] model object to be converted into JSON string
377
+ # @return [String] JSON string representation of the object
378
+ def object_to_http_body(model)
379
+ return model if model.nil? || model.is_a?(String)
380
+ local_body = nil
381
+ if model.is_a?(Array)
382
+ local_body = model.map { |m| object_to_hash(m) }
383
+ else
384
+ local_body = object_to_hash(model)
385
+ end
386
+ local_body.to_json
387
+ end
388
+
389
+ # Convert object(non-array) to hash.
390
+ # @param [Object] obj object to be converted into JSON string
391
+ # @return [String] JSON string representation of the object
392
+ def object_to_hash(obj)
393
+ if obj.respond_to?(:to_hash)
394
+ obj.to_hash
395
+ else
396
+ obj
397
+ end
398
+ end
399
+
400
+ # Build parameter value according to the given collection format.
401
+ # @param [String] collection_format one of :csv, :ssv, :tsv, :pipes and :multi
402
+ def build_collection_param(param, collection_format)
403
+ case collection_format
404
+ when :csv
405
+ param.join(',')
406
+ when :ssv
407
+ param.join(' ')
408
+ when :tsv
409
+ param.join("\t")
410
+ when :pipes
411
+ param.join('|')
412
+ when :multi
413
+ # return the array directly as typhoeus will handle it as expected
414
+ param
415
+ else
416
+ fail "unknown collection format: #{collection_format.inspect}"
417
+ end
418
+ end
419
+ end
420
+ end
421
+ end
422
+ end