hubspot-api-client 3.1.0.pre.beta → 5.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 (241) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +28 -0
  3. data/lib/hubspot-api-client.rb +66 -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 +258 -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 +258 -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 +258 -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 +258 -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 +258 -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/imports/api/core_api.rb +41 -41
  56. data/lib/hubspot/codegen/webhooks/api/subscriptions_api.rb +70 -0
  57. data/lib/hubspot/codegen/webhooks/models/batch_input_subscription_batch_update_request.rb +215 -0
  58. data/lib/hubspot/codegen/webhooks/models/batch_response_subscription_response.rb +331 -0
  59. data/lib/hubspot/codegen/webhooks/models/subscription_batch_update_request.rb +227 -0
  60. data/lib/hubspot/exceptions.rb +11 -0
  61. data/lib/hubspot/helpers/webhooks_helper.rb +31 -0
  62. data/lib/hubspot/version.rb +1 -1
  63. data/sample-apps/imports-contacts-app/.env.template +2 -0
  64. data/sample-apps/imports-contacts-app/.env.test.template +3 -0
  65. data/sample-apps/imports-contacts-app/.gitignore +37 -0
  66. data/sample-apps/imports-contacts-app/.rspec +1 -0
  67. data/sample-apps/imports-contacts-app/.ruby-version +1 -0
  68. data/sample-apps/imports-contacts-app/Dockerfile +22 -0
  69. data/sample-apps/imports-contacts-app/Gemfile +33 -0
  70. data/sample-apps/imports-contacts-app/Gemfile.lock +271 -0
  71. data/sample-apps/imports-contacts-app/README.md +27 -0
  72. data/sample-apps/imports-contacts-app/Rakefile +6 -0
  73. data/sample-apps/imports-contacts-app/app/assets/config/manifest.js +3 -0
  74. data/sample-apps/imports-contacts-app/app/assets/images/.keep +0 -0
  75. data/sample-apps/imports-contacts-app/app/assets/javascripts/application.js +15 -0
  76. data/sample-apps/imports-contacts-app/app/assets/javascripts/cable.js +13 -0
  77. data/sample-apps/imports-contacts-app/app/assets/javascripts/channels/.keep +0 -0
  78. data/sample-apps/imports-contacts-app/app/assets/stylesheets/application.css +87 -0
  79. data/sample-apps/imports-contacts-app/app/controllers/application_controller.rb +12 -0
  80. data/sample-apps/imports-contacts-app/app/controllers/concerns/.keep +0 -0
  81. data/sample-apps/imports-contacts-app/app/controllers/concerns/exception_handler.rb +12 -0
  82. data/sample-apps/imports-contacts-app/app/controllers/imports_controller.rb +24 -0
  83. data/sample-apps/imports-contacts-app/app/controllers/oauth/authorization_controller.rb +19 -0
  84. data/sample-apps/imports-contacts-app/app/helpers/application_helper.rb +2 -0
  85. data/sample-apps/{webhooks-contacts-app → imports-contacts-app}/app/lib/services/authorization/authorize_hubspot.rb +0 -0
  86. data/sample-apps/{webhooks-contacts-app → imports-contacts-app}/app/lib/services/authorization/get_authorization_uri.rb +1 -1
  87. data/sample-apps/{webhooks-contacts-app → imports-contacts-app}/app/lib/services/authorization/tokens/base.rb +0 -0
  88. data/sample-apps/{webhooks-contacts-app → imports-contacts-app}/app/lib/services/authorization/tokens/generate.rb +2 -2
  89. data/sample-apps/{webhooks-contacts-app → imports-contacts-app}/app/lib/services/authorization/tokens/refresh.rb +3 -4
  90. data/sample-apps/imports-contacts-app/app/lib/services/hubspot/imports/create.rb +52 -0
  91. data/sample-apps/imports-contacts-app/app/models/application_record.rb +3 -0
  92. data/sample-apps/imports-contacts-app/app/models/concerns/.keep +0 -0
  93. data/sample-apps/imports-contacts-app/app/views/imports/index.html.erb +70 -0
  94. data/sample-apps/imports-contacts-app/app/views/layouts/application.html.erb +23 -0
  95. data/sample-apps/imports-contacts-app/app/views/oauth/authorization/login.html.erb +15 -0
  96. data/sample-apps/imports-contacts-app/app/views/shared/_header.html.erb +15 -0
  97. data/sample-apps/imports-contacts-app/bin/bundle +3 -0
  98. data/sample-apps/imports-contacts-app/bin/rails +9 -0
  99. data/sample-apps/imports-contacts-app/bin/rake +9 -0
  100. data/sample-apps/imports-contacts-app/bin/setup +36 -0
  101. data/sample-apps/imports-contacts-app/bin/spring +17 -0
  102. data/sample-apps/imports-contacts-app/bin/update +31 -0
  103. data/sample-apps/imports-contacts-app/bin/yarn +11 -0
  104. data/sample-apps/imports-contacts-app/config.ru +5 -0
  105. data/sample-apps/imports-contacts-app/config/application.rb +19 -0
  106. data/sample-apps/imports-contacts-app/config/boot.rb +3 -0
  107. data/sample-apps/imports-contacts-app/config/cable.yml +10 -0
  108. data/sample-apps/imports-contacts-app/config/database.yml +25 -0
  109. data/sample-apps/imports-contacts-app/config/environment.rb +5 -0
  110. data/sample-apps/imports-contacts-app/config/environments/development.rb +61 -0
  111. data/sample-apps/imports-contacts-app/config/environments/production.rb +94 -0
  112. data/sample-apps/imports-contacts-app/config/environments/test.rb +46 -0
  113. data/sample-apps/imports-contacts-app/config/initializers/assets.rb +14 -0
  114. data/sample-apps/imports-contacts-app/config/initializers/filter_parameter_logging.rb +4 -0
  115. data/sample-apps/imports-contacts-app/config/initializers/hubspot-api-client.rb +3 -0
  116. data/sample-apps/imports-contacts-app/config/initializers/mime_types.rb +1 -0
  117. data/sample-apps/imports-contacts-app/config/initializers/wrap_parameters.rb +14 -0
  118. data/sample-apps/imports-contacts-app/config/locales/en.yml +33 -0
  119. data/sample-apps/imports-contacts-app/config/puma.rb +34 -0
  120. data/sample-apps/imports-contacts-app/config/routes.rb +11 -0
  121. data/sample-apps/imports-contacts-app/config/spring.rb +6 -0
  122. data/sample-apps/imports-contacts-app/db/seeds.rb +7 -0
  123. data/sample-apps/imports-contacts-app/docker-compose.yml +11 -0
  124. data/sample-apps/imports-contacts-app/docker-entrypoint.sh +8 -0
  125. data/sample-apps/imports-contacts-app/lib/assets/.keep +0 -0
  126. data/sample-apps/imports-contacts-app/lib/tasks/.keep +0 -0
  127. data/sample-apps/imports-contacts-app/log/.keep +0 -0
  128. data/sample-apps/imports-contacts-app/package.json +5 -0
  129. data/sample-apps/imports-contacts-app/public/404.html +67 -0
  130. data/sample-apps/imports-contacts-app/public/422.html +67 -0
  131. data/sample-apps/imports-contacts-app/public/500.html +66 -0
  132. data/sample-apps/imports-contacts-app/public/apple-touch-icon-precomposed.png +0 -0
  133. data/sample-apps/imports-contacts-app/public/apple-touch-icon.png +0 -0
  134. data/sample-apps/imports-contacts-app/public/examples/example.csv +2 -0
  135. data/sample-apps/imports-contacts-app/public/favicon.ico +0 -0
  136. data/sample-apps/imports-contacts-app/public/robots.txt +1 -0
  137. data/sample-apps/imports-contacts-app/tmp/.keep +0 -0
  138. data/sample-apps/search-result-paging-app/.env.template +4 -0
  139. data/sample-apps/search-result-paging-app/.gitignore +35 -0
  140. data/sample-apps/search-result-paging-app/.rspec +1 -0
  141. data/sample-apps/search-result-paging-app/.ruby-version +1 -0
  142. data/sample-apps/search-result-paging-app/Dockerfile +22 -0
  143. data/sample-apps/search-result-paging-app/Gemfile +35 -0
  144. data/sample-apps/search-result-paging-app/Gemfile.lock +279 -0
  145. data/sample-apps/search-result-paging-app/README.md +0 -0
  146. data/sample-apps/search-result-paging-app/Rakefile +6 -0
  147. data/sample-apps/search-result-paging-app/app/assets/config/manifest.js +3 -0
  148. data/sample-apps/search-result-paging-app/app/assets/images/.keep +0 -0
  149. data/sample-apps/search-result-paging-app/app/assets/javascripts/application.js +25 -0
  150. data/sample-apps/search-result-paging-app/app/assets/javascripts/cable.js +13 -0
  151. data/sample-apps/search-result-paging-app/app/assets/javascripts/channels/.keep +0 -0
  152. data/sample-apps/search-result-paging-app/app/assets/stylesheets/application.css +77 -0
  153. data/sample-apps/search-result-paging-app/app/controllers/application_controller.rb +12 -0
  154. data/sample-apps/search-result-paging-app/app/controllers/concerns/.keep +0 -0
  155. data/sample-apps/search-result-paging-app/app/controllers/concerns/exception_handler.rb +12 -0
  156. data/sample-apps/search-result-paging-app/app/controllers/home_controller.rb +14 -0
  157. data/sample-apps/search-result-paging-app/app/controllers/oauth/authorization_controller.rb +19 -0
  158. data/sample-apps/search-result-paging-app/app/helpers/application_helper.rb +2 -0
  159. data/sample-apps/search-result-paging-app/app/lib/services/hubspot/authorization/authorize.rb +17 -0
  160. data/sample-apps/search-result-paging-app/app/lib/services/hubspot/authorization/get_authorization_uri.rb +35 -0
  161. data/sample-apps/search-result-paging-app/app/lib/services/hubspot/authorization/tokens/base.rb +21 -0
  162. data/sample-apps/search-result-paging-app/app/lib/services/hubspot/authorization/tokens/generate.rb +28 -0
  163. data/sample-apps/search-result-paging-app/app/lib/services/hubspot/authorization/tokens/refresh.rb +35 -0
  164. data/sample-apps/search-result-paging-app/app/lib/services/hubspot/contacts/get_page.rb +26 -0
  165. data/sample-apps/search-result-paging-app/app/lib/services/hubspot/contacts/search.rb +35 -0
  166. data/sample-apps/search-result-paging-app/app/lib/services/hubspot/properties/create.rb +23 -0
  167. data/sample-apps/search-result-paging-app/app/lib/services/hubspot/properties/destroy.rb +16 -0
  168. data/sample-apps/search-result-paging-app/app/models/application_record.rb +3 -0
  169. data/sample-apps/search-result-paging-app/app/models/concerns/.keep +0 -0
  170. data/sample-apps/search-result-paging-app/app/views/home/index.html.erb +13 -0
  171. data/sample-apps/search-result-paging-app/app/views/layouts/application.html.erb +23 -0
  172. data/sample-apps/search-result-paging-app/app/views/oauth/authorization/login.html.erb +15 -0
  173. data/sample-apps/search-result-paging-app/app/views/shared/_header.html.erb +18 -0
  174. data/sample-apps/search-result-paging-app/bin/bundle +3 -0
  175. data/sample-apps/search-result-paging-app/bin/rails +9 -0
  176. data/sample-apps/search-result-paging-app/bin/rake +9 -0
  177. data/sample-apps/search-result-paging-app/bin/setup +36 -0
  178. data/sample-apps/search-result-paging-app/bin/spring +17 -0
  179. data/sample-apps/search-result-paging-app/bin/update +31 -0
  180. data/sample-apps/search-result-paging-app/bin/yarn +11 -0
  181. data/sample-apps/search-result-paging-app/config.ru +5 -0
  182. data/sample-apps/search-result-paging-app/config/application.rb +19 -0
  183. data/sample-apps/search-result-paging-app/config/boot.rb +3 -0
  184. data/sample-apps/search-result-paging-app/config/cable.yml +10 -0
  185. data/sample-apps/search-result-paging-app/config/database.yml +25 -0
  186. data/sample-apps/search-result-paging-app/config/environment.rb +5 -0
  187. data/sample-apps/search-result-paging-app/config/environments/development.rb +61 -0
  188. data/sample-apps/search-result-paging-app/config/environments/production.rb +94 -0
  189. data/sample-apps/search-result-paging-app/config/environments/test.rb +46 -0
  190. data/sample-apps/search-result-paging-app/config/initializers/assets.rb +14 -0
  191. data/sample-apps/search-result-paging-app/config/initializers/filter_parameter_logging.rb +4 -0
  192. data/sample-apps/search-result-paging-app/config/initializers/hubspot-api-client.rb +3 -0
  193. data/sample-apps/search-result-paging-app/config/initializers/mime_types.rb +1 -0
  194. data/sample-apps/search-result-paging-app/config/initializers/wrap_parameters.rb +14 -0
  195. data/sample-apps/search-result-paging-app/config/locales/en.yml +33 -0
  196. data/sample-apps/search-result-paging-app/config/puma.rb +34 -0
  197. data/sample-apps/search-result-paging-app/config/routes.rb +7 -0
  198. data/sample-apps/search-result-paging-app/config/spring.rb +6 -0
  199. data/sample-apps/search-result-paging-app/db/seeds.rb +7 -0
  200. data/sample-apps/search-result-paging-app/docker-compose.yml +11 -0
  201. data/sample-apps/search-result-paging-app/docker-entrypoint.sh +8 -0
  202. data/sample-apps/search-result-paging-app/lib/assets/.keep +0 -0
  203. data/sample-apps/search-result-paging-app/lib/tasks/.keep +0 -0
  204. data/sample-apps/search-result-paging-app/lib/tasks/search_contacts.rake +36 -0
  205. data/sample-apps/search-result-paging-app/log/.keep +0 -0
  206. data/sample-apps/search-result-paging-app/package.json +5 -0
  207. data/sample-apps/search-result-paging-app/public/404.html +67 -0
  208. data/sample-apps/search-result-paging-app/public/422.html +67 -0
  209. data/sample-apps/search-result-paging-app/public/500.html +66 -0
  210. data/sample-apps/search-result-paging-app/public/apple-touch-icon-precomposed.png +0 -0
  211. data/sample-apps/search-result-paging-app/public/apple-touch-icon.png +0 -0
  212. data/sample-apps/search-result-paging-app/public/favicon.ico +0 -0
  213. data/sample-apps/search-result-paging-app/public/robots.txt +1 -0
  214. data/sample-apps/search-result-paging-app/tmp/.keep +0 -0
  215. data/sample-apps/webhooks-contacts-app/.env.template +3 -1
  216. data/sample-apps/webhooks-contacts-app/Gemfile.lock +1 -1
  217. data/sample-apps/webhooks-contacts-app/README.md +24 -21
  218. data/sample-apps/webhooks-contacts-app/app/assets/stylesheets/application.css +7 -55
  219. data/sample-apps/webhooks-contacts-app/app/controllers/events_controller.rb +8 -10
  220. data/sample-apps/webhooks-contacts-app/app/controllers/home_controller.rb +44 -0
  221. data/sample-apps/webhooks-contacts-app/app/controllers/oauth/authorization_controller.rb +6 -6
  222. data/sample-apps/webhooks-contacts-app/app/controllers/webhooks_controller.rb +1 -1
  223. data/sample-apps/webhooks-contacts-app/app/lib/services/hubspot/authorization/authorize.rb +17 -0
  224. data/sample-apps/webhooks-contacts-app/app/lib/services/hubspot/authorization/get_authorization_uri.rb +35 -0
  225. data/sample-apps/webhooks-contacts-app/app/lib/services/hubspot/authorization/tokens/base.rb +21 -0
  226. data/sample-apps/webhooks-contacts-app/app/lib/services/hubspot/authorization/tokens/generate.rb +28 -0
  227. data/sample-apps/webhooks-contacts-app/app/lib/services/hubspot/authorization/tokens/refresh.rb +35 -0
  228. data/sample-apps/webhooks-contacts-app/app/lib/services/hubspot/webhooks/configure_target_url.rb +25 -0
  229. data/sample-apps/webhooks-contacts-app/app/lib/services/hubspot/webhooks/create_or_activate_subscription.rb +44 -0
  230. data/sample-apps/webhooks-contacts-app/app/lib/services/hubspot/webhooks/handle.rb +13 -1
  231. data/sample-apps/webhooks-contacts-app/app/lib/services/hubspot/webhooks/pause_active_subscriptions.rb +39 -0
  232. data/sample-apps/webhooks-contacts-app/app/models/event.rb +3 -0
  233. data/sample-apps/webhooks-contacts-app/app/views/events/index.html.erb +14 -16
  234. data/sample-apps/webhooks-contacts-app/app/views/home/index.html.erb +47 -0
  235. data/sample-apps/webhooks-contacts-app/app/views/oauth/authorization/login.html.erb +6 -6
  236. data/sample-apps/webhooks-contacts-app/app/views/shared/_header.html.erb +3 -0
  237. data/sample-apps/webhooks-contacts-app/config/database.yml +9 -9
  238. data/sample-apps/webhooks-contacts-app/config/routes.rb +2 -0
  239. data/sample-apps/webhooks-contacts-app/db/schema.rb +2 -5
  240. data/sample-apps/webhooks-contacts-app/docker-compose.yml +13 -10
  241. metadata +612 -10
@@ -0,0 +1,27 @@
1
+ # HubSpot Ruby Imports Contacts App
2
+
3
+ This is a sample app for the [hubspot-ruby SDK](../../../../). Currently, this app focuses on demonstrating the functionality of [Imports API](https://developers.hubspot.com/docs/api/crm/imports) endpoints and their related actions.
4
+
5
+ Please see the documentation on [Creating an app in HubSpot](https://developers.hubspot.com/docs-beta/creating-an-app)
6
+
7
+ ### HubSpot Public API endpoints used in this application
8
+
9
+ - [Imports](https://developers.hubspot.com/docs/api/crm/imports)
10
+
11
+ ### Setup App
12
+
13
+ Make sure you have [Docker Compose](https://docs.docker.com/compose/) installed.
14
+
15
+ ### Configure
16
+
17
+ 1. Copy .env.template to .env
18
+ 2. Paste your HUBSPOT_CLIENT_ID and HUBSPOT_CLIENT_SECRET
19
+
20
+ ### Running
21
+
22
+ The best way to run this project (with the least configuration), is using docker compose. Change to the webroot and start it
23
+
24
+ ```bash
25
+ docker-compose up --build
26
+ ```
27
+ You should now be able to navigate to [http://localhost:3000](http://localhost:3000) and use the application.
@@ -0,0 +1,6 @@
1
+ # Add your own tasks in files placed in lib/tasks ending in .rake,
2
+ # for example lib/tasks/capistrano.rake, and they will automatically be available to Rake.
3
+
4
+ require_relative 'config/application'
5
+
6
+ Rails.application.load_tasks
@@ -0,0 +1,3 @@
1
+ //= link_tree ../images
2
+ //= link_directory ../javascripts .js
3
+ //= link_directory ../stylesheets .css
@@ -0,0 +1,15 @@
1
+ // This is a manifest file that'll be compiled into application.js, which will include all the files
2
+ // listed below.
3
+ //
4
+ // Any JavaScript/Coffee file within this directory, lib/assets/javascripts, or any plugin's
5
+ // vendor/assets/javascripts directory can be referenced here using a relative path.
6
+ //
7
+ // It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the
8
+ // compiled file. JavaScript code in this file should be added after the last require_* statement.
9
+ //
10
+ // Read Sprockets README (https://github.com/rails/sprockets#sprockets-directives) for details
11
+ // about supported directives.
12
+ //
13
+ //= require rails-ujs
14
+ //= require activestorage
15
+ //= require_tree .
@@ -0,0 +1,13 @@
1
+ // Action Cable provides the framework to deal with WebSockets in Rails.
2
+ // You can generate new channels where WebSocket features live using the `rails generate channel` command.
3
+ //
4
+ //= require action_cable
5
+ //= require_self
6
+ //= require_tree ./channels
7
+
8
+ (function() {
9
+ this.App || (this.App = {});
10
+
11
+ App.cable = ActionCable.createConsumer();
12
+
13
+ }).call(this);
@@ -0,0 +1,87 @@
1
+ /*
2
+ * This is a manifest file that'll be compiled into application.css, which will include all the files
3
+ * listed below.
4
+ *
5
+ * Any CSS and SCSS file within this directory, lib/assets/stylesheets, or any plugin's
6
+ * vendor/assets/stylesheets directory can be referenced here using a relative path.
7
+ *
8
+ * You're free to add application-wide styles to this file and they'll appear at the bottom of the
9
+ * compiled file so the styles you add here take precedence over styles defined in any other CSS/SCSS
10
+ * files in this directory. Styles in this file should be added after the last require_* statement.
11
+ * It is generally better to create a new file per style scope.
12
+ *
13
+ *= require_tree .
14
+ *= require_self
15
+ */
16
+
17
+ .wrapper .container {
18
+ padding-bottom: 2rem;
19
+ padding-top: 2rem;
20
+ }
21
+
22
+ .navigation {
23
+ background: #f4f5f6;
24
+ border-bottom: .1rem solid #d1d1d1;
25
+ display: block;
26
+ height: 5.2rem;
27
+ left: 0;
28
+ max-width: 100%;
29
+ width: 100%;
30
+ }
31
+
32
+ .navigation .container {
33
+ padding-bottom: 0;
34
+ padding-top: 0
35
+ }
36
+
37
+ .navigation .navigation-list {
38
+ list-style: none;
39
+ margin-bottom: 0;
40
+ }
41
+
42
+ .navigation .navigation-item {
43
+ float: left;
44
+ margin-bottom: 0;
45
+ margin-left: 2.5rem;
46
+ position: relative
47
+ }
48
+
49
+ .navigation .navigation-title, .navigation .title {
50
+ color: #606c76;
51
+ position: relative
52
+ }
53
+
54
+ .navigation .navigation-link, .navigation .navigation-title, .navigation .title {
55
+ display: inline;
56
+ font-size: 1.6rem;
57
+ line-height: 5.2rem;
58
+ padding: 0;
59
+ text-decoration: none
60
+ }
61
+
62
+ .navigation .navigation-link.active {
63
+ color: #606c76
64
+ }
65
+
66
+ .row.authorize-button {
67
+ justify-content: center;
68
+ }
69
+
70
+ .text-center {
71
+ text-align: center;
72
+ }
73
+
74
+ .error-wrapper .result {
75
+ color: white;
76
+ background-color: red;
77
+ }
78
+
79
+ input[type=datetime-local] {
80
+ width: 100%;
81
+ height: 3.8rem;
82
+ padding: .6rem 1.0rem;
83
+ }
84
+
85
+ h3.alert-success {
86
+ text-align: center;
87
+ }
@@ -0,0 +1,12 @@
1
+ class ApplicationController < ActionController::Base
2
+ include ExceptionHandler
3
+
4
+ before_action :check_env_variables
5
+
6
+ private
7
+
8
+ def check_env_variables
9
+ missing_vars = %w[HUBSPOT_CLIENT_ID HUBSPOT_CLIENT_SECRET].select { |var| ENV[var].blank? }
10
+ raise(ExceptionHandler::HubspotError.new, "Please specify #{missing_vars.join(', ')} in .env") if missing_vars.present?
11
+ end
12
+ end
@@ -0,0 +1,12 @@
1
+ module ExceptionHandler
2
+ extend ActiveSupport::Concern
3
+
4
+ class HubspotError < StandardError; end
5
+
6
+ included do
7
+ rescue_from HubspotError do |error|
8
+ @error = error
9
+ render template: 'imports/index'
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,24 @@
1
+ class ImportsController < ApplicationController
2
+ before_action :authorize
3
+
4
+ def index
5
+ end
6
+
7
+ def create
8
+ Services::Hubspot::Imports::Create.new(uploaded_file: params[:file]).call
9
+ redirect_to :imports, notice: 'Import succesfully created.'
10
+ end
11
+
12
+ def download_example
13
+ send_file 'public/examples/example.csv', type: 'application/octet-stream', status: 202
14
+ end
15
+
16
+ private
17
+
18
+ def authorize
19
+ redirect_to login_path and return if session['tokens'].blank?
20
+
21
+ session['tokens'] = Services::Authorization::Tokens::Refresh.new(tokens: session['tokens'], request: request).call
22
+ Services::Authorization::AuthorizeHubspot.new(tokens: session['tokens']).call
23
+ end
24
+ end
@@ -0,0 +1,19 @@
1
+ module Oauth
2
+ class AuthorizationController < ApplicationController
3
+ def authorize
4
+ url = Services::Authorization::GetAuthorizationUri.new(request: request).call
5
+ redirect_to url
6
+ end
7
+
8
+ def callback
9
+ session[:tokens] = Services::Authorization::Tokens::Generate.new(
10
+ code: params[:code],
11
+ request: request
12
+ ).call
13
+ Services::Authorization::AuthorizeHubspot.new(tokens: session[:tokens]).call
14
+ redirect_to '/imports'
15
+ end
16
+
17
+ def login;end
18
+ end
19
+ end
@@ -0,0 +1,2 @@
1
+ module ApplicationHelper
2
+ end
@@ -13,7 +13,7 @@ module Services
13
13
  ::Hubspot::OAuthHelper.authorize_url(
14
14
  client_id: ENV['HUBSPOT_CLIENT_ID'],
15
15
  redirect_uri: redirect_uri,
16
- scope: %w[contacts]
16
+ scope: %w[crm.import]
17
17
  )
18
18
  end
19
19
 
@@ -8,8 +8,8 @@ module Services
8
8
  end
9
9
 
10
10
  def call
11
- tokens_api = ::Hubspot::OAuth::TokensApi.new
12
- tokens = tokens_api.post_oauth_v1_token(
11
+ default_api = ::Hubspot::OAuth::DefaultApi.new
12
+ tokens = default_api.create_token(
13
13
  grant_type: :authorization_code,
14
14
  code: @code,
15
15
  redirect_uri: redirect_uri,
@@ -3,7 +3,7 @@ module Services
3
3
  module Tokens
4
4
  class Refresh < Tokens::Base
5
5
  def initialize(tokens:, request:)
6
- @tokens = tokens.with_indifferent_access
6
+ @tokens = tokens
7
7
  @request = request
8
8
  end
9
9
 
@@ -15,8 +15,8 @@ module Services
15
15
  private
16
16
 
17
17
  def refresh_tokens
18
- tokens_api = ::Hubspot::OAuth::TokensApi.new
19
- tokens = tokens_api.post_oauth_v1_token(
18
+ default_api = ::Hubspot::OAuth::DefaultApi.new
19
+ tokens = default_api.create_token(
20
20
  grant_type: :refresh_token,
21
21
  refresh_token: @tokens[:refresh_token],
22
22
  redirect_uri: redirect_uri,
@@ -25,7 +25,6 @@ module Services
25
25
  return_type: 'Object'
26
26
  )
27
27
  tokens[:expires_at] = expires_at(tokens[:expires_in])
28
- Token.instance.update!(tokens)
29
28
  tokens
30
29
  end
31
30
  end
@@ -0,0 +1,52 @@
1
+ module Services
2
+ module Hubspot
3
+ module Imports
4
+ class Create
5
+ def initialize(uploaded_file:)
6
+ @file = copy_file_to_uploads(uploaded_file)
7
+ @filename = uploaded_file.original_filename
8
+ end
9
+
10
+ def call
11
+ core_api = ::Hubspot::Crm::Imports::CoreApi.new
12
+ core_api.create(import_request: import_request(@filename), files: @file, auth_names: 'oauth2')
13
+ end
14
+
15
+ private
16
+
17
+ def import_request(filename)
18
+ {
19
+ "name": "test_import",
20
+ "files": [
21
+ {
22
+ "fileName": filename,
23
+ "fileImportPage": {
24
+ "hasHeader": true,
25
+ "columnMappings": [
26
+ {
27
+ "columnName": "First Name",
28
+ "propertyName": "firstname",
29
+ "columnObjectType": "CONTACT",
30
+ },
31
+ {
32
+ "columnName": "Email",
33
+ "propertyName": "email",
34
+ "columnObjectType": "CONTACT",
35
+ },
36
+ ]
37
+ }
38
+ }
39
+ ]
40
+ }.to_json
41
+ end
42
+
43
+ def copy_file_to_uploads(uploaded_file)
44
+ tmp = uploaded_file.tempfile
45
+ destiny_file = File.join('public', 'uploads', uploaded_file.original_filename)
46
+ FileUtils.cp tmp.path, destiny_file
47
+ File.open(destiny_file)
48
+ end
49
+ end
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,3 @@
1
+ class ApplicationRecord < ActiveRecord::Base
2
+ self.abstract_class = true
3
+ end
@@ -0,0 +1,70 @@
1
+ <div class="container">
2
+ <% if @error.present? %>
3
+ <h3><%= @error.message %></h3>
4
+ <% else %>
5
+ <h3 class="text-center">Select File</h3>
6
+ <p>You can take an example of file <%= link_to "here", download_path, target: "_blank"%>.</p>
7
+ <% if flash[:notice] %>
8
+ <div class="notice"><%= flash[:notice] %></div>
9
+ <% end %>
10
+ <%= form_tag('/imports', method: 'post', multipart: true) do %>
11
+ <%= file_field_tag(:file) %>
12
+ <%= submit_tag("Upload") %>
13
+ <% end %>
14
+
15
+ <pre>
16
+ module Services
17
+ module Hubspot
18
+ module Imports
19
+ class Create
20
+ def initialize(uploaded_file:)
21
+ @file = copy_file_to_uploads(uploaded_file)
22
+ @filename = uploaded_file.original_filename
23
+ end
24
+
25
+ def call
26
+ core_api = ::Hubspot::Crm::Imports::CoreApi.new
27
+ core_api.create(import_request: import_request(@filename), files: @file, auth_names: 'oauth2')
28
+ end
29
+
30
+ private
31
+
32
+ def import_request(filename)
33
+ {
34
+ "name": "test_import",
35
+ "files": [
36
+ {
37
+ "fileName": filename,
38
+ "fileImportPage": {
39
+ "hasHeader": true,
40
+ "columnMappings": [
41
+ {
42
+ "columnName": "First Name",
43
+ "propertyName": "firstname",
44
+ "columnObjectType": "CONTACT",
45
+ },
46
+ {
47
+ "columnName": "Email",
48
+ "propertyName": "email",
49
+ "columnObjectType": "CONTACT",
50
+ },
51
+ ]
52
+ }
53
+ }
54
+ ]
55
+ }.to_json
56
+ end
57
+
58
+ def copy_file_to_uploads(uploaded_file)
59
+ tmp = uploaded_file.tempfile
60
+ destiny_file = File.join('public', 'uploads', uploaded_file.original_filename)
61
+ FileUtils.cp tmp.path, destiny_file
62
+ File.open(destiny_file)
63
+ end
64
+ end
65
+ end
66
+ end
67
+ end
68
+ </pre>
69
+ <% end %>
70
+ </div>
@@ -0,0 +1,23 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <title>HubSpot Ruby imports contacts app</title>
6
+ <%= csrf_meta_tags %>
7
+ <%= csp_meta_tag %>
8
+
9
+ <link rel="stylesheet" href="//fonts.googleapis.com/css?family=Roboto:300,300italic,700,700italic">
10
+ <link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/normalize/5.0.0/normalize.css">
11
+ <link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/milligram/1.3.0/milligram.css">
12
+
13
+ <%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' %>
14
+ <%= javascript_include_tag 'application', 'data-turbolinks-track': 'reload' %>
15
+ </head>
16
+
17
+ <body>
18
+ <%= render partial: "shared/header"%>
19
+ <div class="wrapper">
20
+ <%= yield %>
21
+ </div>
22
+ </body>
23
+ </html>