omniauth-hubspot-full 0.0.1

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.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 3bba68321e58b233f0d7c03dee5fddd9e0ed3282
4
+ data.tar.gz: acc52268337f08654f3c9daa145914638b9e8c18
5
+ SHA512:
6
+ metadata.gz: 8964b02fd174693824cbe67b4857c3c4e3c47bb98b455486004242b1ef981764db46ad83daaa864b023686d890dac883f9d78aafabd84858b59467b193e94048
7
+ data.tar.gz: 00bc3a728afb06e17ad1b2dc205a313caea2c9a05f74f533ced3a92fbddc3255a784ddaf66f9c06fd8d4b3bba554c2e13a9fd42353b63e5dde2ff4be83e1689f
data/.gitignore ADDED
@@ -0,0 +1,20 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
18
+ .idea/
19
+ .ruby-version
20
+ .ruby-gemset
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gemspec
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2018 romanos
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,80 @@
1
+ # Omniauth::Hubspot
2
+
3
+ This Gem contains the Hubspot strategy for OmniAuth.
4
+
5
+ ## Before You Begin
6
+
7
+ You should have already installed OmniAuth into your app; if not, read the [OmniAuth README](https://github.com/omniauth/omniauth) to get started.
8
+
9
+ Now sign into the [Hubspot Developer Dashboard](https://developers.hubspot.com/) and create an application. Take note of your API keys.
10
+
11
+
12
+ ## Using This Strategy
13
+
14
+ First start by adding this gem to your Gemfile:
15
+
16
+ ```ruby
17
+ gem 'omniauth-hubspot-full'
18
+ ```
19
+
20
+ If you need to use the latest HEAD version, you can do so with:
21
+
22
+ ```ruby
23
+ gem 'omniauth-hubspot-full', github: 'romanos/omniauth-hubspot'
24
+ ```
25
+
26
+ Next, tell OmniAuth about this provider. For a Rails app, your `config/initializers/omniauth.rb` file should look like this:
27
+
28
+ ```ruby
29
+ Rails.application.config.middleware.use OmniAuth::Builder do
30
+ provider :hubspot, 'API_KEY', 'API_SECRET', scope: 'contacts timeline'
31
+ end
32
+ ```
33
+
34
+ Replace `'API_KEY'` and `'API_SECRET'` with the appropriate values you obtained earlier.
35
+
36
+ If you are using [Devise](https://github.com/plataformatec/devise) then it will look like this:
37
+
38
+ ```ruby
39
+ Devise.setup do |config|
40
+ # other stuff...
41
+
42
+ config.omniauth :hubspot, ENV['HUBSPOT_APP_ID'], ENV['HUBSPOT_APP_SECRET'], scope: 'contacts timeline'
43
+
44
+ # other stuff...
45
+ end
46
+ ```
47
+
48
+
49
+ ## Scopes
50
+ Hubspot lets you choose from a [few different scopes](https://developers.hubspot.com/docs/methods/oauth2/initiate-oauth-integration#scopes).
51
+
52
+ ## Hubspot Information
53
+
54
+ Querying the access token endpoint as defined [here](https://developers.hubspot.com/docs/methods/oauth2/get-access-token-information) returns a basic hash of user info and allowed scopes.
55
+
56
+ ```json
57
+ {
58
+ "token": "CJSP5qf1KhICAQEYs-gDIIGOBii1hQIyGQAf3xBKmlwHjX7OIpuIFEavB2-qYAGQsF4",
59
+ "user": "test@hubspot.com",
60
+ "hub_domain": "demo.hubapi.com",
61
+ "scopes": [
62
+ "contacts",
63
+ "automation",
64
+ "oauth"
65
+ ],
66
+ "hub_id": 62515,
67
+ "app_id": 456,
68
+ "expires_in": 21588,
69
+ "user_id": 123,
70
+ "token_type": "access"
71
+ }
72
+ ```
73
+
74
+ ## Contributing
75
+
76
+ 1. Fork it
77
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
78
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
79
+ 4. Push to the branch (`git push origin my-new-feature`)
80
+ 5. Create new Pull Request
data/Rakefile ADDED
@@ -0,0 +1,8 @@
1
+ require "bundler/gem_tasks"
2
+ require "rake/testtask"
3
+
4
+ Rake::TestTask.new do |task|
5
+ task.libs << "test"
6
+ end
7
+
8
+ task :default => :test
@@ -0,0 +1,2 @@
1
+ require 'omniauth-hubspot/version'
2
+ require 'omniauth/strategies/hubspot'
@@ -0,0 +1,5 @@
1
+ module Omniauth
2
+ module Hubspot
3
+ VERSION = "0.0.1"
4
+ end
5
+ end
@@ -0,0 +1,96 @@
1
+ require 'omniauth/strategies/oauth2'
2
+ require 'uri'
3
+ require 'rack/utils'
4
+
5
+ module OmniAuth
6
+ module Strategies
7
+ class Hubspot < OmniAuth::Strategies::OAuth2
8
+ option :name, 'hubspot'
9
+
10
+ option :authorize_options, [:scope]
11
+
12
+ option :client_options, {
13
+ site: 'https://api.hubapi.com',
14
+ authorize_url: 'https://app.hubspot.com/oauth/authorize',
15
+ token_url: '/oauth/v1/token'
16
+ }
17
+
18
+ option :auth_token_params, {
19
+ mode: :query,
20
+ param_name: 'token'
21
+ }
22
+
23
+ # User ID is not guaranteed to be globally unique across all Hubspot users.
24
+ # The combination of user ID and Hub ID, on the other hand, is guaranteed
25
+ # to be globally unique.
26
+ uid { "#{identity['user_id']}-#{identity['hub_id']}" }
27
+
28
+ # Make sure to record refresh token
29
+ credentials do
30
+ {
31
+ token: access_token.token,
32
+ refresh_token: access_token.refresh_token,
33
+ expires_at: access_token.expires_at,
34
+ expires_in: access_token.expires_in,
35
+ expires: access_token.expires?
36
+ }
37
+ end
38
+
39
+ # {
40
+ # "token": "CJSP5qf1KhICAQEYs-gDIIGOBii1hQIyGQAf3xBKmlwHjX7OIpuIFEavB2-qYAGQsF4",
41
+ # "user": "test@hubspot.com",
42
+ # "hub_domain": "demo.hubapi.com",
43
+ # "scopes": [
44
+ # "contacts",
45
+ # "automation",
46
+ # "oauth"
47
+ # ],
48
+ # "hub_id": 62515,
49
+ # "app_id": 456,
50
+ # "expires_in": 21588,
51
+ # "user_id": 123,
52
+ # "token_type": "access"
53
+ # }
54
+
55
+ info do
56
+ {
57
+ user_id: identity['user_id'],
58
+ user: identity['user'],
59
+ hub_id: identity['hub_id'],
60
+ hub_domain: identity['image_48'],
61
+ app_id: identity['app_id'],
62
+ scopes: identity['scopes']
63
+
64
+ }
65
+ end
66
+
67
+ extra do
68
+ {
69
+ raw_info: {
70
+ identity: identity
71
+ }
72
+ }
73
+ end
74
+
75
+ def authorize_params
76
+ super.tap do |params|
77
+ %w[scope].each do |v|
78
+ if request.params[v]
79
+ params[v.to_sym] = request.params[v]
80
+ end
81
+ end
82
+ end
83
+ end
84
+
85
+ def identity
86
+ @identity ||= access_token.get("/oauth/v1/access-tokens/#{access_token.token}").parsed
87
+ end
88
+
89
+ #private
90
+
91
+ def callback_url
92
+ full_host + script_name + callback_path
93
+ end
94
+ end
95
+ end
96
+ end
@@ -0,0 +1,25 @@
1
+ # coding: utf-8
2
+ require File.expand_path('../lib/omniauth-hubspot/version', __FILE__)
3
+
4
+ Gem::Specification.new do |spec|
5
+ spec.name = "omniauth-hubspot-full"
6
+ spec.version = Omniauth::Hubspot::VERSION
7
+ spec.authors = ["romanos"]
8
+ spec.email = ["romanos@jargon.ai"]
9
+ spec.description = %q{OmniAuth strategy for Hubspot (borrowed heavily from @kmrshntr)}
10
+ spec.summary = %q{OmniAuth strategy for Hubspot (borrowed heavily from @kmrshntr)}
11
+ spec.homepage = "https://github.com/romanos/omniauth-hubspot.git"
12
+ spec.license = "MIT"
13
+
14
+ spec.files = `git ls-files`.split($/)
15
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
16
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
17
+ spec.require_paths = ["lib"]
18
+
19
+ spec.add_runtime_dependency 'omniauth-oauth2', "~> 1.5"
20
+
21
+ spec.add_development_dependency "bundler"
22
+ spec.add_development_dependency "rake"
23
+ spec.add_development_dependency "minitest"
24
+ spec.add_development_dependency "mocha"
25
+ end
data/test/helper.rb ADDED
@@ -0,0 +1,57 @@
1
+ require "bundler/setup"
2
+ require "minitest/autorun"
3
+ require "mocha/setup"
4
+ require "omniauth/strategies/hubspot"
5
+
6
+ OmniAuth.config.test_mode = true
7
+
8
+ module BlockTestHelper
9
+ def test(name, &blk)
10
+ method_name = "test_#{name.gsub(/\s+/, "_")}"
11
+ raise "Method already defined: #{method_name}" if instance_methods.include?(method_name.to_sym)
12
+ define_method method_name, &blk
13
+ end
14
+ end
15
+
16
+ module CustomAssertions
17
+ def assert_has_key(key, hash, msg = nil)
18
+ msg = message(msg) { "Expected #{hash.inspect} to have key #{key.inspect}" }
19
+ assert hash.has_key?(key), msg
20
+ end
21
+
22
+ def refute_has_key(key, hash, msg = nil)
23
+ msg = message(msg) { "Expected #{hash.inspect} not to have key #{key.inspect}" }
24
+ refute hash.has_key?(key), msg
25
+ end
26
+ end
27
+
28
+ class TestCase < Minitest::Test
29
+ extend BlockTestHelper
30
+ include CustomAssertions
31
+ end
32
+
33
+ class StrategyTestCase < TestCase
34
+ def setup
35
+ @request = stub("Request")
36
+ @request.stubs(:params).returns({})
37
+ @request.stubs(:cookies).returns({})
38
+ @request.stubs(:env).returns({})
39
+ @request.stubs(:scheme).returns({})
40
+ @request.stubs(:ssl?).returns(false)
41
+
42
+ @client_id = "123"
43
+ @client_secret = "53cr3tz"
44
+ @options = {}
45
+ end
46
+
47
+ def strategy
48
+ @strategy ||= begin
49
+ args = [@client_id, @client_secret, @options].compact
50
+ OmniAuth::Strategies::Hubspot.new(nil, *args).tap do |strategy|
51
+ strategy.stubs(:request).returns(@request)
52
+ end
53
+ end
54
+ end
55
+ end
56
+
57
+ Dir[File.expand_path("../support/**/*", __FILE__)].each(&method(:require))
@@ -0,0 +1,85 @@
1
+ # NOTE it would be useful if this lived in omniauth-oauth2 eventually
2
+ module OAuth2StrategyTests
3
+ def self.included(base)
4
+ base.class_eval do
5
+ include ClientTests
6
+ include AuthorizeParamsTests
7
+ include CSRFAuthorizeParamsTests
8
+ include TokenParamsTests
9
+ end
10
+ end
11
+
12
+ module ClientTests
13
+ extend BlockTestHelper
14
+
15
+ test "should be initialized with symbolized client_options" do
16
+ @options = { :client_options => { "authorize_url" => "https://example.com" } }
17
+ assert_equal "https://example.com", strategy.client.options[:authorize_url]
18
+ end
19
+ end
20
+
21
+ module AuthorizeParamsTests
22
+ extend BlockTestHelper
23
+
24
+ test "should include any authorize params passed in the :authorize_params option" do
25
+ @options = { :authorize_params => { :foo => "bar", :baz => "zip" } }
26
+ assert_equal "bar", strategy.authorize_params["foo"]
27
+ assert_equal "zip", strategy.authorize_params["baz"]
28
+ end
29
+
30
+ test "should include top-level options that are marked as :authorize_options" do
31
+ @options = { :authorize_options => [:scope, :foo], :scope => "bar", :foo => "baz" }
32
+ assert_equal "bar", strategy.authorize_params["scope"]
33
+ assert_equal "baz", strategy.authorize_params["foo"]
34
+ end
35
+
36
+ test "should exclude top-level options that are not passed" do
37
+ @options = { :authorize_options => [:bar] }
38
+ refute_has_key :bar, strategy.authorize_params
39
+ refute_has_key "bar", strategy.authorize_params
40
+ end
41
+ end
42
+
43
+ module CSRFAuthorizeParamsTests
44
+ extend BlockTestHelper
45
+
46
+ test "should store random state in the session when none is present in authorize or request params" do
47
+ assert_includes strategy.authorize_params.keys, "state"
48
+ refute_empty strategy.authorize_params["state"]
49
+ refute_empty strategy.session["omniauth.state"]
50
+ assert_equal strategy.authorize_params["state"], strategy.session["omniauth.state"]
51
+ end
52
+
53
+ test "should not store state in the session when present in authorize params vs. a random one" do
54
+ @options = { :authorize_params => { :state => "bar" } }
55
+ refute_empty strategy.authorize_params["state"]
56
+ refute_equal "bar", strategy.authorize_params[:state]
57
+ refute_empty strategy.session["omniauth.state"]
58
+ refute_equal "bar", strategy.session["omniauth.state"]
59
+ end
60
+
61
+ test "should not store state in the session when present in request params vs. a random one" do
62
+ @request.stubs(:params).returns({ "state" => "foo" })
63
+ refute_empty strategy.authorize_params["state"]
64
+ refute_equal "foo", strategy.authorize_params[:state]
65
+ refute_empty strategy.session["omniauth.state"]
66
+ refute_equal "foo", strategy.session["omniauth.state"]
67
+ end
68
+ end
69
+
70
+ module TokenParamsTests
71
+ extend BlockTestHelper
72
+
73
+ test "should include any authorize params passed in the :token_params option" do
74
+ @options = { :token_params => { :foo => "bar", :baz => "zip" } }
75
+ assert_equal "bar", strategy.token_params["foo"]
76
+ assert_equal "zip", strategy.token_params["baz"]
77
+ end
78
+
79
+ test "should include top-level options that are marked as :token_options" do
80
+ @options = { :token_options => [:scope, :foo], :scope => "bar", :foo => "baz" }
81
+ assert_equal "bar", strategy.token_params["scope"]
82
+ assert_equal "baz", strategy.token_params["foo"]
83
+ end
84
+ end
85
+ end
data/test/test.rb ADDED
@@ -0,0 +1,118 @@
1
+ require "helper"
2
+ require "omniauth-hubspot-full"
3
+
4
+ class StrategyTest < StrategyTestCase
5
+ include OAuth2StrategyTests
6
+ end
7
+
8
+ class ClientTest < StrategyTestCase
9
+ test "has correct Hubspot API site" do
10
+ assert_equal "https://api.hubapi.com", strategy.client.site
11
+ end
12
+
13
+ test "has correct authorize url" do
14
+ assert_equal "https://app.hubspot.com/oauth/authorize", strategy.client.options[:authorize_url]
15
+ end
16
+
17
+ test "has correct token url" do
18
+ assert_equal "/oauth/v1/token", strategy.client.options[:token_url]
19
+ end
20
+ end
21
+
22
+ class CallbackUrlTest < StrategyTestCase
23
+ test "returns the default callback url" do
24
+ url_base = "http://auth.request.com"
25
+ @request.stubs(:url).returns("#{url_base}/some/page")
26
+ strategy.stubs(:script_name).returns("") # as not to depend on Rack env
27
+ assert_equal "#{url_base}/auth/hubspot/callback", strategy.callback_url
28
+ end
29
+
30
+ test "returns path from callback_path option" do
31
+ @options = { :callback_path => "/auth/hubspot/done"}
32
+ url_base = "http://auth.request.com"
33
+ @request.stubs(:url).returns("#{url_base}/page/path")
34
+ strategy.stubs(:script_name).returns("") # as not to depend on Rack env
35
+ assert_equal "#{url_base}/auth/hubspot/done", strategy.callback_url
36
+ end
37
+ end
38
+
39
+ class UidTest < StrategyTestCase
40
+ def setup
41
+ super
42
+ strategy.stubs(:identity).returns({"user_id" => "U123", "hub_id" => "H456"})
43
+ end
44
+
45
+ test "returns the user ID from user_identity" do
46
+ assert_equal "U123-H456", strategy.uid
47
+ end
48
+ end
49
+
50
+ class CredentialsTest < StrategyTestCase
51
+ def setup
52
+ super
53
+ @access_token = stub("OAuth2::AccessToken")
54
+ @access_token.stubs(:token)
55
+ @access_token.stubs(:expires?)
56
+ @access_token.stubs(:expires_at)
57
+ @access_token.stubs(:expires_in)
58
+ @access_token.stubs(:refresh_token)
59
+ strategy.stubs(:access_token).returns(@access_token)
60
+ end
61
+
62
+ test "returns a Hash" do
63
+ assert_kind_of Hash, strategy.credentials
64
+ end
65
+
66
+ test "returns the token" do
67
+ @access_token.stubs(:token).returns("123")
68
+ assert_equal "123", strategy.credentials["token"]
69
+ end
70
+
71
+ test "returns the expiry status" do
72
+ @access_token.stubs(:expires?).returns(true)
73
+ assert strategy.credentials["expires"]
74
+
75
+ @access_token.stubs(:expires?).returns(false)
76
+ refute strategy.credentials["expires"]
77
+ end
78
+
79
+ test "returns the refresh token and expiry time when expiring" do
80
+ ten_mins_from_now = (Time.now + 600).to_i
81
+ @access_token.stubs(:expires?).returns(true)
82
+ @access_token.stubs(:refresh_token).returns("321")
83
+ @access_token.stubs(:expires_at).returns(ten_mins_from_now)
84
+ assert_equal "321", strategy.credentials["refresh_token"]
85
+ assert_equal ten_mins_from_now, strategy.credentials["expires_at"]
86
+ end
87
+
88
+ test "does not return the refresh token when test is nil and expiring" do
89
+ @access_token.stubs(:expires?).returns(true)
90
+ @access_token.stubs(:refresh_token).returns(nil)
91
+ assert_nil strategy.credentials["refresh_token"]
92
+ refute_has_key "refresh_token", strategy.credentials
93
+ end
94
+
95
+ test "does not return the refresh token when not expiring" do
96
+ @access_token.stubs(:expires?).returns(false)
97
+ @access_token.stubs(:refresh_token).returns("XXX")
98
+ assert_nil strategy.credentials["refresh_token"]
99
+ refute_has_key "refresh_token", strategy.credentials
100
+ end
101
+ end
102
+
103
+ class UserInfoTest < StrategyTestCase
104
+
105
+ def setup
106
+ super
107
+ @access_token = stub("OAuth2::AccessToken")
108
+ @access_token.stubs(:token).returns("1234")
109
+ strategy.stubs(:access_token).returns(@access_token)
110
+ end
111
+
112
+ test "performs a GET to https://api.hubapi.com/oauth/v1/access-tokens/" do
113
+ @access_token.expects(:get).with("/oauth/v1/access-tokens/#{@access_token.token}")
114
+ .returns(stub_everything("OAuth2::Response"))
115
+ strategy.identity
116
+ end
117
+
118
+ end
metadata ADDED
@@ -0,0 +1,129 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: omniauth-hubspot-full
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - romanos
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2018-02-05 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: omniauth-oauth2
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.5'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.5'
27
+ - !ruby/object:Gem::Dependency
28
+ name: bundler
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rake
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: minitest
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: mocha
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ description: OmniAuth strategy for Hubspot (borrowed heavily from @kmrshntr)
84
+ email:
85
+ - romanos@jargon.ai
86
+ executables: []
87
+ extensions: []
88
+ extra_rdoc_files: []
89
+ files:
90
+ - ".gitignore"
91
+ - Gemfile
92
+ - LICENSE.txt
93
+ - README.md
94
+ - Rakefile
95
+ - lib/omniauth-hubspot-full.rb
96
+ - lib/omniauth-hubspot/version.rb
97
+ - lib/omniauth/strategies/hubspot.rb
98
+ - omniauth-hubspot-full.gemspec
99
+ - test/helper.rb
100
+ - test/support/shared_examples.rb
101
+ - test/test.rb
102
+ homepage: https://github.com/romanos/omniauth-hubspot.git
103
+ licenses:
104
+ - MIT
105
+ metadata: {}
106
+ post_install_message:
107
+ rdoc_options: []
108
+ require_paths:
109
+ - lib
110
+ required_ruby_version: !ruby/object:Gem::Requirement
111
+ requirements:
112
+ - - ">="
113
+ - !ruby/object:Gem::Version
114
+ version: '0'
115
+ required_rubygems_version: !ruby/object:Gem::Requirement
116
+ requirements:
117
+ - - ">="
118
+ - !ruby/object:Gem::Version
119
+ version: '0'
120
+ requirements: []
121
+ rubyforge_project:
122
+ rubygems_version: 2.6.13
123
+ signing_key:
124
+ specification_version: 4
125
+ summary: OmniAuth strategy for Hubspot (borrowed heavily from @kmrshntr)
126
+ test_files:
127
+ - test/helper.rb
128
+ - test/support/shared_examples.rb
129
+ - test/test.rb