hubspot-api-client 6.0.0 → 7.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (306) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +21 -0
  3. data/README.md +41 -0
  4. data/lib/hubspot-api-client.rb +55 -0
  5. data/lib/hubspot/codegen/cms/audit-logs/configuration.rb +0 -7
  6. data/lib/hubspot/codegen/cms/domains/configuration.rb +0 -7
  7. data/lib/hubspot/codegen/cms/performance/configuration.rb +0 -14
  8. data/lib/hubspot/codegen/cms/site-search/configuration.rb +0 -7
  9. data/lib/hubspot/codegen/cms/url-redirects/configuration.rb +0 -7
  10. data/lib/hubspot/codegen/crm/associations/configuration.rb +0 -7
  11. data/lib/hubspot/codegen/crm/companies/configuration.rb +0 -7
  12. data/lib/hubspot/codegen/crm/contacts/configuration.rb +0 -7
  13. data/lib/hubspot/codegen/crm/deals/configuration.rb +0 -7
  14. data/lib/hubspot/codegen/crm/extensions/cards/configuration.rb +0 -14
  15. data/lib/hubspot/codegen/crm/imports/configuration.rb +0 -7
  16. data/lib/hubspot/codegen/crm/line_items/configuration.rb +0 -7
  17. data/lib/hubspot/codegen/crm/objects/api/associations_api.rb +278 -0
  18. data/lib/hubspot/codegen/crm/objects/api/basic_api.rb +405 -0
  19. data/lib/hubspot/codegen/crm/objects/api/batch_api.rb +309 -0
  20. data/lib/hubspot/codegen/crm/objects/api/search_api.rb +96 -0
  21. data/lib/hubspot/codegen/crm/objects/api_client.rb +424 -0
  22. data/lib/hubspot/codegen/crm/objects/api_error.rb +61 -0
  23. data/lib/hubspot/codegen/crm/objects/configuration.rb +258 -0
  24. data/lib/hubspot/codegen/crm/objects/models/associated_id.rb +229 -0
  25. data/lib/hubspot/codegen/crm/objects/models/batch_input_simple_public_object_batch_input.rb +217 -0
  26. data/lib/hubspot/codegen/crm/objects/models/batch_input_simple_public_object_id.rb +217 -0
  27. data/lib/hubspot/codegen/crm/objects/models/batch_input_simple_public_object_input.rb +217 -0
  28. data/lib/hubspot/codegen/crm/objects/models/batch_read_input_simple_public_object_id.rb +242 -0
  29. data/lib/hubspot/codegen/crm/objects/models/batch_response_simple_public_object.rb +313 -0
  30. data/lib/hubspot/codegen/crm/objects/models/batch_response_simple_public_object_with_errors.rb +333 -0
  31. data/lib/hubspot/codegen/crm/objects/models/collection_response_associated_id.rb +226 -0
  32. data/lib/hubspot/codegen/crm/objects/models/collection_response_simple_public_object.rb +226 -0
  33. data/lib/hubspot/codegen/crm/objects/models/collection_response_with_total_simple_public_object.rb +241 -0
  34. data/lib/hubspot/codegen/crm/objects/models/error.rb +292 -0
  35. data/lib/hubspot/codegen/crm/objects/models/error_detail.rb +258 -0
  36. data/lib/hubspot/codegen/crm/objects/models/filter.rb +272 -0
  37. data/lib/hubspot/codegen/crm/objects/models/filter_group.rb +217 -0
  38. data/lib/hubspot/codegen/crm/objects/models/next_page.rb +224 -0
  39. data/lib/hubspot/codegen/crm/objects/models/paging.rb +219 -0
  40. data/lib/hubspot/codegen/crm/objects/models/previous_page.rb +224 -0
  41. data/lib/hubspot/codegen/crm/objects/models/public_object_search_request.rb +286 -0
  42. data/lib/hubspot/codegen/crm/objects/models/simple_public_object.rb +288 -0
  43. data/lib/hubspot/codegen/crm/objects/models/simple_public_object_batch_input.rb +231 -0
  44. data/lib/hubspot/codegen/crm/objects/models/simple_public_object_id.rb +215 -0
  45. data/lib/hubspot/codegen/crm/objects/models/simple_public_object_input.rb +217 -0
  46. data/lib/hubspot/codegen/crm/owners/configuration.rb +0 -7
  47. data/lib/hubspot/codegen/crm/pipelines/configuration.rb +0 -7
  48. data/lib/hubspot/codegen/crm/products/configuration.rb +0 -7
  49. data/lib/hubspot/codegen/crm/properties/configuration.rb +0 -7
  50. data/lib/hubspot/codegen/crm/quotes/configuration.rb +0 -7
  51. data/lib/hubspot/codegen/crm/schemas/api/core_api.rb +478 -0
  52. data/lib/hubspot/codegen/crm/schemas/api/default_api.rb +84 -0
  53. data/lib/hubspot/codegen/crm/schemas/api_client.rb +424 -0
  54. data/lib/hubspot/codegen/crm/schemas/api_error.rb +61 -0
  55. data/lib/hubspot/codegen/crm/schemas/configuration.rb +258 -0
  56. data/lib/hubspot/codegen/crm/schemas/models/association_definition.rb +350 -0
  57. data/lib/hubspot/codegen/crm/schemas/models/association_definition_egg.rb +315 -0
  58. data/lib/hubspot/codegen/crm/schemas/models/collection_response_object_schema.rb +226 -0
  59. data/lib/hubspot/codegen/crm/schemas/models/error.rb +292 -0
  60. data/lib/hubspot/codegen/crm/schemas/models/error_detail.rb +258 -0
  61. data/lib/hubspot/codegen/crm/schemas/models/next_page.rb +224 -0
  62. data/lib/hubspot/codegen/crm/schemas/models/object_schema.rb +389 -0
  63. data/lib/hubspot/codegen/crm/schemas/models/object_schema_egg.rb +325 -0
  64. data/lib/hubspot/codegen/crm/schemas/models/object_type_definition.rb +364 -0
  65. data/lib/hubspot/codegen/crm/schemas/models/object_type_definition_labels.rb +221 -0
  66. data/lib/hubspot/codegen/crm/schemas/models/object_type_definition_patch.rb +265 -0
  67. data/lib/hubspot/codegen/crm/schemas/models/object_type_property_create.rb +356 -0
  68. data/lib/hubspot/codegen/crm/schemas/models/option.rb +266 -0
  69. data/lib/hubspot/codegen/crm/schemas/models/option_input.rb +271 -0
  70. data/lib/hubspot/codegen/crm/schemas/models/paging.rb +219 -0
  71. data/lib/hubspot/codegen/crm/schemas/models/previous_page.rb +224 -0
  72. data/lib/hubspot/codegen/crm/schemas/models/property.rb +465 -0
  73. data/lib/hubspot/codegen/crm/schemas/models/property_modification_metadata.rb +252 -0
  74. data/lib/hubspot/codegen/crm/tickets/configuration.rb +0 -7
  75. data/lib/hubspot/codegen/crm/timeline/configuration.rb +0 -7
  76. data/lib/hubspot/codegen/oauth/configuration.rb +0 -21
  77. data/lib/hubspot/codegen/webhooks/api/subscriptions_api.rb +16 -12
  78. data/lib/hubspot/codegen/webhooks/configuration.rb +0 -14
  79. data/lib/hubspot/codegen/webhooks/models/batch_response_subscription_response.rb +1 -21
  80. data/lib/hubspot/codegen/webhooks/models/batch_response_subscription_response_with_errors.rb +331 -0
  81. data/lib/hubspot/codegen/webhooks/models/settings_response.rb +28 -28
  82. data/lib/hubspot/codegen/webhooks/models/subscription_create_request.rb +16 -13
  83. data/lib/hubspot/codegen/webhooks/models/subscription_patch_request.rb +7 -7
  84. data/lib/hubspot/codegen/webhooks/models/subscription_response.rb +45 -39
  85. data/lib/hubspot/version.rb +1 -1
  86. data/sample-apps/companies-app/Gemfile.lock +2 -2
  87. data/sample-apps/companies-app/app/lib/services/hubspot/associations/create.rb +1 -1
  88. data/sample-apps/companies-app/app/lib/services/hubspot/associations/delete.rb +1 -1
  89. data/sample-apps/companies-app/app/lib/services/hubspot/associations/get_by_id.rb +2 -2
  90. data/sample-apps/companies-app/app/lib/services/hubspot/companies/create.rb +1 -1
  91. data/sample-apps/companies-app/app/lib/services/hubspot/companies/search.rb +1 -1
  92. data/sample-apps/companies-app/app/lib/services/hubspot/companies/update.rb +1 -2
  93. data/sample-apps/companies-app/app/lib/services/hubspot/contacts/search.rb +1 -1
  94. data/sample-apps/contacts-app/Gemfile.lock +2 -2
  95. data/sample-apps/contacts-app/app/lib/services/hubspot/contacts/create.rb +1 -1
  96. data/sample-apps/contacts-app/app/lib/services/hubspot/contacts/search.rb +1 -1
  97. data/sample-apps/contacts-app/app/lib/services/hubspot/contacts/update.rb +1 -2
  98. data/sample-apps/contacts-app/app/lib/services/hubspot/properties/create.rb +1 -2
  99. data/sample-apps/contacts-app/app/lib/services/hubspot/properties/update.rb +1 -2
  100. data/sample-apps/leaky-bucket-app/app/lib/services/hubspot/contacts/archive_batch.rb +1 -1
  101. data/sample-apps/leaky-bucket-app/app/lib/services/hubspot/contacts/create_batch.rb +1 -1
  102. data/sample-apps/oauth-app/app/lib/services/hubspot/contacts/create.rb +1 -1
  103. data/sample-apps/oauth-app/app/lib/services/hubspot/contacts/search.rb +1 -1
  104. data/sample-apps/oauth-app/app/lib/services/hubspot/contacts/update.rb +1 -2
  105. data/sample-apps/rate-limits-redis-sample-app/app/lib/services/hubspot/contacts/archive_batch.rb +1 -1
  106. data/sample-apps/rate-limits-redis-sample-app/app/lib/services/hubspot/contacts/create_batch.rb +1 -1
  107. data/sample-apps/search-result-paging-app/app/lib/services/hubspot/contacts/search.rb +1 -1
  108. data/sample-apps/search-result-paging-app/app/lib/services/hubspot/properties/create.rb +1 -2
  109. data/sample-apps/timeline-events-app/.env.template +5 -0
  110. data/sample-apps/timeline-events-app/.gitignore +35 -0
  111. data/sample-apps/timeline-events-app/.rspec +1 -0
  112. data/sample-apps/timeline-events-app/.ruby-version +1 -0
  113. data/sample-apps/timeline-events-app/Dockerfile +22 -0
  114. data/sample-apps/timeline-events-app/Gemfile +33 -0
  115. data/sample-apps/timeline-events-app/Gemfile.lock +271 -0
  116. data/sample-apps/timeline-events-app/README.md +0 -0
  117. data/sample-apps/timeline-events-app/Rakefile +6 -0
  118. data/sample-apps/timeline-events-app/app/assets/config/manifest.js +3 -0
  119. data/sample-apps/timeline-events-app/app/assets/images/.keep +0 -0
  120. data/sample-apps/timeline-events-app/app/assets/javascripts/application.js +15 -0
  121. data/sample-apps/timeline-events-app/app/assets/javascripts/cable.js +13 -0
  122. data/sample-apps/timeline-events-app/app/assets/javascripts/channels/.keep +0 -0
  123. data/sample-apps/timeline-events-app/app/assets/stylesheets/application.css +101 -0
  124. data/sample-apps/timeline-events-app/app/controllers/application_controller.rb +12 -0
  125. data/sample-apps/timeline-events-app/app/controllers/concerns/.keep +0 -0
  126. data/sample-apps/timeline-events-app/app/controllers/concerns/exception_handler.rb +12 -0
  127. data/sample-apps/timeline-events-app/app/controllers/oauth/authorization_controller.rb +19 -0
  128. data/sample-apps/timeline-events-app/app/controllers/timeline_events_controller.rb +37 -0
  129. data/sample-apps/timeline-events-app/app/helpers/application_helper.rb +2 -0
  130. data/sample-apps/timeline-events-app/app/lib/services/authorization/authorize_hubspot.rb +15 -0
  131. data/sample-apps/timeline-events-app/app/lib/services/authorization/get_authorization_uri.rb +33 -0
  132. data/sample-apps/timeline-events-app/app/lib/services/authorization/tokens/base.rb +19 -0
  133. data/sample-apps/timeline-events-app/app/lib/services/authorization/tokens/generate.rb +26 -0
  134. data/sample-apps/timeline-events-app/app/lib/services/authorization/tokens/refresh.rb +33 -0
  135. data/sample-apps/timeline-events-app/app/lib/services/hubspot/contacts/search.rb +37 -0
  136. data/sample-apps/timeline-events-app/app/lib/services/hubspot/timeline/create_event.rb +20 -0
  137. data/sample-apps/timeline-events-app/app/lib/services/hubspot/timeline/create_template.rb +39 -0
  138. data/sample-apps/timeline-events-app/app/models/application_record.rb +3 -0
  139. data/sample-apps/timeline-events-app/app/models/concerns/.keep +0 -0
  140. data/sample-apps/timeline-events-app/app/views/layouts/application.html.erb +23 -0
  141. data/sample-apps/timeline-events-app/app/views/oauth/authorization/login.html.erb +15 -0
  142. data/sample-apps/timeline-events-app/app/views/shared/_header.html.erb +12 -0
  143. data/sample-apps/timeline-events-app/app/views/timeline_events/index.html.erb +55 -0
  144. data/sample-apps/timeline-events-app/bin/bundle +3 -0
  145. data/sample-apps/timeline-events-app/bin/rails +9 -0
  146. data/sample-apps/timeline-events-app/bin/rake +9 -0
  147. data/sample-apps/timeline-events-app/bin/setup +36 -0
  148. data/sample-apps/timeline-events-app/bin/spring +17 -0
  149. data/sample-apps/timeline-events-app/bin/update +31 -0
  150. data/sample-apps/timeline-events-app/bin/yarn +11 -0
  151. data/sample-apps/timeline-events-app/config.ru +5 -0
  152. data/sample-apps/timeline-events-app/config/application.rb +19 -0
  153. data/sample-apps/timeline-events-app/config/boot.rb +3 -0
  154. data/sample-apps/timeline-events-app/config/database.yml +25 -0
  155. data/sample-apps/timeline-events-app/config/environment.rb +5 -0
  156. data/sample-apps/timeline-events-app/config/environments/development.rb +61 -0
  157. data/sample-apps/timeline-events-app/config/environments/production.rb +94 -0
  158. data/sample-apps/timeline-events-app/config/environments/test.rb +46 -0
  159. data/sample-apps/timeline-events-app/config/initializers/assets.rb +14 -0
  160. data/sample-apps/timeline-events-app/config/initializers/filter_parameter_logging.rb +4 -0
  161. data/sample-apps/timeline-events-app/config/initializers/hubspot-api-client.rb +3 -0
  162. data/sample-apps/timeline-events-app/config/initializers/mime_types.rb +1 -0
  163. data/sample-apps/timeline-events-app/config/initializers/wrap_parameters.rb +14 -0
  164. data/sample-apps/timeline-events-app/config/locales/en.yml +33 -0
  165. data/sample-apps/timeline-events-app/config/puma.rb +34 -0
  166. data/sample-apps/timeline-events-app/config/routes.rb +7 -0
  167. data/sample-apps/timeline-events-app/config/spring.rb +6 -0
  168. data/sample-apps/timeline-events-app/db/seeds.rb +7 -0
  169. data/sample-apps/timeline-events-app/docker-compose.yml +11 -0
  170. data/sample-apps/timeline-events-app/docker-entrypoint.sh +8 -0
  171. data/sample-apps/timeline-events-app/lib/assets/.keep +0 -0
  172. data/sample-apps/timeline-events-app/lib/tasks/.keep +0 -0
  173. data/sample-apps/timeline-events-app/log/.keep +0 -0
  174. data/sample-apps/timeline-events-app/package.json +5 -0
  175. data/sample-apps/timeline-events-app/public/404.html +67 -0
  176. data/sample-apps/timeline-events-app/public/422.html +67 -0
  177. data/sample-apps/timeline-events-app/public/500.html +66 -0
  178. data/sample-apps/timeline-events-app/public/apple-touch-icon-precomposed.png +0 -0
  179. data/sample-apps/timeline-events-app/public/apple-touch-icon.png +0 -0
  180. data/sample-apps/timeline-events-app/public/favicon.ico +0 -0
  181. data/sample-apps/timeline-events-app/public/robots.txt +1 -0
  182. data/sample-apps/timeline-events-app/spec/rails_helper.rb +42 -0
  183. data/sample-apps/timeline-events-app/spec/spec_helper.rb +11 -0
  184. data/sample-apps/timeline-events-app/tmp/.keep +0 -0
  185. data/sample-apps/trello-integration-app/.env.template +7 -0
  186. data/sample-apps/trello-integration-app/.gitignore +35 -0
  187. data/sample-apps/trello-integration-app/.rspec +1 -0
  188. data/sample-apps/trello-integration-app/.ruby-version +1 -0
  189. data/sample-apps/trello-integration-app/Dockerfile +22 -0
  190. data/sample-apps/trello-integration-app/Gemfile +38 -0
  191. data/sample-apps/trello-integration-app/Gemfile.lock +314 -0
  192. data/sample-apps/trello-integration-app/README.md +31 -0
  193. data/sample-apps/trello-integration-app/Rakefile +6 -0
  194. data/sample-apps/trello-integration-app/app/assets/config/manifest.js +3 -0
  195. data/sample-apps/trello-integration-app/app/assets/images/.keep +0 -0
  196. data/sample-apps/trello-integration-app/app/assets/images/right-arrow.png +0 -0
  197. data/sample-apps/trello-integration-app/app/assets/javascripts/application.js +22 -0
  198. data/sample-apps/trello-integration-app/app/assets/javascripts/cable.js +13 -0
  199. data/sample-apps/trello-integration-app/app/assets/javascripts/channels/.keep +0 -0
  200. data/sample-apps/trello-integration-app/app/assets/javascripts/jquery-spinner.min.js +11071 -0
  201. data/sample-apps/trello-integration-app/app/assets/javascripts/lodash.js +15972 -0
  202. data/sample-apps/trello-integration-app/app/assets/javascripts/mappings.js +78 -0
  203. data/sample-apps/trello-integration-app/app/assets/javascripts/typeahead.bundle.min.js +8 -0
  204. data/sample-apps/trello-integration-app/app/assets/stylesheets/application.css +46 -0
  205. data/sample-apps/trello-integration-app/app/assets/stylesheets/authorization.scss +34 -0
  206. data/sample-apps/trello-integration-app/app/assets/stylesheets/jquery-spinner.css +33 -0
  207. data/sample-apps/trello-integration-app/app/assets/stylesheets/mappings.scss +55 -0
  208. data/sample-apps/trello-integration-app/app/assets/stylesheets/navigation.scss +43 -0
  209. data/sample-apps/trello-integration-app/app/assets/stylesheets/search_frame.scss +81 -0
  210. data/sample-apps/trello-integration-app/app/controllers/application_controller.rb +38 -0
  211. data/sample-apps/trello-integration-app/app/controllers/concerns/.keep +0 -0
  212. data/sample-apps/trello-integration-app/app/controllers/concerns/exception_handler.rb +12 -0
  213. data/sample-apps/trello-integration-app/app/controllers/home_controller.rb +20 -0
  214. data/sample-apps/trello-integration-app/app/controllers/mappings_controller.rb +64 -0
  215. data/sample-apps/trello-integration-app/app/controllers/oauth/authorization_controller.rb +28 -0
  216. data/sample-apps/trello-integration-app/app/controllers/trello/cards_controller.rb +94 -0
  217. data/sample-apps/trello-integration-app/app/controllers/trello/webhooks_controller.rb +30 -0
  218. data/sample-apps/trello-integration-app/app/helpers/application_helper.rb +2 -0
  219. data/sample-apps/trello-integration-app/app/helpers/oauth/authorization_helper.rb +11 -0
  220. data/sample-apps/trello-integration-app/app/lib/services/hubspot/authorization/authorize.rb +17 -0
  221. data/sample-apps/trello-integration-app/app/lib/services/hubspot/authorization/get_authorization_uri.rb +35 -0
  222. data/sample-apps/trello-integration-app/app/lib/services/hubspot/authorization/tokens/base.rb +21 -0
  223. data/sample-apps/trello-integration-app/app/lib/services/hubspot/authorization/tokens/generate.rb +28 -0
  224. data/sample-apps/trello-integration-app/app/lib/services/hubspot/authorization/tokens/refresh.rb +35 -0
  225. data/sample-apps/trello-integration-app/app/lib/services/hubspot/deals/get_by_id.rb +15 -0
  226. data/sample-apps/trello-integration-app/app/lib/services/hubspot/deals/update.rb +17 -0
  227. data/sample-apps/trello-integration-app/app/lib/services/hubspot/extensions_cards/create.rb +82 -0
  228. data/sample-apps/trello-integration-app/app/lib/services/hubspot/pipelines/get_all.rb +11 -0
  229. data/sample-apps/trello-integration-app/app/lib/services/hubspot/pipelines/get_by_id.rb +15 -0
  230. data/sample-apps/trello-integration-app/app/lib/services/trello/authorization/authorize.rb +20 -0
  231. data/sample-apps/trello-integration-app/app/lib/services/trello/boards/get_all.rb +11 -0
  232. data/sample-apps/trello-integration-app/app/lib/services/trello/boards/get_by_id.rb +19 -0
  233. data/sample-apps/trello-integration-app/app/lib/services/trello/cards/format.rb +78 -0
  234. data/sample-apps/trello-integration-app/app/lib/services/trello/cards/get_by_id.rb +15 -0
  235. data/sample-apps/trello-integration-app/app/lib/services/trello/cards/search.rb +15 -0
  236. data/sample-apps/trello-integration-app/app/lib/services/trello/webhooks/create.rb +31 -0
  237. data/sample-apps/trello-integration-app/app/lib/services/trello/webhooks/delete.rb +17 -0
  238. data/sample-apps/trello-integration-app/app/lib/services/trello/webhooks/update.rb +19 -0
  239. data/sample-apps/trello-integration-app/app/models/application_record.rb +3 -0
  240. data/sample-apps/trello-integration-app/app/models/concerns/.keep +0 -0
  241. data/sample-apps/trello-integration-app/app/models/deal_association.rb +2 -0
  242. data/sample-apps/trello-integration-app/app/models/extension_card.rb +4 -0
  243. data/sample-apps/trello-integration-app/app/models/hubspot_token.rb +19 -0
  244. data/sample-apps/trello-integration-app/app/models/mapping.rb +2 -0
  245. data/sample-apps/trello-integration-app/app/models/trello_token.rb +19 -0
  246. data/sample-apps/trello-integration-app/app/models/webhook.rb +2 -0
  247. data/sample-apps/trello-integration-app/app/views/home/index.html.erb +23 -0
  248. data/sample-apps/trello-integration-app/app/views/home/success.html.erb +11 -0
  249. data/sample-apps/trello-integration-app/app/views/layouts/application.html.erb +23 -0
  250. data/sample-apps/trello-integration-app/app/views/mappings/_mapping.html.erb +13 -0
  251. data/sample-apps/trello-integration-app/app/views/mappings/index.html.erb +44 -0
  252. data/sample-apps/trello-integration-app/app/views/oauth/authorization/login.html.erb +42 -0
  253. data/sample-apps/trello-integration-app/app/views/shared/_header.html.erb +15 -0
  254. data/sample-apps/trello-integration-app/app/views/trello/cards/search_frame.html.erb +69 -0
  255. data/sample-apps/trello-integration-app/app/views/trello/cards/search_frame_success.html.erb +7 -0
  256. data/sample-apps/trello-integration-app/bin/bundle +3 -0
  257. data/sample-apps/trello-integration-app/bin/rails +9 -0
  258. data/sample-apps/trello-integration-app/bin/rake +9 -0
  259. data/sample-apps/trello-integration-app/bin/setup +36 -0
  260. data/sample-apps/trello-integration-app/bin/spring +17 -0
  261. data/sample-apps/trello-integration-app/bin/update +31 -0
  262. data/sample-apps/trello-integration-app/bin/yarn +11 -0
  263. data/sample-apps/trello-integration-app/config.ru +5 -0
  264. data/sample-apps/trello-integration-app/config/application.rb +20 -0
  265. data/sample-apps/trello-integration-app/config/boot.rb +3 -0
  266. data/sample-apps/trello-integration-app/config/cable.yml +10 -0
  267. data/sample-apps/trello-integration-app/config/database.yml +16 -0
  268. data/sample-apps/trello-integration-app/config/environment.rb +5 -0
  269. data/sample-apps/trello-integration-app/config/environments/development.rb +61 -0
  270. data/sample-apps/trello-integration-app/config/environments/production.rb +94 -0
  271. data/sample-apps/trello-integration-app/config/environments/test.rb +46 -0
  272. data/sample-apps/trello-integration-app/config/initializers/assets.rb +14 -0
  273. data/sample-apps/trello-integration-app/config/initializers/filter_parameter_logging.rb +4 -0
  274. data/sample-apps/trello-integration-app/config/initializers/hubspot-api-client.rb +3 -0
  275. data/sample-apps/trello-integration-app/config/initializers/mime_types.rb +1 -0
  276. data/sample-apps/trello-integration-app/config/initializers/omniauth.rb +11 -0
  277. data/sample-apps/trello-integration-app/config/initializers/trello.rb +1 -0
  278. data/sample-apps/trello-integration-app/config/initializers/wrap_parameters.rb +14 -0
  279. data/sample-apps/trello-integration-app/config/locales/en.yml +33 -0
  280. data/sample-apps/trello-integration-app/config/puma.rb +34 -0
  281. data/sample-apps/trello-integration-app/config/routes.rb +29 -0
  282. data/sample-apps/trello-integration-app/config/spring.rb +6 -0
  283. data/sample-apps/trello-integration-app/config/storage.yml +34 -0
  284. data/sample-apps/trello-integration-app/db/migrate/20200624132327_create_hubspot_tokens.rb +10 -0
  285. data/sample-apps/trello-integration-app/db/migrate/20200624132336_create_trello_tokens.rb +8 -0
  286. data/sample-apps/trello-integration-app/db/migrate/20200624132337_create_deal_associations.rb +8 -0
  287. data/sample-apps/trello-integration-app/db/migrate/20200702130530_create_extension_cards.rb +8 -0
  288. data/sample-apps/trello-integration-app/db/migrate/20200715143913_create_mappings.rb +12 -0
  289. data/sample-apps/trello-integration-app/db/migrate/20200727083656_create_webhooks.rb +9 -0
  290. data/sample-apps/trello-integration-app/db/schema.rb +52 -0
  291. data/sample-apps/trello-integration-app/db/seeds.rb +7 -0
  292. data/sample-apps/trello-integration-app/docker-compose.yml +41 -0
  293. data/sample-apps/trello-integration-app/docker-entrypoint.sh +8 -0
  294. data/sample-apps/trello-integration-app/lib/assets/.keep +0 -0
  295. data/sample-apps/trello-integration-app/lib/middlewares/trello_payload_params_handler.rb +18 -0
  296. data/sample-apps/trello-integration-app/lib/tasks/.keep +0 -0
  297. data/sample-apps/trello-integration-app/log/.keep +0 -0
  298. data/sample-apps/trello-integration-app/package.json +5 -0
  299. data/sample-apps/trello-integration-app/public/404.html +67 -0
  300. data/sample-apps/trello-integration-app/public/422.html +67 -0
  301. data/sample-apps/trello-integration-app/public/500.html +66 -0
  302. data/sample-apps/trello-integration-app/public/favicon.ico +0 -0
  303. data/sample-apps/trello-integration-app/public/robots.txt +1 -0
  304. data/sample-apps/trello-integration-app/tmp/.keep +0 -0
  305. data/sample-apps/webhooks-contacts-app/app/lib/services/hubspot/contacts/get_batch.rb +1 -4
  306. metadata +466 -2
@@ -0,0 +1,286 @@
1
+ =begin
2
+ #CRM Objects
3
+
4
+ #CRM objects such as companies, contacts, deals, line items, products, tickets, and quotes are standard objects in HubSpot’s CRM. These core building blocks support custom properties, store critical information, and play a central role in the HubSpot application. ## Supported Object Types This API provides access to collections of CRM objects, which return a map of property names to values. Each object type has its own set of default properties, which can be found by exploring the [CRM Object Properties API](https://developers.hubspot.com/docs/methods/crm-properties/crm-properties-overview). |Object Type |Properties returned by default | |--|--| | `companies` | `name`, `domain` | | `contacts` | `firstname`, `lastname`, `email` | | `deals` | `dealname`, `amount`, `closedate`, `pipeline`, `dealstage` | | `products` | `name`, `description`, `price` | | `tickets` | `content`, `hs_pipeline`, `hs_pipeline_stage`, `hs_ticket_category`, `hs_ticket_priority`, `subject` | Find a list of all properties for an object type using the [CRM Object Properties](https://developers.hubspot.com/docs/methods/crm-properties/get-properties) API. e.g. `GET https://api.hubapi.com/properties/v2/companies/properties`. Change the properties returned in the response using the `properties` array in the request body.
5
+
6
+ The version of the OpenAPI document: v3
7
+
8
+ Generated by: https://openapi-generator.tech
9
+ OpenAPI Generator version: 4.3.1
10
+
11
+ =end
12
+
13
+ require 'date'
14
+
15
+ module Hubspot
16
+ module Crm
17
+ module Objects
18
+ class PublicObjectSearchRequest
19
+ attr_accessor :filter_groups
20
+
21
+ attr_accessor :sorts
22
+
23
+ attr_accessor :query
24
+
25
+ attr_accessor :properties
26
+
27
+ attr_accessor :limit
28
+
29
+ attr_accessor :after
30
+
31
+ # Attribute mapping from ruby-style variable name to JSON key.
32
+ def self.attribute_map
33
+ {
34
+ :'filter_groups' => :'filterGroups',
35
+ :'sorts' => :'sorts',
36
+ :'query' => :'query',
37
+ :'properties' => :'properties',
38
+ :'limit' => :'limit',
39
+ :'after' => :'after'
40
+ }
41
+ end
42
+
43
+ # Attribute type mapping.
44
+ def self.openapi_types
45
+ {
46
+ :'filter_groups' => :'Array<FilterGroup>',
47
+ :'sorts' => :'Array<String>',
48
+ :'query' => :'String',
49
+ :'properties' => :'Array<String>',
50
+ :'limit' => :'Integer',
51
+ :'after' => :'Integer'
52
+ }
53
+ end
54
+
55
+ # List of attributes with nullable: true
56
+ def self.openapi_nullable
57
+ Set.new([
58
+ ])
59
+ end
60
+
61
+ # Initializes the object
62
+ # @param [Hash] attributes Model attributes in the form of hash
63
+ def initialize(attributes = {})
64
+ if (!attributes.is_a?(Hash))
65
+ fail ArgumentError, "The input argument (attributes) must be a hash in `Hubspot::Crm::Objects::PublicObjectSearchRequest` initialize method"
66
+ end
67
+
68
+ # check to see if the attribute exists and convert string to symbol for hash key
69
+ attributes = attributes.each_with_object({}) { |(k, v), h|
70
+ if (!self.class.attribute_map.key?(k.to_sym))
71
+ fail ArgumentError, "`#{k}` is not a valid attribute in `Hubspot::Crm::Objects::PublicObjectSearchRequest`. Please check the name to make sure it's valid. List of attributes: " + self.class.attribute_map.keys.inspect
72
+ end
73
+ h[k.to_sym] = v
74
+ }
75
+
76
+ if attributes.key?(:'filter_groups')
77
+ if (value = attributes[:'filter_groups']).is_a?(Array)
78
+ self.filter_groups = value
79
+ end
80
+ end
81
+
82
+ if attributes.key?(:'sorts')
83
+ if (value = attributes[:'sorts']).is_a?(Array)
84
+ self.sorts = value
85
+ end
86
+ end
87
+
88
+ if attributes.key?(:'query')
89
+ self.query = attributes[:'query']
90
+ end
91
+
92
+ if attributes.key?(:'properties')
93
+ if (value = attributes[:'properties']).is_a?(Array)
94
+ self.properties = value
95
+ end
96
+ end
97
+
98
+ if attributes.key?(:'limit')
99
+ self.limit = attributes[:'limit']
100
+ end
101
+
102
+ if attributes.key?(:'after')
103
+ self.after = attributes[:'after']
104
+ end
105
+ end
106
+
107
+ # Show invalid properties with the reasons. Usually used together with valid?
108
+ # @return Array for valid properties with the reasons
109
+ def list_invalid_properties
110
+ invalid_properties = Array.new
111
+ if @filter_groups.nil?
112
+ invalid_properties.push('invalid value for "filter_groups", filter_groups cannot be nil.')
113
+ end
114
+
115
+ if @sorts.nil?
116
+ invalid_properties.push('invalid value for "sorts", sorts cannot be nil.')
117
+ end
118
+
119
+ if @properties.nil?
120
+ invalid_properties.push('invalid value for "properties", properties cannot be nil.')
121
+ end
122
+
123
+ if @limit.nil?
124
+ invalid_properties.push('invalid value for "limit", limit cannot be nil.')
125
+ end
126
+
127
+ if @after.nil?
128
+ invalid_properties.push('invalid value for "after", after cannot be nil.')
129
+ end
130
+
131
+ invalid_properties
132
+ end
133
+
134
+ # Check to see if the all the properties in the model are valid
135
+ # @return true if the model is valid
136
+ def valid?
137
+ return false if @filter_groups.nil?
138
+ return false if @sorts.nil?
139
+ return false if @properties.nil?
140
+ return false if @limit.nil?
141
+ return false if @after.nil?
142
+ true
143
+ end
144
+
145
+ # Checks equality by comparing each attribute.
146
+ # @param [Object] Object to be compared
147
+ def ==(o)
148
+ return true if self.equal?(o)
149
+ self.class == o.class &&
150
+ filter_groups == o.filter_groups &&
151
+ sorts == o.sorts &&
152
+ query == o.query &&
153
+ properties == o.properties &&
154
+ limit == o.limit &&
155
+ after == o.after
156
+ end
157
+
158
+ # @see the `==` method
159
+ # @param [Object] Object to be compared
160
+ def eql?(o)
161
+ self == o
162
+ end
163
+
164
+ # Calculates hash code according to all attributes.
165
+ # @return [Integer] Hash code
166
+ def hash
167
+ [filter_groups, sorts, query, properties, limit, after].hash
168
+ end
169
+
170
+ # Builds the object from hash
171
+ # @param [Hash] attributes Model attributes in the form of hash
172
+ # @return [Object] Returns the model itself
173
+ def self.build_from_hash(attributes)
174
+ new.build_from_hash(attributes)
175
+ end
176
+
177
+ # Builds the object from hash
178
+ # @param [Hash] attributes Model attributes in the form of hash
179
+ # @return [Object] Returns the model itself
180
+ def build_from_hash(attributes)
181
+ return nil unless attributes.is_a?(Hash)
182
+ self.class.openapi_types.each_pair do |key, type|
183
+ if type =~ /\AArray<(.*)>/i
184
+ # check to ensure the input is an array given that the attribute
185
+ # is documented as an array but the input is not
186
+ if attributes[self.class.attribute_map[key]].is_a?(Array)
187
+ self.send("#{key}=", attributes[self.class.attribute_map[key]].map { |v| _deserialize($1, v) })
188
+ end
189
+ elsif !attributes[self.class.attribute_map[key]].nil?
190
+ self.send("#{key}=", _deserialize(type, attributes[self.class.attribute_map[key]]))
191
+ end # or else data not found in attributes(hash), not an issue as the data can be optional
192
+ end
193
+
194
+ self
195
+ end
196
+
197
+ # Deserializes the data based on type
198
+ # @param string type Data type
199
+ # @param string value Value to be deserialized
200
+ # @return [Object] Deserialized data
201
+ def _deserialize(type, value)
202
+ case type.to_sym
203
+ when :DateTime
204
+ DateTime.parse(value)
205
+ when :Date
206
+ Date.parse(value)
207
+ when :String
208
+ value.to_s
209
+ when :Integer
210
+ value.to_i
211
+ when :Float
212
+ value.to_f
213
+ when :Boolean
214
+ if value.to_s =~ /\A(true|t|yes|y|1)\z/i
215
+ true
216
+ else
217
+ false
218
+ end
219
+ when :Object
220
+ # generic object (usually a Hash), return directly
221
+ value
222
+ when /\AArray<(?<inner_type>.+)>\z/
223
+ inner_type = Regexp.last_match[:inner_type]
224
+ value.map { |v| _deserialize(inner_type, v) }
225
+ when /\AHash<(?<k_type>.+?), (?<v_type>.+)>\z/
226
+ k_type = Regexp.last_match[:k_type]
227
+ v_type = Regexp.last_match[:v_type]
228
+ {}.tap do |hash|
229
+ value.each do |k, v|
230
+ hash[_deserialize(k_type, k)] = _deserialize(v_type, v)
231
+ end
232
+ end
233
+ else # model
234
+ Hubspot::Crm::Objects.const_get(type).build_from_hash(value)
235
+ end
236
+ end
237
+
238
+ # Returns the string representation of the object
239
+ # @return [String] String presentation of the object
240
+ def to_s
241
+ to_hash.to_s
242
+ end
243
+
244
+ # to_body is an alias to to_hash (backward compatibility)
245
+ # @return [Hash] Returns the object in the form of hash
246
+ def to_body
247
+ to_hash
248
+ end
249
+
250
+ # Returns the object in the form of hash
251
+ # @return [Hash] Returns the object in the form of hash
252
+ def to_hash
253
+ hash = {}
254
+ self.class.attribute_map.each_pair do |attr, param|
255
+ value = self.send(attr)
256
+ if value.nil?
257
+ is_nullable = self.class.openapi_nullable.include?(attr)
258
+ next if !is_nullable || (is_nullable && !instance_variable_defined?(:"@#{attr}"))
259
+ end
260
+
261
+ hash[param] = _to_hash(value)
262
+ end
263
+ hash
264
+ end
265
+
266
+ # Outputs non-array value in the form of hash
267
+ # For object, use to_hash. Otherwise, just return the value
268
+ # @param [Object] value Any valid value
269
+ # @return [Hash] Returns the value in the form of hash
270
+ def _to_hash(value)
271
+ if value.is_a?(Array)
272
+ value.compact.map { |v| _to_hash(v) }
273
+ elsif value.is_a?(Hash)
274
+ {}.tap do |hash|
275
+ value.each { |k, v| hash[k] = _to_hash(v) }
276
+ end
277
+ elsif value.respond_to? :to_hash
278
+ value.to_hash
279
+ else
280
+ value
281
+ end
282
+ end
283
+ end
284
+ end
285
+ end
286
+ end
@@ -0,0 +1,288 @@
1
+ =begin
2
+ #CRM Objects
3
+
4
+ #CRM objects such as companies, contacts, deals, line items, products, tickets, and quotes are standard objects in HubSpot’s CRM. These core building blocks support custom properties, store critical information, and play a central role in the HubSpot application. ## Supported Object Types This API provides access to collections of CRM objects, which return a map of property names to values. Each object type has its own set of default properties, which can be found by exploring the [CRM Object Properties API](https://developers.hubspot.com/docs/methods/crm-properties/crm-properties-overview). |Object Type |Properties returned by default | |--|--| | `companies` | `name`, `domain` | | `contacts` | `firstname`, `lastname`, `email` | | `deals` | `dealname`, `amount`, `closedate`, `pipeline`, `dealstage` | | `products` | `name`, `description`, `price` | | `tickets` | `content`, `hs_pipeline`, `hs_pipeline_stage`, `hs_ticket_category`, `hs_ticket_priority`, `subject` | Find a list of all properties for an object type using the [CRM Object Properties](https://developers.hubspot.com/docs/methods/crm-properties/get-properties) API. e.g. `GET https://api.hubapi.com/properties/v2/companies/properties`. Change the properties returned in the response using the `properties` array in the request body.
5
+
6
+ The version of the OpenAPI document: v3
7
+
8
+ Generated by: https://openapi-generator.tech
9
+ OpenAPI Generator version: 4.3.1
10
+
11
+ =end
12
+
13
+ require 'date'
14
+
15
+ module Hubspot
16
+ module Crm
17
+ module Objects
18
+ class SimplePublicObject
19
+ attr_accessor :id
20
+
21
+ attr_accessor :properties
22
+
23
+ attr_accessor :created_at
24
+
25
+ attr_accessor :updated_at
26
+
27
+ attr_accessor :associations
28
+
29
+ attr_accessor :archived
30
+
31
+ attr_accessor :archived_at
32
+
33
+ # Attribute mapping from ruby-style variable name to JSON key.
34
+ def self.attribute_map
35
+ {
36
+ :'id' => :'id',
37
+ :'properties' => :'properties',
38
+ :'created_at' => :'createdAt',
39
+ :'updated_at' => :'updatedAt',
40
+ :'associations' => :'associations',
41
+ :'archived' => :'archived',
42
+ :'archived_at' => :'archivedAt'
43
+ }
44
+ end
45
+
46
+ # Attribute type mapping.
47
+ def self.openapi_types
48
+ {
49
+ :'id' => :'String',
50
+ :'properties' => :'Hash<String, String>',
51
+ :'created_at' => :'DateTime',
52
+ :'updated_at' => :'DateTime',
53
+ :'associations' => :'Hash<String, CollectionResponseAssociatedId>',
54
+ :'archived' => :'Boolean',
55
+ :'archived_at' => :'DateTime'
56
+ }
57
+ end
58
+
59
+ # List of attributes with nullable: true
60
+ def self.openapi_nullable
61
+ Set.new([
62
+ ])
63
+ end
64
+
65
+ # Initializes the object
66
+ # @param [Hash] attributes Model attributes in the form of hash
67
+ def initialize(attributes = {})
68
+ if (!attributes.is_a?(Hash))
69
+ fail ArgumentError, "The input argument (attributes) must be a hash in `Hubspot::Crm::Objects::SimplePublicObject` initialize method"
70
+ end
71
+
72
+ # check to see if the attribute exists and convert string to symbol for hash key
73
+ attributes = attributes.each_with_object({}) { |(k, v), h|
74
+ if (!self.class.attribute_map.key?(k.to_sym))
75
+ fail ArgumentError, "`#{k}` is not a valid attribute in `Hubspot::Crm::Objects::SimplePublicObject`. Please check the name to make sure it's valid. List of attributes: " + self.class.attribute_map.keys.inspect
76
+ end
77
+ h[k.to_sym] = v
78
+ }
79
+
80
+ if attributes.key?(:'id')
81
+ self.id = attributes[:'id']
82
+ end
83
+
84
+ if attributes.key?(:'properties')
85
+ if (value = attributes[:'properties']).is_a?(Hash)
86
+ self.properties = value
87
+ end
88
+ end
89
+
90
+ if attributes.key?(:'created_at')
91
+ self.created_at = attributes[:'created_at']
92
+ end
93
+
94
+ if attributes.key?(:'updated_at')
95
+ self.updated_at = attributes[:'updated_at']
96
+ end
97
+
98
+ if attributes.key?(:'associations')
99
+ if (value = attributes[:'associations']).is_a?(Hash)
100
+ self.associations = value
101
+ end
102
+ end
103
+
104
+ if attributes.key?(:'archived')
105
+ self.archived = attributes[:'archived']
106
+ end
107
+
108
+ if attributes.key?(:'archived_at')
109
+ self.archived_at = attributes[:'archived_at']
110
+ end
111
+ end
112
+
113
+ # Show invalid properties with the reasons. Usually used together with valid?
114
+ # @return Array for valid properties with the reasons
115
+ def list_invalid_properties
116
+ invalid_properties = Array.new
117
+ if @id.nil?
118
+ invalid_properties.push('invalid value for "id", id cannot be nil.')
119
+ end
120
+
121
+ if @properties.nil?
122
+ invalid_properties.push('invalid value for "properties", properties cannot be nil.')
123
+ end
124
+
125
+ if @created_at.nil?
126
+ invalid_properties.push('invalid value for "created_at", created_at cannot be nil.')
127
+ end
128
+
129
+ if @updated_at.nil?
130
+ invalid_properties.push('invalid value for "updated_at", updated_at cannot be nil.')
131
+ end
132
+
133
+ invalid_properties
134
+ end
135
+
136
+ # Check to see if the all the properties in the model are valid
137
+ # @return true if the model is valid
138
+ def valid?
139
+ return false if @id.nil?
140
+ return false if @properties.nil?
141
+ return false if @created_at.nil?
142
+ return false if @updated_at.nil?
143
+ true
144
+ end
145
+
146
+ # Checks equality by comparing each attribute.
147
+ # @param [Object] Object to be compared
148
+ def ==(o)
149
+ return true if self.equal?(o)
150
+ self.class == o.class &&
151
+ id == o.id &&
152
+ properties == o.properties &&
153
+ created_at == o.created_at &&
154
+ updated_at == o.updated_at &&
155
+ associations == o.associations &&
156
+ archived == o.archived &&
157
+ archived_at == o.archived_at
158
+ end
159
+
160
+ # @see the `==` method
161
+ # @param [Object] Object to be compared
162
+ def eql?(o)
163
+ self == o
164
+ end
165
+
166
+ # Calculates hash code according to all attributes.
167
+ # @return [Integer] Hash code
168
+ def hash
169
+ [id, properties, created_at, updated_at, associations, archived, archived_at].hash
170
+ end
171
+
172
+ # Builds the object from hash
173
+ # @param [Hash] attributes Model attributes in the form of hash
174
+ # @return [Object] Returns the model itself
175
+ def self.build_from_hash(attributes)
176
+ new.build_from_hash(attributes)
177
+ end
178
+
179
+ # Builds the object from hash
180
+ # @param [Hash] attributes Model attributes in the form of hash
181
+ # @return [Object] Returns the model itself
182
+ def build_from_hash(attributes)
183
+ return nil unless attributes.is_a?(Hash)
184
+ self.class.openapi_types.each_pair do |key, type|
185
+ if type =~ /\AArray<(.*)>/i
186
+ # check to ensure the input is an array given that the attribute
187
+ # is documented as an array but the input is not
188
+ if attributes[self.class.attribute_map[key]].is_a?(Array)
189
+ self.send("#{key}=", attributes[self.class.attribute_map[key]].map { |v| _deserialize($1, v) })
190
+ end
191
+ elsif !attributes[self.class.attribute_map[key]].nil?
192
+ self.send("#{key}=", _deserialize(type, attributes[self.class.attribute_map[key]]))
193
+ end # or else data not found in attributes(hash), not an issue as the data can be optional
194
+ end
195
+
196
+ self
197
+ end
198
+
199
+ # Deserializes the data based on type
200
+ # @param string type Data type
201
+ # @param string value Value to be deserialized
202
+ # @return [Object] Deserialized data
203
+ def _deserialize(type, value)
204
+ case type.to_sym
205
+ when :DateTime
206
+ DateTime.parse(value)
207
+ when :Date
208
+ Date.parse(value)
209
+ when :String
210
+ value.to_s
211
+ when :Integer
212
+ value.to_i
213
+ when :Float
214
+ value.to_f
215
+ when :Boolean
216
+ if value.to_s =~ /\A(true|t|yes|y|1)\z/i
217
+ true
218
+ else
219
+ false
220
+ end
221
+ when :Object
222
+ # generic object (usually a Hash), return directly
223
+ value
224
+ when /\AArray<(?<inner_type>.+)>\z/
225
+ inner_type = Regexp.last_match[:inner_type]
226
+ value.map { |v| _deserialize(inner_type, v) }
227
+ when /\AHash<(?<k_type>.+?), (?<v_type>.+)>\z/
228
+ k_type = Regexp.last_match[:k_type]
229
+ v_type = Regexp.last_match[:v_type]
230
+ {}.tap do |hash|
231
+ value.each do |k, v|
232
+ hash[_deserialize(k_type, k)] = _deserialize(v_type, v)
233
+ end
234
+ end
235
+ else # model
236
+ Hubspot::Crm::Objects.const_get(type).build_from_hash(value)
237
+ end
238
+ end
239
+
240
+ # Returns the string representation of the object
241
+ # @return [String] String presentation of the object
242
+ def to_s
243
+ to_hash.to_s
244
+ end
245
+
246
+ # to_body is an alias to to_hash (backward compatibility)
247
+ # @return [Hash] Returns the object in the form of hash
248
+ def to_body
249
+ to_hash
250
+ end
251
+
252
+ # Returns the object in the form of hash
253
+ # @return [Hash] Returns the object in the form of hash
254
+ def to_hash
255
+ hash = {}
256
+ self.class.attribute_map.each_pair do |attr, param|
257
+ value = self.send(attr)
258
+ if value.nil?
259
+ is_nullable = self.class.openapi_nullable.include?(attr)
260
+ next if !is_nullable || (is_nullable && !instance_variable_defined?(:"@#{attr}"))
261
+ end
262
+
263
+ hash[param] = _to_hash(value)
264
+ end
265
+ hash
266
+ end
267
+
268
+ # Outputs non-array value in the form of hash
269
+ # For object, use to_hash. Otherwise, just return the value
270
+ # @param [Object] value Any valid value
271
+ # @return [Hash] Returns the value in the form of hash
272
+ def _to_hash(value)
273
+ if value.is_a?(Array)
274
+ value.compact.map { |v| _to_hash(v) }
275
+ elsif value.is_a?(Hash)
276
+ {}.tap do |hash|
277
+ value.each { |k, v| hash[k] = _to_hash(v) }
278
+ end
279
+ elsif value.respond_to? :to_hash
280
+ value.to_hash
281
+ else
282
+ value
283
+ end
284
+ end
285
+ end
286
+ end
287
+ end
288
+ end