omniauth-hipchat 0.1.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.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 56bdb1a63c254d724a89ab0ea19f4cf4df8c9ad0
4
+ data.tar.gz: 279e2b03788cee9f1f242eb9a374b926ccbf2822
5
+ SHA512:
6
+ metadata.gz: f9d7c38fe5b5ce2f6bea4370947146445f7313f10f572d43669adee55814e8fca1892a87ce5db200ce0e532220432019a33387dca6328a1e61cf61693cd1db5d
7
+ data.tar.gz: 465a07860ba71f1c13f08730b666491090115568c0ded4757899ec0efad56a9f57c41121489214a2a53fdcb023bf8027c6d05f49941e293d91bf5a6bf18dc4b6
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,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in omniauth-hipchat.gemspec
4
+ gemspec
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2015 Maciej Paruszewski
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,61 @@
1
+ # Omniauth::Hipchat
2
+
3
+ This Gem contains the HipChat strategy for OmniAuth.
4
+
5
+ [![Gem Version](https://badge.fury.io/rb/omniauth-hipchat.svg)](http://badge.fury.io/rb/omniauth-hipchat)
6
+
7
+ ## Before You Begin
8
+
9
+ You should have already installed OmniAuth into your app; if not, read the [OmniAuth README](https://github.com/intridea/omniauth) to get started.
10
+
11
+ Now read documentation about [HipChat integrations](https://www.hipchat.com/docs/apiv2/addons) and create an application. Take note of your API keys.
12
+
13
+ ## Using This Strategy
14
+
15
+ First start by adding this gem to your Gemfile:
16
+
17
+ ```ruby
18
+ gem 'omniauth-hipchat'
19
+ ```
20
+
21
+ If you need to use the latest HEAD version, you can do so with:
22
+
23
+ ```ruby
24
+ gem 'omniauth-hipchat', github: 'pinoss/omniauth-hipchat'
25
+ ```
26
+
27
+ Next, tell OmniAuth about this provider. For a Rails app, your `config/initializers/omniauth.rb` file should look like this:
28
+
29
+ ```ruby
30
+ Rails.application.config.middleware.use OmniAuth::Builder do
31
+ provider :hipchat, "API_KEY", "API_SECRET", scope: "view_group admin_group"
32
+ end
33
+ ```
34
+
35
+ Replace `"API_KEY"` and `"API_SECRET"` with the appropriate values you obtained [earlier](https://www.hipchat.com/docs/apiv2/addons).
36
+
37
+ If you are using [Devise](https://github.com/plataformatec/devise) then it will look like this:
38
+
39
+ ```ruby
40
+ Devise.setup do |config|
41
+ # other stuff...
42
+
43
+ config.omniauth :hipchat, ENV["HIPCHAT_APP_ID"], ENV["HIPCHAT_APP_SECRET"], scope: 'view_group admin_group'
44
+
45
+ # other stuff...
46
+ end
47
+ ```
48
+
49
+ HipChat lets you combine and choose from a [few different scopes](https://www.hipchat.com/docs/apiv2/auth#scopes).
50
+
51
+ ## Contributing
52
+
53
+ 1. Fork it
54
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
55
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
56
+ 4. Push to the branch (`git push origin my-new-feature`)
57
+ 5. Create new Pull Request
58
+
59
+ ## Special Thanks
60
+
61
+ Many thanks to the [omniauth-slack](https://github.com/CanCanCommunity/cancancan/contributors) and [omniauth-reddit contributors](https://github.com/CanCanCommunity/cancancan/contributors). This strategy was inspired by Omniauth Slack and Reddit strategies.
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-hipchat/version'
2
+ require 'omniauth/strategies/hipchat'
@@ -0,0 +1,5 @@
1
+ module Omniauth
2
+ module Hipchat
3
+ VERSION = "0.1.0"
4
+ end
5
+ end
@@ -0,0 +1,80 @@
1
+ require 'omniauth/strategies/oauth2'
2
+ require 'base64'
3
+
4
+ module OmniAuth
5
+ module Strategies
6
+ class Hipchat < OmniAuth::Strategies::OAuth2
7
+ option :name, 'hipchat'
8
+
9
+ option :authorize_options, [:scope]
10
+
11
+ option :client_options, {
12
+ site: 'https://api.hipchat.com',
13
+ token_url: '/v2/oauth/token',
14
+ authorize_url: 'https://www.hipchat.com/users/authorize'
15
+ }
16
+
17
+ uid { raw_info['owner']['id'] }
18
+
19
+ info do
20
+ {
21
+ name: raw_info['owner'].to_h['name'],
22
+ email: user_info['email'],
23
+ mention_name: raw_info['owner'].to_h['mention_name'],
24
+ roles: user_info['roles'],
25
+ client_name: raw_info['client'].to_h['name'],
26
+ room: raw_info['client'].to_h['room'],
27
+ title: user_info['title'],
28
+ image: user_info['photo_url'],
29
+ group_avatar: group_info['avatar_url'],
30
+ group_domain: group_info['subdomain'],
31
+ group_id: access_token['group_id'],
32
+ group: group_info['name'],
33
+ plan: group_info['plan'].to_h['type'],
34
+ user_id: raw_info['owner'].to_h['id'],
35
+ is_group_admin: user_info['is_group_admin'],
36
+ xmpp_jid: user_info['xmpp_jid'],
37
+ time_zone: user_info['timezone']
38
+ }
39
+ end
40
+
41
+ extra do
42
+ {
43
+ raw_info: raw_info,
44
+ user_info: user_info,
45
+ group_info: group_info
46
+ }
47
+ end
48
+
49
+ def raw_info
50
+ @raw_info ||= access_token.get("/v2/oauth/token/#{access_token.token}").parsed
51
+ end
52
+
53
+ def user_info
54
+ return {} unless group_info_allowed?
55
+ @user_info ||= access_token.get("/v2/user/#{raw_info['owner']['id']}").parsed
56
+ end
57
+
58
+ def group_info
59
+ return {} unless group_info_allowed?
60
+ @group_info ||= access_token.get("/v2/group/#{access_token['group_id']}").parsed
61
+ end
62
+
63
+ def build_access_token
64
+ options.token_params.merge!(:headers => {'Authorization' => basic_auth_header })
65
+ super
66
+ end
67
+
68
+ def basic_auth_header
69
+ "Basic " + Base64.strict_encode64("#{options[:client_id]}:#{options[:client_secret]}")
70
+ end
71
+
72
+ def group_info_allowed?
73
+ return false unless options['scope']
74
+ group_info_scopes = ['view_room']
75
+ scopes = options['scope'].split(' ')
76
+ (scopes & group_info_scopes).any?
77
+ end
78
+ end
79
+ end
80
+ end
@@ -0,0 +1,25 @@
1
+ # coding: utf-8
2
+ require File.expand_path('../lib/omniauth-hipchat/version', __FILE__)
3
+
4
+ Gem::Specification.new do |spec|
5
+ spec.name = "omniauth-hipchat"
6
+ spec.version = Omniauth::Hipchat::VERSION
7
+ spec.authors = ["Maciej Paruszewski"]
8
+ spec.email = ["maciek.paruszewski@gmail.com"]
9
+ spec.description = %q{OmniAuth strategy for HipChat}
10
+ spec.summary = %q{OmniAuth strategy for HipChat}
11
+ spec.homepage = "https://github.com/pinoss/omniauth-hipchat.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.3.1"
20
+
21
+ spec.add_development_dependency "bundler", "~> 1.3"
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,56 @@
1
+ require "bundler/setup"
2
+ require "minitest/autorun"
3
+ require "mocha/setup"
4
+ require "omniauth/strategies/hipchat"
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
+ end
45
+
46
+ def strategy
47
+ @strategy ||= begin
48
+ args = [@client_id, @client_secret, @options].compact
49
+ OmniAuth::Strategies::Hipchat.new(nil, *args).tap do |strategy|
50
+ strategy.stubs(:request).returns(@request)
51
+ end
52
+ end
53
+ end
54
+ end
55
+
56
+ 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,100 @@
1
+ require "helper"
2
+ require "omniauth-hipchat"
3
+
4
+ class StrategyTest < StrategyTestCase
5
+ include OAuth2StrategyTests
6
+ end
7
+
8
+ class ClientTest < StrategyTestCase
9
+ test "has correct HipChat site" do
10
+ assert_equal "https://api.hipchat.com", strategy.client.site
11
+ end
12
+
13
+ test "has correct authorize url" do
14
+ assert_equal "https://www.hipchat.com/users/authorize", strategy.client.options[:authorize_url]
15
+ end
16
+
17
+ test "has correct token url" do
18
+ assert_equal "/v2/oauth/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/hipchat/callback", strategy.callback_url
28
+ end
29
+
30
+ test "returns path from callback_path option" do
31
+ @options = { :callback_path => "/auth/hipchat/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/hipchat/done", strategy.callback_url
36
+ end
37
+ end
38
+
39
+ class UidTest < StrategyTestCase
40
+ def setup
41
+ super
42
+ strategy.stubs(:raw_info).returns("owner" => { "id" => "1231234" })
43
+ end
44
+
45
+ test "returns the user ID from raw_info" do
46
+ assert_equal "1231234", 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(:refresh_token)
58
+ strategy.stubs(:access_token).returns(@access_token)
59
+ end
60
+
61
+ test "returns a Hash" do
62
+ assert_kind_of Hash, strategy.credentials
63
+ end
64
+
65
+ test "returns the token" do
66
+ @access_token.stubs(:token).returns("123")
67
+ assert_equal "123", strategy.credentials["token"]
68
+ end
69
+
70
+ test "returns the expiry status" do
71
+ @access_token.stubs(:expires?).returns(true)
72
+ assert strategy.credentials["expires"]
73
+
74
+ @access_token.stubs(:expires?).returns(false)
75
+ refute strategy.credentials["expires"]
76
+ end
77
+
78
+ test "returns the refresh token and expiry time when expiring" do
79
+ ten_mins_from_now = (Time.now + 600).to_i
80
+ @access_token.stubs(:expires?).returns(true)
81
+ @access_token.stubs(:refresh_token).returns("321")
82
+ @access_token.stubs(:expires_at).returns(ten_mins_from_now)
83
+ assert_equal "321", strategy.credentials["refresh_token"]
84
+ assert_equal ten_mins_from_now, strategy.credentials["expires_at"]
85
+ end
86
+
87
+ test "does not return the refresh token when test is nil and expiring" do
88
+ @access_token.stubs(:expires?).returns(true)
89
+ @access_token.stubs(:refresh_token).returns(nil)
90
+ assert_nil strategy.credentials["refresh_token"]
91
+ refute_has_key "refresh_token", strategy.credentials
92
+ end
93
+
94
+ test "does not return the refresh token when not expiring" do
95
+ @access_token.stubs(:expires?).returns(false)
96
+ @access_token.stubs(:refresh_token).returns("XXX")
97
+ assert_nil strategy.credentials["refresh_token"]
98
+ refute_has_key "refresh_token", strategy.credentials
99
+ end
100
+ end
metadata ADDED
@@ -0,0 +1,129 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: omniauth-hipchat
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Maciej Paruszewski
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-11-16 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.3.1
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: 1.3.1
27
+ - !ruby/object:Gem::Dependency
28
+ name: bundler
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '1.3'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '1.3'
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 HipChat
84
+ email:
85
+ - maciek.paruszewski@gmail.com
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-hipchat.rb
96
+ - lib/omniauth-hipchat/version.rb
97
+ - lib/omniauth/strategies/hipchat.rb
98
+ - omniauth-hipchat.gemspec
99
+ - test/helper.rb
100
+ - test/support/shared_examples.rb
101
+ - test/test.rb
102
+ homepage: https://github.com/pinoss/omniauth-hipchat.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.4.6
123
+ signing_key:
124
+ specification_version: 4
125
+ summary: OmniAuth strategy for HipChat
126
+ test_files:
127
+ - test/helper.rb
128
+ - test/support/shared_examples.rb
129
+ - test/test.rb