hubspot-api-client 3.2.0 → 3.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (108) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +6 -0
  3. data/lib/hubspot-api-client.rb +1 -0
  4. data/lib/hubspot/exceptions.rb +11 -0
  5. data/lib/hubspot/helpers/webhooks_helper.rb +31 -0
  6. data/lib/hubspot/version.rb +1 -1
  7. data/sample-apps/imports-contacts-app/.env.template +2 -0
  8. data/sample-apps/imports-contacts-app/.env.test.template +3 -0
  9. data/sample-apps/imports-contacts-app/.gitignore +37 -0
  10. data/sample-apps/imports-contacts-app/.rspec +1 -0
  11. data/sample-apps/imports-contacts-app/.ruby-version +1 -0
  12. data/sample-apps/imports-contacts-app/Dockerfile +22 -0
  13. data/sample-apps/imports-contacts-app/Gemfile +33 -0
  14. data/sample-apps/imports-contacts-app/Gemfile.lock +271 -0
  15. data/sample-apps/imports-contacts-app/README.md +27 -0
  16. data/sample-apps/imports-contacts-app/Rakefile +6 -0
  17. data/sample-apps/imports-contacts-app/app/assets/config/manifest.js +3 -0
  18. data/sample-apps/imports-contacts-app/app/assets/images/.keep +0 -0
  19. data/sample-apps/imports-contacts-app/app/assets/javascripts/application.js +15 -0
  20. data/sample-apps/imports-contacts-app/app/assets/javascripts/cable.js +13 -0
  21. data/sample-apps/imports-contacts-app/app/assets/javascripts/channels/.keep +0 -0
  22. data/sample-apps/imports-contacts-app/app/assets/stylesheets/application.css +87 -0
  23. data/sample-apps/imports-contacts-app/app/controllers/application_controller.rb +12 -0
  24. data/sample-apps/imports-contacts-app/app/controllers/concerns/.keep +0 -0
  25. data/sample-apps/imports-contacts-app/app/controllers/concerns/exception_handler.rb +12 -0
  26. data/sample-apps/imports-contacts-app/app/controllers/imports_controller.rb +24 -0
  27. data/sample-apps/imports-contacts-app/app/controllers/oauth/authorization_controller.rb +19 -0
  28. data/sample-apps/imports-contacts-app/app/helpers/application_helper.rb +2 -0
  29. data/sample-apps/{webhooks-contacts-app → imports-contacts-app}/app/lib/services/authorization/authorize_hubspot.rb +0 -0
  30. data/sample-apps/{webhooks-contacts-app → imports-contacts-app}/app/lib/services/authorization/get_authorization_uri.rb +1 -1
  31. data/sample-apps/{webhooks-contacts-app → imports-contacts-app}/app/lib/services/authorization/tokens/base.rb +0 -0
  32. data/sample-apps/{webhooks-contacts-app → imports-contacts-app}/app/lib/services/authorization/tokens/generate.rb +2 -2
  33. data/sample-apps/{webhooks-contacts-app → imports-contacts-app}/app/lib/services/authorization/tokens/refresh.rb +3 -4
  34. data/sample-apps/imports-contacts-app/app/lib/services/hubspot/imports/create.rb +52 -0
  35. data/sample-apps/imports-contacts-app/app/models/application_record.rb +3 -0
  36. data/sample-apps/imports-contacts-app/app/models/concerns/.keep +0 -0
  37. data/sample-apps/imports-contacts-app/app/views/imports/index.html.erb +70 -0
  38. data/sample-apps/imports-contacts-app/app/views/layouts/application.html.erb +23 -0
  39. data/sample-apps/imports-contacts-app/app/views/oauth/authorization/login.html.erb +15 -0
  40. data/sample-apps/imports-contacts-app/app/views/shared/_header.html.erb +15 -0
  41. data/sample-apps/imports-contacts-app/bin/bundle +3 -0
  42. data/sample-apps/imports-contacts-app/bin/rails +9 -0
  43. data/sample-apps/imports-contacts-app/bin/rake +9 -0
  44. data/sample-apps/imports-contacts-app/bin/setup +36 -0
  45. data/sample-apps/imports-contacts-app/bin/spring +17 -0
  46. data/sample-apps/imports-contacts-app/bin/update +31 -0
  47. data/sample-apps/imports-contacts-app/bin/yarn +11 -0
  48. data/sample-apps/imports-contacts-app/config.ru +5 -0
  49. data/sample-apps/imports-contacts-app/config/application.rb +19 -0
  50. data/sample-apps/imports-contacts-app/config/boot.rb +3 -0
  51. data/sample-apps/imports-contacts-app/config/cable.yml +10 -0
  52. data/sample-apps/imports-contacts-app/config/database.yml +25 -0
  53. data/sample-apps/imports-contacts-app/config/environment.rb +5 -0
  54. data/sample-apps/imports-contacts-app/config/environments/development.rb +61 -0
  55. data/sample-apps/imports-contacts-app/config/environments/production.rb +94 -0
  56. data/sample-apps/imports-contacts-app/config/environments/test.rb +46 -0
  57. data/sample-apps/imports-contacts-app/config/initializers/assets.rb +14 -0
  58. data/sample-apps/imports-contacts-app/config/initializers/filter_parameter_logging.rb +4 -0
  59. data/sample-apps/imports-contacts-app/config/initializers/hubspot-api-client.rb +3 -0
  60. data/sample-apps/imports-contacts-app/config/initializers/mime_types.rb +1 -0
  61. data/sample-apps/imports-contacts-app/config/initializers/wrap_parameters.rb +14 -0
  62. data/sample-apps/imports-contacts-app/config/locales/en.yml +33 -0
  63. data/sample-apps/imports-contacts-app/config/puma.rb +34 -0
  64. data/sample-apps/imports-contacts-app/config/routes.rb +11 -0
  65. data/sample-apps/imports-contacts-app/config/spring.rb +6 -0
  66. data/sample-apps/imports-contacts-app/db/seeds.rb +7 -0
  67. data/sample-apps/imports-contacts-app/docker-compose.yml +11 -0
  68. data/sample-apps/imports-contacts-app/docker-entrypoint.sh +8 -0
  69. data/sample-apps/imports-contacts-app/lib/assets/.keep +0 -0
  70. data/sample-apps/imports-contacts-app/lib/tasks/.keep +0 -0
  71. data/sample-apps/imports-contacts-app/log/.keep +0 -0
  72. data/sample-apps/imports-contacts-app/package.json +5 -0
  73. data/sample-apps/imports-contacts-app/public/404.html +67 -0
  74. data/sample-apps/imports-contacts-app/public/422.html +67 -0
  75. data/sample-apps/imports-contacts-app/public/500.html +66 -0
  76. data/sample-apps/imports-contacts-app/public/apple-touch-icon-precomposed.png +0 -0
  77. data/sample-apps/imports-contacts-app/public/apple-touch-icon.png +0 -0
  78. data/sample-apps/imports-contacts-app/public/examples/example.csv +2 -0
  79. data/sample-apps/imports-contacts-app/public/favicon.ico +0 -0
  80. data/sample-apps/imports-contacts-app/public/robots.txt +1 -0
  81. data/sample-apps/imports-contacts-app/tmp/.keep +0 -0
  82. data/sample-apps/webhooks-contacts-app/.env.template +3 -1
  83. data/sample-apps/webhooks-contacts-app/Gemfile.lock +1 -1
  84. data/sample-apps/webhooks-contacts-app/README.md +24 -21
  85. data/sample-apps/webhooks-contacts-app/app/assets/stylesheets/application.css +7 -55
  86. data/sample-apps/webhooks-contacts-app/app/controllers/events_controller.rb +8 -10
  87. data/sample-apps/webhooks-contacts-app/app/controllers/home_controller.rb +44 -0
  88. data/sample-apps/webhooks-contacts-app/app/controllers/oauth/authorization_controller.rb +6 -6
  89. data/sample-apps/webhooks-contacts-app/app/controllers/webhooks_controller.rb +1 -1
  90. data/sample-apps/webhooks-contacts-app/app/lib/services/hubspot/authorization/authorize.rb +17 -0
  91. data/sample-apps/webhooks-contacts-app/app/lib/services/hubspot/authorization/get_authorization_uri.rb +35 -0
  92. data/sample-apps/webhooks-contacts-app/app/lib/services/hubspot/authorization/tokens/base.rb +21 -0
  93. data/sample-apps/webhooks-contacts-app/app/lib/services/hubspot/authorization/tokens/generate.rb +28 -0
  94. data/sample-apps/webhooks-contacts-app/app/lib/services/hubspot/authorization/tokens/refresh.rb +35 -0
  95. data/sample-apps/webhooks-contacts-app/app/lib/services/hubspot/webhooks/configure_target_url.rb +25 -0
  96. data/sample-apps/webhooks-contacts-app/app/lib/services/hubspot/webhooks/create_or_activate_subscription.rb +44 -0
  97. data/sample-apps/webhooks-contacts-app/app/lib/services/hubspot/webhooks/handle.rb +13 -1
  98. data/sample-apps/webhooks-contacts-app/app/lib/services/hubspot/webhooks/pause_active_subscriptions.rb +39 -0
  99. data/sample-apps/webhooks-contacts-app/app/models/event.rb +3 -0
  100. data/sample-apps/webhooks-contacts-app/app/views/events/index.html.erb +14 -16
  101. data/sample-apps/webhooks-contacts-app/app/views/home/index.html.erb +47 -0
  102. data/sample-apps/webhooks-contacts-app/app/views/oauth/authorization/login.html.erb +6 -6
  103. data/sample-apps/webhooks-contacts-app/app/views/shared/_header.html.erb +3 -0
  104. data/sample-apps/webhooks-contacts-app/config/database.yml +9 -9
  105. data/sample-apps/webhooks-contacts-app/config/routes.rb +2 -0
  106. data/sample-apps/webhooks-contacts-app/db/schema.rb +2 -5
  107. data/sample-apps/webhooks-contacts-app/docker-compose.yml +13 -10
  108. metadata +299 -7
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 2be582cb04c97f51227502c99c87b197d0fbfdb2ab7f4b1b8da6efaa0c9ee059
4
- data.tar.gz: 7460b8e1c2f0669168fc120e810b439c2ed145e3ccee51cff501a4701d055ace
3
+ metadata.gz: fde62a305b4b8bcbc005edf87d50a5f63df3b4957434f1d8c65383496232996e
4
+ data.tar.gz: a79c12e3a9a570cc79dbfbc0d7db5e15ae1ce24f6a8f0bead73ab08b14df0791
5
5
  SHA512:
6
- metadata.gz: f439e5b8db3299ebaddfcd39bdba84846dc069eb2c871f64480736e9c1c628413635507a751964cfa3265d8a712f9261d8d983425f16cff83cd9b11111129c0b
7
- data.tar.gz: '006007924401ab0cd47c612efd7960453fa045c6fdd9550846750d6e21672c9439e4840ef4d81cedc950e393bc57bcc4da46ebae8c5308323274ff15e308567c'
6
+ metadata.gz: 0035c16400d05778bed11aefd2ce825755a86d92179c14b56efdfdf70bfccba41a3d45960992eb8c52ac21ff4dbccdecf018a475d083e1d78098817203a07c7d
7
+ data.tar.gz: 39576591a4312b52cfca7e4d39c20831d40d589c419f8b9625cb39dbf94b1adb546a83556656da2e383a34a57cb39e3ff570b3f2547882feadaeb6bfc7765a11
@@ -5,6 +5,12 @@ All notable changes to this project will be documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [3.3.0] - 2020-06-01
9
+
10
+ - Add webhooks contacts sample app
11
+ - Add imports contacts sample app
12
+ - Add webhook signature verification helper
13
+
8
14
  ## [3.2.0] - 2020-05-06
9
15
 
10
16
  - Rename imports#get_all to get_page method
@@ -19,6 +19,7 @@ require 'hubspot/oauth_helper'
19
19
  require 'hubspot/version'
20
20
 
21
21
  require 'hubspot/helpers/get_all_helper'
22
+ require 'hubspot/helpers/webhooks_helper'
22
23
 
23
24
  require 'hubspot/codegen/crm/associations/api_client'
24
25
  require 'hubspot/codegen/crm/associations/api_error'
@@ -1,3 +1,14 @@
1
1
  module Hubspot
2
2
  class ConfigurationError < StandardError; end
3
+
4
+ class InvalidSignatureError < StandardError
5
+ def initialize(msg: nil, signature: nil, signature_version: nil, hash_result: nil)
6
+ @signature = signature
7
+ @signature_version = signature_version
8
+ @hash_result = hash_result
9
+ msg = "Invalid signature passed to request" if msg.nil?
10
+
11
+ super(msg)
12
+ end
13
+ end
3
14
  end
@@ -0,0 +1,31 @@
1
+ module Hubspot
2
+ module Helpers
3
+ class WebhooksHelper
4
+ def self.validate_signature(
5
+ signature:,
6
+ client_secret:,
7
+ http_uri:,
8
+ request_body:,
9
+ http_method: 'POST',
10
+ signature_version: 'v2'
11
+ )
12
+
13
+ if signature_version == 'v1'
14
+ source_string = client_secret + request_body.to_s
15
+ else
16
+ source_string = client_secret + http_method + http_uri + request_body.to_s
17
+ end
18
+
19
+ hash_result = Digest::SHA2.hexdigest(source_string.encode('utf-8'))
20
+
21
+ if hash_result != signature
22
+ raise InvalidSignatureError.new(
23
+ signature: signature,
24
+ signature_version: signature_version,
25
+ hash_result: hash_result
26
+ )
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
@@ -1,3 +1,3 @@
1
1
  module Hubspot
2
- VERSION = '3.2.0'
2
+ VERSION = '3.3.0'
3
3
  end
@@ -0,0 +1,2 @@
1
+ HUBSPOT_CLIENT_ID=
2
+ HUBSPOT_CLIENT_SECRET=
@@ -0,0 +1,3 @@
1
+ HUBSPOT_EMAIL=
2
+ HUBSPOT_PASSWORD=
3
+ HUBSPOT_USER_ID=
@@ -0,0 +1,37 @@
1
+ # See https://help.github.com/articles/ignoring-files for more about ignoring files.
2
+ #
3
+ # If you find yourself ignoring temporary files generated by your text editor
4
+ # or operating system, you probably want to add a global ignore instead:
5
+ # git config --global core.excludesfile '~/.gitignore_global'
6
+
7
+ # Ignore bundler config.
8
+ /.bundle
9
+
10
+ # Ignore the default SQLite database.
11
+ /db/*.sqlite3
12
+ /db/*.sqlite3-journal
13
+
14
+ # Ignore all logfiles and tempfiles.
15
+ /log/*
16
+ /tmp/*
17
+ !/log/.keep
18
+ !/tmp/.keep
19
+
20
+ # Ignore uploaded files in development
21
+ /storage/*
22
+ !/storage/.keep
23
+
24
+ /node_modules
25
+ /yarn-error.log
26
+
27
+ /public/assets
28
+ .byebug_history
29
+
30
+ # Ignore master key for decrypting credentials and more.
31
+ /config/master.key
32
+
33
+ .rubocop.yml
34
+ .env
35
+ .env.test
36
+
37
+ /public/uploads
@@ -0,0 +1 @@
1
+ --require spec_helper
@@ -0,0 +1,22 @@
1
+ FROM ruby:2.6.3
2
+ RUN apt-get update -qq && apt-get install -y nodejs postgresql-client
3
+ RUN mkdir /hubspot-api-client
4
+
5
+ COPY ./lib /hubspot-api-client/lib
6
+ COPY ./sample-apps /hubspot-api-client/sample-apps
7
+ COPY ./spec /hubspot-api-client/spec
8
+ COPY ./Gemfile /hubspot-api-client/Gemfile
9
+ COPY ./Gemfile.lock /hubspot-api-client/Gemfile.lock
10
+ COPY ./hubspot-api-client.gemspec /hubspot-api-client/hubspot-api-client.gemspec
11
+
12
+ WORKDIR /hubspot-api-client/sample-apps/imports-contacts-app
13
+ RUN bundle install
14
+
15
+ # Add a script to be executed every time the container starts.
16
+ COPY ./sample-apps/imports-contacts-app/docker-entrypoint.sh /usr/bin/
17
+ RUN chmod +x /usr/bin/docker-entrypoint.sh
18
+ ENTRYPOINT ["docker-entrypoint.sh"]
19
+ EXPOSE 3000
20
+
21
+ # Start the main process.
22
+ CMD ["rails", "server", "-b", "0.0.0.0"]
@@ -0,0 +1,33 @@
1
+ source 'https://rubygems.org'
2
+ git_source(:github) { |repo| "https://github.com/#{repo}.git" }
3
+
4
+ ruby '2.6.3'
5
+
6
+ gem 'rails', '~> 5.2.3'
7
+ gem 'sqlite3'
8
+ gem 'puma', '~> 4.3'
9
+ gem 'sass-rails', '~> 5.0'
10
+ gem 'uglifier', '>= 1.3.0'
11
+ gem 'jbuilder', '~> 2.5'
12
+ gem 'csv'
13
+
14
+ gem 'hubspot-api-client', path: '../../'
15
+
16
+ group :development, :test do
17
+ gem 'dotenv-rails', require: 'dotenv/rails-now'
18
+ gem 'byebug', platforms: [:mri, :mingw, :x64_mingw]
19
+ gem 'rspec-rails', '~> 3.5'
20
+ gem 'capybara'
21
+ gem 'capybara-mechanize', '~> 1.11'
22
+ gem 'selenium-webdriver', '3.4.3'
23
+ gem 'geckodriver-helper'
24
+ gem 'pry'
25
+ gem 'pry-byebug'
26
+ end
27
+
28
+ group :development do
29
+ gem 'web-console', '>= 3.3.0'
30
+ gem 'listen', '>= 3.0.5', '< 3.2'
31
+ end
32
+
33
+ gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby]
@@ -0,0 +1,271 @@
1
+ PATH
2
+ remote: ../..
3
+ specs:
4
+ hubspot-api-client (3.2.0)
5
+ faraday (>= 0.14.0)
6
+ json (~> 2.1, >= 2.1.0)
7
+
8
+ GEM
9
+ remote: https://rubygems.org/
10
+ specs:
11
+ actioncable (5.2.3)
12
+ actionpack (= 5.2.3)
13
+ nio4r (~> 2.0)
14
+ websocket-driver (>= 0.6.1)
15
+ actionmailer (5.2.3)
16
+ actionpack (= 5.2.3)
17
+ actionview (= 5.2.3)
18
+ activejob (= 5.2.3)
19
+ mail (~> 2.5, >= 2.5.4)
20
+ rails-dom-testing (~> 2.0)
21
+ actionpack (5.2.3)
22
+ actionview (= 5.2.3)
23
+ activesupport (= 5.2.3)
24
+ rack (~> 2.0)
25
+ rack-test (>= 0.6.3)
26
+ rails-dom-testing (~> 2.0)
27
+ rails-html-sanitizer (~> 1.0, >= 1.0.2)
28
+ actionview (5.2.3)
29
+ activesupport (= 5.2.3)
30
+ builder (~> 3.1)
31
+ erubi (~> 1.4)
32
+ rails-dom-testing (~> 2.0)
33
+ rails-html-sanitizer (~> 1.0, >= 1.0.3)
34
+ activejob (5.2.3)
35
+ activesupport (= 5.2.3)
36
+ globalid (>= 0.3.6)
37
+ activemodel (5.2.3)
38
+ activesupport (= 5.2.3)
39
+ activerecord (5.2.3)
40
+ activemodel (= 5.2.3)
41
+ activesupport (= 5.2.3)
42
+ arel (>= 9.0)
43
+ activestorage (5.2.3)
44
+ actionpack (= 5.2.3)
45
+ activerecord (= 5.2.3)
46
+ marcel (~> 0.3.1)
47
+ activesupport (5.2.3)
48
+ concurrent-ruby (~> 1.0, >= 1.0.2)
49
+ i18n (>= 0.7, < 2)
50
+ minitest (~> 5.1)
51
+ tzinfo (~> 1.1)
52
+ addressable (2.7.0)
53
+ public_suffix (>= 2.0.2, < 5.0)
54
+ archive-zip (0.12.0)
55
+ io-like (~> 0.3.0)
56
+ arel (9.0.0)
57
+ bindex (0.8.1)
58
+ builder (3.2.3)
59
+ byebug (11.0.1)
60
+ capybara (3.29.0)
61
+ addressable
62
+ mini_mime (>= 0.1.3)
63
+ nokogiri (~> 1.8)
64
+ rack (>= 1.6.0)
65
+ rack-test (>= 0.6.3)
66
+ regexp_parser (~> 1.5)
67
+ xpath (~> 3.2)
68
+ capybara-mechanize (1.11.0)
69
+ capybara (>= 2.4.4, < 4)
70
+ mechanize (~> 2.7.0)
71
+ childprocess (0.9.0)
72
+ ffi (~> 1.0, >= 1.0.11)
73
+ coderay (1.1.2)
74
+ concurrent-ruby (1.1.5)
75
+ connection_pool (2.2.2)
76
+ crass (1.0.5)
77
+ csv (3.1.2)
78
+ diff-lcs (1.3)
79
+ domain_name (0.5.20190701)
80
+ unf (>= 0.0.5, < 1.0.0)
81
+ dotenv (2.7.5)
82
+ dotenv-rails (2.7.5)
83
+ dotenv (= 2.7.5)
84
+ railties (>= 3.2, < 6.1)
85
+ erubi (1.9.0)
86
+ execjs (2.7.0)
87
+ faraday (1.0.1)
88
+ multipart-post (>= 1.2, < 3)
89
+ ffi (1.11.1)
90
+ geckodriver-helper (0.24.0)
91
+ archive-zip (~> 0.7)
92
+ globalid (0.4.2)
93
+ activesupport (>= 4.2.0)
94
+ http-cookie (1.0.3)
95
+ domain_name (~> 0.5)
96
+ i18n (1.7.0)
97
+ concurrent-ruby (~> 1.0)
98
+ io-like (0.3.0)
99
+ jbuilder (2.9.1)
100
+ activesupport (>= 4.2.0)
101
+ json (2.3.0)
102
+ listen (3.1.5)
103
+ rb-fsevent (~> 0.9, >= 0.9.4)
104
+ rb-inotify (~> 0.9, >= 0.9.7)
105
+ ruby_dep (~> 1.2)
106
+ loofah (2.3.1)
107
+ crass (~> 1.0.2)
108
+ nokogiri (>= 1.5.9)
109
+ mail (2.7.1)
110
+ mini_mime (>= 0.1.1)
111
+ marcel (0.3.3)
112
+ mimemagic (~> 0.3.2)
113
+ mechanize (2.7.6)
114
+ domain_name (~> 0.5, >= 0.5.1)
115
+ http-cookie (~> 1.0)
116
+ mime-types (>= 1.17.2)
117
+ net-http-digest_auth (~> 1.1, >= 1.1.1)
118
+ net-http-persistent (>= 2.5.2)
119
+ nokogiri (~> 1.6)
120
+ ntlm-http (~> 0.1, >= 0.1.1)
121
+ webrobots (>= 0.0.9, < 0.2)
122
+ method_source (0.9.2)
123
+ mime-types (3.3)
124
+ mime-types-data (~> 3.2015)
125
+ mime-types-data (3.2019.1009)
126
+ mimemagic (0.3.3)
127
+ mini_mime (1.0.2)
128
+ mini_portile2 (2.4.0)
129
+ minitest (5.13.0)
130
+ multipart-post (2.1.1)
131
+ net-http-digest_auth (1.4.1)
132
+ net-http-persistent (3.1.0)
133
+ connection_pool (~> 2.2)
134
+ nio4r (2.5.2)
135
+ nokogiri (1.10.5)
136
+ mini_portile2 (~> 2.4.0)
137
+ ntlm-http (0.1.1)
138
+ pry (0.12.2)
139
+ coderay (~> 1.1.0)
140
+ method_source (~> 0.9.0)
141
+ pry-byebug (3.7.0)
142
+ byebug (~> 11.0)
143
+ pry (~> 0.10)
144
+ public_suffix (4.0.1)
145
+ puma (4.3.1)
146
+ nio4r (~> 2.0)
147
+ rack (2.2.2)
148
+ rack-test (1.1.0)
149
+ rack (>= 1.0, < 3)
150
+ rails (5.2.3)
151
+ actioncable (= 5.2.3)
152
+ actionmailer (= 5.2.3)
153
+ actionpack (= 5.2.3)
154
+ actionview (= 5.2.3)
155
+ activejob (= 5.2.3)
156
+ activemodel (= 5.2.3)
157
+ activerecord (= 5.2.3)
158
+ activestorage (= 5.2.3)
159
+ activesupport (= 5.2.3)
160
+ bundler (>= 1.3.0)
161
+ railties (= 5.2.3)
162
+ sprockets-rails (>= 2.0.0)
163
+ rails-dom-testing (2.0.3)
164
+ activesupport (>= 4.2.0)
165
+ nokogiri (>= 1.6)
166
+ rails-html-sanitizer (1.3.0)
167
+ loofah (~> 2.3)
168
+ railties (5.2.3)
169
+ actionpack (= 5.2.3)
170
+ activesupport (= 5.2.3)
171
+ method_source
172
+ rake (>= 0.8.7)
173
+ thor (>= 0.19.0, < 2.0)
174
+ rake (13.0.0)
175
+ rb-fsevent (0.10.3)
176
+ rb-inotify (0.10.0)
177
+ ffi (~> 1.0)
178
+ regexp_parser (1.6.0)
179
+ rspec-core (3.9.0)
180
+ rspec-support (~> 3.9.0)
181
+ rspec-expectations (3.9.0)
182
+ diff-lcs (>= 1.2.0, < 2.0)
183
+ rspec-support (~> 3.9.0)
184
+ rspec-mocks (3.9.0)
185
+ diff-lcs (>= 1.2.0, < 2.0)
186
+ rspec-support (~> 3.9.0)
187
+ rspec-rails (3.9.0)
188
+ actionpack (>= 3.0)
189
+ activesupport (>= 3.0)
190
+ railties (>= 3.0)
191
+ rspec-core (~> 3.9.0)
192
+ rspec-expectations (~> 3.9.0)
193
+ rspec-mocks (~> 3.9.0)
194
+ rspec-support (~> 3.9.0)
195
+ rspec-support (3.9.0)
196
+ ruby_dep (1.5.0)
197
+ rubyzip (1.3.0)
198
+ sass (3.7.4)
199
+ sass-listen (~> 4.0.0)
200
+ sass-listen (4.0.0)
201
+ rb-fsevent (~> 0.9, >= 0.9.4)
202
+ rb-inotify (~> 0.9, >= 0.9.7)
203
+ sass-rails (5.1.0)
204
+ railties (>= 5.2.0)
205
+ sass (~> 3.1)
206
+ sprockets (>= 2.8, < 4.0)
207
+ sprockets-rails (>= 2.0, < 4.0)
208
+ tilt (>= 1.1, < 3)
209
+ selenium-webdriver (3.4.3)
210
+ childprocess (~> 0.5)
211
+ rubyzip (~> 1.0)
212
+ sprockets (3.7.2)
213
+ concurrent-ruby (~> 1.0)
214
+ rack (> 1, < 3)
215
+ sprockets-rails (3.2.1)
216
+ actionpack (>= 4.0)
217
+ activesupport (>= 4.0)
218
+ sprockets (>= 3.0.0)
219
+ sqlite3 (1.4.1)
220
+ thor (0.20.3)
221
+ thread_safe (0.3.6)
222
+ tilt (2.0.10)
223
+ tzinfo (1.2.5)
224
+ thread_safe (~> 0.1)
225
+ uglifier (4.2.0)
226
+ execjs (>= 0.3.0, < 3)
227
+ unf (0.1.4)
228
+ unf_ext
229
+ unf_ext (0.0.7.6)
230
+ web-console (3.7.0)
231
+ actionview (>= 5.0)
232
+ activemodel (>= 5.0)
233
+ bindex (>= 0.4.0)
234
+ railties (>= 5.0)
235
+ webrobots (0.1.2)
236
+ websocket-driver (0.7.1)
237
+ websocket-extensions (>= 0.1.0)
238
+ websocket-extensions (0.1.4)
239
+ xpath (3.2.0)
240
+ nokogiri (~> 1.8)
241
+
242
+ PLATFORMS
243
+ ruby
244
+
245
+ DEPENDENCIES
246
+ byebug
247
+ capybara
248
+ capybara-mechanize (~> 1.11)
249
+ csv
250
+ dotenv-rails
251
+ geckodriver-helper
252
+ hubspot-api-client!
253
+ jbuilder (~> 2.5)
254
+ listen (>= 3.0.5, < 3.2)
255
+ pry
256
+ pry-byebug
257
+ puma (~> 4.3)
258
+ rails (~> 5.2.3)
259
+ rspec-rails (~> 3.5)
260
+ sass-rails (~> 5.0)
261
+ selenium-webdriver (= 3.4.3)
262
+ sqlite3
263
+ tzinfo-data
264
+ uglifier (>= 1.3.0)
265
+ web-console (>= 3.3.0)
266
+
267
+ RUBY VERSION
268
+ ruby 2.6.3p62
269
+
270
+ BUNDLED WITH
271
+ 1.17.3