oa-oauth 0.1.6 → 0.2.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (101) hide show
  1. data/.gemtest +0 -0
  2. data/.rspec +3 -0
  3. data/.yardopts +4 -0
  4. data/{LICENSE.rdoc → LICENSE} +2 -2
  5. data/README.rdoc +1 -1
  6. data/Rakefile +6 -0
  7. data/autotest/discover.rb +1 -0
  8. data/lib/oa-oauth.rb +1 -0
  9. data/lib/omniauth/oauth.rb +39 -7
  10. data/lib/omniauth/strategies/bitly.rb +46 -0
  11. data/lib/omniauth/strategies/dailymile.rb +64 -0
  12. data/lib/omniauth/strategies/doit.rb +60 -0
  13. data/lib/omniauth/strategies/dopplr.rb +38 -7
  14. data/lib/omniauth/strategies/douban.rb +60 -0
  15. data/lib/omniauth/strategies/evernote.rb +54 -0
  16. data/lib/omniauth/strategies/facebook.rb +29 -11
  17. data/lib/omniauth/strategies/foursquare.rb +50 -27
  18. data/lib/omniauth/strategies/github.rb +15 -12
  19. data/lib/omniauth/strategies/goodreads.rb +44 -0
  20. data/lib/omniauth/strategies/google.rb +80 -0
  21. data/lib/omniauth/strategies/gowalla.rb +13 -10
  22. data/lib/omniauth/strategies/hyves.rb +67 -0
  23. data/lib/omniauth/strategies/identica.rb +4 -4
  24. data/lib/omniauth/strategies/instagram.rb +56 -0
  25. data/lib/omniauth/strategies/instapaper.rb +40 -0
  26. data/lib/omniauth/strategies/linked_in.rb +24 -15
  27. data/lib/omniauth/strategies/meetup.rb +40 -7
  28. data/lib/omniauth/strategies/miso.rb +41 -0
  29. data/lib/omniauth/strategies/mixi.rb +59 -0
  30. data/lib/omniauth/strategies/netflix.rb +65 -0
  31. data/lib/omniauth/strategies/oauth.rb +51 -13
  32. data/lib/omniauth/strategies/oauth2.rb +48 -23
  33. data/lib/omniauth/strategies/qzone.rb +69 -0
  34. data/lib/omniauth/strategies/rdio.rb +45 -0
  35. data/lib/omniauth/strategies/renren.rb +87 -0
  36. data/lib/omniauth/strategies/salesforce.rb +44 -0
  37. data/lib/omniauth/strategies/smug_mug.rb +42 -0
  38. data/lib/omniauth/strategies/sound_cloud.rb +9 -9
  39. data/lib/omniauth/strategies/t163.rb +57 -0
  40. data/lib/omniauth/strategies/teambox.rb +49 -0
  41. data/lib/omniauth/strategies/thirty_seven_signals.rb +11 -8
  42. data/lib/omniauth/strategies/tqq.rb +64 -0
  43. data/lib/omniauth/strategies/trade_me.rb +45 -0
  44. data/lib/omniauth/strategies/trip_it.rb +3 -16
  45. data/lib/omniauth/strategies/tsina.rb +79 -0
  46. data/lib/omniauth/strategies/tsohu.rb +57 -0
  47. data/lib/omniauth/strategies/tumblr.rb +60 -0
  48. data/lib/omniauth/strategies/twitter.rb +21 -11
  49. data/lib/omniauth/strategies/type_pad.rb +76 -0
  50. data/lib/omniauth/strategies/vimeo.rb +54 -0
  51. data/lib/omniauth/strategies/vkontakte.rb +84 -0
  52. data/lib/omniauth/strategies/xauth.rb +67 -0
  53. data/lib/omniauth/strategies/yahoo.rb +55 -0
  54. data/lib/omniauth/strategies/yammer.rb +43 -0
  55. data/lib/omniauth/strategies/you_tube.rb +73 -0
  56. data/lib/omniauth/version.rb +19 -0
  57. data/oa-oauth.gemspec +33 -0
  58. data/spec/fixtures/basecamp_200.xml +24 -0
  59. data/spec/fixtures/campfire_200.json +10 -0
  60. data/spec/omniauth/strategies/bitly_spec.rb +5 -0
  61. data/spec/omniauth/strategies/dailymile_spec.rb +5 -0
  62. data/spec/omniauth/strategies/doit_spec.rb +5 -0
  63. data/spec/omniauth/strategies/dopplr_spec.rb +5 -0
  64. data/spec/omniauth/strategies/douban_spec.rb +5 -0
  65. data/spec/omniauth/strategies/evernote_spec.rb +5 -0
  66. data/spec/omniauth/strategies/facebook_spec.rb +5 -0
  67. data/spec/omniauth/strategies/foursquare_spec.rb +18 -0
  68. data/spec/omniauth/strategies/github_spec.rb +5 -0
  69. data/spec/omniauth/strategies/goodreads_spec.rb +6 -0
  70. data/spec/omniauth/strategies/google_spec.rb +5 -0
  71. data/spec/omniauth/strategies/gowalla_spec.rb +5 -0
  72. data/spec/omniauth/strategies/hyves_spec.rb +5 -0
  73. data/spec/omniauth/strategies/identica_spec.rb +5 -0
  74. data/spec/omniauth/strategies/linked_in_spec.rb +5 -0
  75. data/spec/omniauth/strategies/meetup_spec.rb +14 -0
  76. data/spec/omniauth/strategies/miso_spec.rb +5 -0
  77. data/spec/omniauth/strategies/netflix_spec.rb +5 -0
  78. data/spec/omniauth/strategies/oauth2_spec.rb +0 -0
  79. data/spec/omniauth/strategies/oauth_spec.rb +77 -0
  80. data/spec/omniauth/strategies/rdio_spec.rb +5 -0
  81. data/spec/omniauth/strategies/salesforce_spec.rb +5 -0
  82. data/spec/omniauth/strategies/smug_mug_spec.rb +5 -0
  83. data/spec/omniauth/strategies/sound_cloud_spec.rb +5 -0
  84. data/spec/omniauth/strategies/t163_spec.rb +5 -0
  85. data/spec/omniauth/strategies/teambox_spec.rb +5 -0
  86. data/spec/omniauth/strategies/thirty_seven_signals_spec.rb +5 -0
  87. data/spec/omniauth/strategies/trade_me_spec.rb +5 -0
  88. data/spec/omniauth/strategies/trip_it_spec.rb +5 -0
  89. data/spec/omniauth/strategies/tsina_spec.rb +5 -0
  90. data/spec/omniauth/strategies/tumblr_spec.rb +5 -0
  91. data/spec/omniauth/strategies/twitter_spec.rb +20 -0
  92. data/spec/omniauth/strategies/type_pad_spec.rb +5 -0
  93. data/spec/omniauth/strategies/vimeo_spec.rb +5 -0
  94. data/spec/omniauth/strategies/vkontakte_spec.rb +5 -0
  95. data/spec/omniauth/strategies/yahoo_spec.rb +5 -0
  96. data/spec/omniauth/strategies/yammer_spec.rb +5 -0
  97. data/spec/omniauth/strategies/you_tube_spec.rb +5 -0
  98. data/spec/spec_helper.rb +27 -0
  99. data/spec/support/shared_examples.rb +29 -0
  100. metadata +231 -127
  101. data/CHANGELOG.rdoc +0 -5
@@ -0,0 +1,73 @@
1
+ # Based heavily on the Google strategy, monkeypatch and all
2
+
3
+ require 'omniauth/oauth'
4
+ require 'multi_json'
5
+
6
+ module OmniAuth
7
+ module Strategies
8
+ #
9
+ # Authenticate to YouTube via OAuth and retrieve basic user info.
10
+ #
11
+ # Usage:
12
+ #
13
+ # use OmniAuth::Strategies::YouTube, 'consumerkey', 'consumersecret'
14
+ #
15
+ class YouTube < OmniAuth::Strategies::OAuth
16
+ def initialize(app, consumer_key = nil, consumer_secret = nil, options = {}, &block)
17
+ client_options = {
18
+ :site => 'https://www.google.com',
19
+ :request_token_path => '/accounts/OAuthGetRequestToken',
20
+ :access_token_path => '/accounts/OAuthGetAccessToken',
21
+ :authorize_path => '/accounts/OAuthAuthorizeToken'
22
+ }
23
+
24
+ super(app, :you_tube, consumer_key, consumer_secret, client_options, options)
25
+ end
26
+
27
+ def auth_hash
28
+ ui = user_info
29
+ OmniAuth::Utils.deep_merge(super, {
30
+ 'uid' => ui['uid'],
31
+ 'user_info' => ui,
32
+ 'extra' => {'user_hash' => user_hash}
33
+ })
34
+ end
35
+
36
+ def user_info
37
+ entry = user_hash['entry']
38
+ {
39
+ 'uid' => entry['id']['$t'],
40
+ 'nickname' => entry['author'].first['name']['$t'],
41
+ 'first_name' => entry['yt$firstName'] && entry['yt$firstName']['$t'],
42
+ 'last_name' => entry['yt$lastName'] && entry['yt$lastName']['$t'],
43
+ 'image' => entry['media$thumbnail'] && entry['media$thumbnail']['url'],
44
+ 'description' => entry['yt$description'] && entry['yt$description']['$t'],
45
+ 'location' => entry['yt$location'] && entry['yt$location']['$t']
46
+ }
47
+ end
48
+
49
+ def user_hash
50
+ # YouTube treats 'default' as the currently logged-in user
51
+ # via http://apiblog.youtube.com/2010/11/update-to-clientlogin-url.html
52
+ @user_hash ||= MultiJson.decode(@access_token.get("http://gdata.youtube.com/feeds/api/users/default?alt=json").body)
53
+ end
54
+
55
+ # Monkeypatch consumer.get_request_token but specify YouTube scope rather than Google Contacts
56
+ # TODO this is an easy patch to the underlying OAuth strategy a la OAuth2
57
+ def request_phase
58
+ request_token = consumer.get_request_token({:oauth_callback => callback_url}, {:scope => 'http://gdata.youtube.com'})
59
+ session['oauth'] ||= {}
60
+ session['oauth'][name.to_s] = {'callback_confirmed' => request_token.callback_confirmed?, 'request_token' => request_token.token, 'request_secret' => request_token.secret}
61
+ r = Rack::Response.new
62
+
63
+ if request_token.callback_confirmed?
64
+ r.redirect(request_token.authorize_url)
65
+ else
66
+ r.redirect(request_token.authorize_url(:oauth_callback => callback_url))
67
+ end
68
+
69
+ r.finish
70
+ end
71
+ end
72
+ end
73
+ end
@@ -0,0 +1,19 @@
1
+ module OmniAuth
2
+ module Version
3
+ unless defined?(::OmniAuth::Version::MAJOR)
4
+ MAJOR = 0
5
+ end
6
+ unless defined?(::OmniAuth::Version::MINOR)
7
+ MINOR = 2
8
+ end
9
+ unless defined?(::OmniAuth::Version::PATCH)
10
+ PATCH = 5
11
+ end
12
+ unless defined?(::OmniAuth::Version::PRE)
13
+ PRE = nil
14
+ end
15
+ unless defined?(::OmniAuth::Version::STRING)
16
+ STRING = [MAJOR, MINOR, PATCH, PRE].compact.join('.')
17
+ end
18
+ end
19
+ end
data/oa-oauth.gemspec ADDED
@@ -0,0 +1,33 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require File.expand_path('../lib/omniauth/version', __FILE__)
3
+
4
+ Gem::Specification.new do |gem|
5
+ gem.add_runtime_dependency 'faraday', '~> 0.6.1'
6
+ gem.add_runtime_dependency 'jruby-openssl', '~> 0.7.3' if RUBY_PLATFORM == 'java'
7
+ gem.add_runtime_dependency 'multi_json', '~> 1.0.0'
8
+ gem.add_runtime_dependency 'multi_xml', '~> 0.2.2'
9
+ gem.add_runtime_dependency 'oa-core', OmniAuth::Version::STRING
10
+ gem.add_runtime_dependency 'oauth', '~> 0.4.0'
11
+ gem.add_runtime_dependency 'oauth2', '~> 0.4.1'
12
+ gem.add_development_dependency 'evernote', '~> 0.9'
13
+ gem.add_development_dependency 'maruku', '~> 0.6'
14
+ gem.add_development_dependency 'rack-test', '~> 0.5'
15
+ gem.add_development_dependency 'rake', '~> 0.8'
16
+ gem.add_development_dependency 'rspec', '~> 2.5'
17
+ gem.add_development_dependency 'simplecov', '~> 0.4'
18
+ gem.add_development_dependency 'webmock', '~> 1.6'
19
+ gem.add_development_dependency 'yard', '~> 0.6'
20
+ gem.add_development_dependency 'ZenTest', '~> 4.5'
21
+ gem.name = 'oa-oauth'
22
+ gem.version = OmniAuth::Version::STRING
23
+ gem.description = %q{OAuth strategies for OmniAuth.}
24
+ gem.summary = gem.description
25
+ gem.email = ['michael@intridea.com', 'sferik@gmail.com']
26
+ gem.homepage = 'http://github.com/intridea/omniauth'
27
+ gem.authors = ['Michael Bleigh', 'Erik Michaels-Ober']
28
+ gem.executables = `git ls-files -- bin/*`.split("\n").map{|f| File.basename(f)}
29
+ gem.files = `git ls-files`.split("\n")
30
+ gem.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
31
+ gem.require_paths = ['lib']
32
+ gem.required_rubygems_version = Gem::Requirement.new('>= 1.3.6') if gem.respond_to? :required_rubygems_version=
33
+ end
@@ -0,0 +1,24 @@
1
+ <person>
2
+ <client-id type="integer">0</client-id>
3
+ <created-at type="datetime">2008-08-14T00:00:00Z</created-at>
4
+ <id type="integer">1827370</id>
5
+ <im-handle/>
6
+ <im-service>AOL</im-service>
7
+ <phone-number-fax/>
8
+ <phone-number-home/>
9
+ <phone-number-mobile/>
10
+ <phone-number-office/>
11
+ <phone-number-office-ext/>
12
+ <title/>
13
+ <token>5fc2ab4f6c2f9cdf12ed01b88e7554f8ad21bbfb</token>
14
+ <updated-at type="datetime">2010-05-24T11:59:34Z</updated-at>
15
+ <uuid>b11312ca-227d-36fd-e3b5-af2f419-a650</uuid>
16
+ <first-name>Sally</first-name>
17
+ <last-name>Fried</last-name>
18
+ <company-id type="integer">1042368</company-id>
19
+ <user-name/>
20
+ <email-address>sfried@example.org</email-address>
21
+ <avatar-url>
22
+ http://asset3.37img.com/75521bbf128b89b7ec2ab5fe98ad21b4f6ad21e/avatar.png?r=3
23
+ </avatar-url>
24
+ </person>
@@ -0,0 +1,10 @@
1
+ {
2
+ "user": {
3
+ "id": 92718,
4
+ "name": "Kenneth Szell",
5
+ "email_address": "kens@example.org",
6
+ "admin": true,
7
+ "created_at": "2009-07-20T09:21:34Z",
8
+ "type": "Member"
9
+ }
10
+ }
@@ -0,0 +1,5 @@
1
+ require File.expand_path('../../../spec_helper', __FILE__)
2
+
3
+ describe OmniAuth::Strategies::Bitly do
4
+ it_should_behave_like "an oauth2 strategy"
5
+ end
@@ -0,0 +1,5 @@
1
+ require File.expand_path('../../../spec_helper', __FILE__)
2
+
3
+ describe OmniAuth::Strategies::Dailymile do
4
+ it_should_behave_like "an oauth2 strategy"
5
+ end
@@ -0,0 +1,5 @@
1
+ require File.expand_path('../../../spec_helper', __FILE__)
2
+
3
+ describe OmniAuth::Strategies::Doit do
4
+ it_should_behave_like "an oauth2 strategy"
5
+ end
@@ -0,0 +1,5 @@
1
+ require File.expand_path('../../../spec_helper', __FILE__)
2
+
3
+ describe OmniAuth::Strategies::Dopplr do
4
+ it_should_behave_like "an oauth strategy"
5
+ end
@@ -0,0 +1,5 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
2
+
3
+ describe OmniAuth::Strategies::Douban do
4
+ it_should_behave_like 'an oauth strategy'
5
+ end
@@ -0,0 +1,5 @@
1
+ require File.expand_path('../../../spec_helper', __FILE__)
2
+
3
+ describe OmniAuth::Strategies::Evernote do
4
+ it_should_behave_like "an oauth strategy"
5
+ end
@@ -0,0 +1,5 @@
1
+ require File.expand_path('../../../spec_helper', __FILE__)
2
+
3
+ describe OmniAuth::Strategies::Facebook do
4
+ it_should_behave_like "an oauth2 strategy"
5
+ end
@@ -0,0 +1,18 @@
1
+ require File.expand_path('../../../spec_helper', __FILE__)
2
+
3
+ describe OmniAuth::Strategies::Foursquare do
4
+ it_should_behave_like "an oauth2 strategy"
5
+ subject{ OmniAuth::Strategies::Foursquare.new(lambda{|env|[200,{},[""]]} , 'abc', 'def')}
6
+
7
+ it 'should use the mobile authorize url when :mobile is true' do
8
+ subject.authorize_url(:mobile => true).should be_include("/mobile/")
9
+ end
10
+
11
+ it 'should use the authorize endpoint if :sign_in is false' do
12
+ subject.authorize_url(:sign_in => false).should be_include("/authorize")
13
+ end
14
+
15
+ it 'should default to the authenticate endpoint' do
16
+ subject.client.authorize_url.should be_include('/authenticate')
17
+ end
18
+ end
@@ -0,0 +1,5 @@
1
+ require File.expand_path('../../../spec_helper', __FILE__)
2
+
3
+ describe OmniAuth::Strategies::GitHub do
4
+ it_should_behave_like "an oauth2 strategy"
5
+ end
@@ -0,0 +1,6 @@
1
+ require File.expand_path('../../../spec_helper', __FILE__)
2
+
3
+ describe OmniAuth::Strategies::Goodreads do
4
+ it_should_behave_like 'an oauth strategy'
5
+ end
6
+
@@ -0,0 +1,5 @@
1
+ require File.expand_path('../../../spec_helper', __FILE__)
2
+
3
+ describe OmniAuth::Strategies::Google do
4
+ it_should_behave_like 'an oauth strategy'
5
+ end
@@ -0,0 +1,5 @@
1
+ require File.expand_path('../../../spec_helper', __FILE__)
2
+
3
+ describe OmniAuth::Strategies::Gowalla do
4
+ it_should_behave_like "an oauth2 strategy"
5
+ end
@@ -0,0 +1,5 @@
1
+ require File.expand_path('../../../spec_helper', __FILE__)
2
+
3
+ describe OmniAuth::Strategies::Hyves do
4
+ it_should_behave_like "an oauth strategy"
5
+ end
@@ -0,0 +1,5 @@
1
+ require File.expand_path('../../../spec_helper', __FILE__)
2
+
3
+ describe OmniAuth::Strategies::Identica do
4
+ it_should_behave_like 'an oauth strategy'
5
+ end
@@ -0,0 +1,5 @@
1
+ require File.expand_path('../../../spec_helper', __FILE__)
2
+
3
+ describe OmniAuth::Strategies::LinkedIn do
4
+ it_should_behave_like "an oauth strategy"
5
+ end
@@ -0,0 +1,14 @@
1
+ require File.expand_path('../../../spec_helper', __FILE__)
2
+
3
+ describe OmniAuth::Strategies::Meetup do
4
+ it_should_behave_like 'an oauth strategy'
5
+ it 'should use the authenticate (sign in) path by default' do
6
+ s = strategy_class.new(app, 'abc', 'def')
7
+ s.consumer.options[:authorize_path].should == 'http://www.meetup.com/authenticate'
8
+ end
9
+
10
+ it 'should use the authorize path if :sign_in is false' do
11
+ s = strategy_class.new(app, 'abc', 'def', :sign_in => false)
12
+ s.consumer.options[:authorize_path].should == 'http://www.meetup.com/authorize'
13
+ end
14
+ end
@@ -0,0 +1,5 @@
1
+ require File.expand_path('../../../spec_helper', __FILE__)
2
+
3
+ describe OmniAuth::Strategies::Miso do
4
+ it_should_behave_like 'an oauth strategy'
5
+ end
@@ -0,0 +1,5 @@
1
+ require File.expand_path('../../../spec_helper', __FILE__)
2
+
3
+ describe OmniAuth::Strategies::Netflix do
4
+ it_should_behave_like "an oauth strategy"
5
+ end
File without changes
@@ -0,0 +1,77 @@
1
+ require File.expand_path('../../../spec_helper', __FILE__)
2
+
3
+ describe "OmniAuth::Strategies::OAuth" do
4
+
5
+ def app
6
+ Rack::Builder.new {
7
+ use OmniAuth::Test::PhonySession
8
+ use OmniAuth::Builder do
9
+ provider :oauth, 'example.org', 'abc', 'def', :site => 'https://api.example.org'
10
+ provider :oauth, 'example.org_with_authorize_params', 'abc', 'def', { :site => 'https://api.example.org' }, :authorize_params => {:abc => 'def'}
11
+ end
12
+ run lambda { |env| [404, {'Content-Type' => 'text/plain'}, [env.key?('omniauth.auth').to_s]] }
13
+ }.to_app
14
+ end
15
+
16
+ def session
17
+ last_request.env['rack.session']
18
+ end
19
+
20
+ before do
21
+ stub_request(:post, 'https://api.example.org/oauth/request_token').
22
+ to_return(:body => "oauth_token=yourtoken&oauth_token_secret=yoursecret&oauth_callback_confirmed=true")
23
+ end
24
+
25
+ describe '/auth/{name}' do
26
+ before do
27
+ get '/auth/example.org'
28
+ end
29
+ it 'should redirect to authorize_url' do
30
+ last_response.should be_redirect
31
+ last_response.headers['Location'].should == 'https://api.example.org/oauth/authorize?oauth_token=yourtoken'
32
+ end
33
+
34
+ it 'should redirect to authorize_url with authorize_params when set' do
35
+ get '/auth/example.org_with_authorize_params'
36
+ last_response.should be_redirect
37
+ [
38
+ 'https://api.example.org/oauth/authorize?abc=def&oauth_token=yourtoken',
39
+ 'https://api.example.org/oauth/authorize?oauth_token=yourtoken&abc=def'
40
+ ].should be_include(last_response.headers['Location'])
41
+ end
42
+
43
+ it 'should set appropriate session variables' do
44
+ session['oauth'].should == {"example.org" => {'callback_confirmed' => true, 'request_token' => 'yourtoken', 'request_secret' => 'yoursecret'}}
45
+ end
46
+ end
47
+
48
+ describe '/auth/{name}/callback' do
49
+ before do
50
+ stub_request(:post, 'https://api.example.org/oauth/access_token').
51
+ to_return(:body => "oauth_token=yourtoken&oauth_token_secret=yoursecret")
52
+ get '/auth/example.org/callback', {:oauth_verifier => 'dudeman'}, {'rack.session' => {'oauth' => {"example.org" => {'callback_confirmed' => true, 'request_token' => 'yourtoken', 'request_secret' => 'yoursecret'}}}}
53
+ end
54
+
55
+ it 'should exchange the request token for an access token' do
56
+ last_request.env['omniauth.auth']['provider'].should == 'example.org'
57
+ last_request.env['omniauth.auth']['extra']['access_token'].should be_kind_of(OAuth::AccessToken)
58
+ end
59
+
60
+ it 'should call through to the master app' do
61
+ last_response.body.should == 'true'
62
+ end
63
+
64
+ context "bad gateway (or any 5xx) for access_token" do
65
+ before do
66
+ stub_request(:post, 'https://api.example.org/oauth/access_token').
67
+ to_raise(::Net::HTTPFatalError.new(%Q{502 "Bad Gateway"}, nil))
68
+ get '/auth/example.org/callback', {:oauth_verifier => 'dudeman'}, {'rack.session' => {'oauth' => {"example.org" => {'callback_confirmed' => true, 'request_token' => 'yourtoken', 'request_secret' => 'yoursecret'}}}}
69
+ end
70
+
71
+ it 'should call fail! with :service_unavailable' do
72
+ last_request.env['omniauth.error'].should be_kind_of(::Net::HTTPFatalError)
73
+ last_request.env['omniauth.error.type'] = :service_unavailable
74
+ end
75
+ end
76
+ end
77
+ end
@@ -0,0 +1,5 @@
1
+ require File.expand_path('../../../spec_helper', __FILE__)
2
+
3
+ describe OmniAuth::Strategies::Rdio do
4
+ it_should_behave_like "an oauth strategy"
5
+ end
@@ -0,0 +1,5 @@
1
+ require File.expand_path('../../../spec_helper', __FILE__)
2
+
3
+ describe OmniAuth::Strategies::Salesforce do
4
+ it_should_behave_like 'an oauth2 strategy'
5
+ end
@@ -0,0 +1,5 @@
1
+ require File.expand_path('../../../spec_helper', __FILE__)
2
+
3
+ describe OmniAuth::Strategies::SmugMug do
4
+ it_should_behave_like 'an oauth strategy'
5
+ end
@@ -0,0 +1,5 @@
1
+ require File.expand_path('../../../spec_helper', __FILE__)
2
+
3
+ describe OmniAuth::Strategies::SoundCloud do
4
+ it_should_behave_like 'an oauth strategy'
5
+ end
@@ -0,0 +1,5 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
2
+
3
+ describe OmniAuth::Strategies::T163 do
4
+ it_should_behave_like "an oauth strategy"
5
+ end
@@ -0,0 +1,5 @@
1
+ require File.expand_path('../../../spec_helper', __FILE__)
2
+
3
+ describe OmniAuth::Strategies::Teambox do
4
+ it_should_behave_like "an oauth2 strategy"
5
+ end