omniauth-soundcloud 1.0.0 → 1.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.
data/README.md CHANGED
@@ -22,6 +22,50 @@ Then `bundle install`.
22
22
 
23
23
  Supports the Server-side Flow as described in the the [SoundCloud docs](http://developers.soundcloud.com/docs/api/authentication#authorization-code-flow).
24
24
 
25
+ ## Auth Hash
26
+
27
+ Here's an example *Auth Hash* available in `request.env['omniauth.auth']`:
28
+ ```ruby
29
+ {
30
+ "provider" => "soundcloud",
31
+ "uid" => 12345678,
32
+ "info" => {
33
+ "name" => "Soundcloud User",
34
+ "nickname" => "soundclouder",
35
+ "image" => "https://the.image.url",
36
+ "location" => "Soundcloud Town"
37
+ },
38
+ "credentials" => {
39
+ "token" => "123-321",
40
+ "expires" => false
41
+ },
42
+ "extra" => {
43
+ "raw_info" => {
44
+ "id" => 12345678,
45
+ "kind" => "user",
46
+ "permalink" => "soundclouder",
47
+ "username" => "soundclouder",
48
+ "full_name" => "Soundcloud User",
49
+ "uri" => "https://api.soundcloud.com/users/12345678",
50
+ "permalink_url" => "http://soundcloud.com/soundclouder",
51
+ "avatar_url" => "https://the.image.url",
52
+ "country" => "United States",
53
+ "city" => "Soundcloud Town",
54
+ "online" => true,
55
+ "track_count" => 23,
56
+ "playlist_count" => 12,
57
+ "public_favorites_count" => 123,
58
+ "followers_count" => 321,
59
+ "followings_count" => 234,
60
+ "plan" => "Free",
61
+ "private_tracks_count" => 0,
62
+ "private_playlists_count" => 0,
63
+ "primary_email_confirmed" => true
64
+ }
65
+ }
66
+ }
67
+ ```
68
+
25
69
  ## License
26
70
 
27
71
  Copyright (c) 2011 by Lee Martin and SoundCloud
@@ -1,5 +1,5 @@
1
1
  module OmniAuth
2
2
  module SoundCloud
3
- VERSION = "1.0.0"
3
+ VERSION = "1.0.1"
4
4
  end
5
5
  end
@@ -4,22 +4,22 @@ module OmniAuth
4
4
  module Strategies
5
5
  class SoundCloud < OmniAuth::Strategies::OAuth2
6
6
  DEFAULT_SCOPE = 'non-expiring'
7
-
7
+
8
8
  option :name, "soundcloud"
9
-
9
+
10
10
  option :client_options, {
11
11
  :site => 'https://api.soundcloud.com',
12
12
  :authorize_url => '/connect',
13
13
  :token_url => '/oauth2/token'
14
14
  }
15
-
15
+
16
16
  option :access_token_options, {
17
17
  :header_format => 'OAuth %s',
18
18
  :param_name => 'access_token'
19
19
  }
20
-
20
+
21
21
  uid { raw_info['id'] }
22
-
22
+
23
23
  info do
24
24
  prune!({
25
25
  'nickname' => raw_info['username'],
@@ -32,24 +32,24 @@ module OmniAuth
32
32
  'location' => raw_info['city']
33
33
  })
34
34
  end
35
-
35
+
36
36
  credentials do
37
37
  prune!({
38
38
  'expires' => access_token.expires?,
39
39
  'expires_at' => access_token.expires_at
40
40
  })
41
41
  end
42
-
42
+
43
43
  extra do
44
44
  prune!({
45
45
  'raw_info' => raw_info
46
46
  })
47
47
  end
48
-
48
+
49
49
  def raw_info
50
50
  @raw_info ||= access_token.get('/me.json').parsed
51
51
  end
52
-
52
+
53
53
  def build_access_token
54
54
  super.tap do |token|
55
55
  token.options.merge!(access_token_options)
@@ -62,19 +62,19 @@ module OmniAuth
62
62
 
63
63
  def authorize_params
64
64
  super.tap do |params|
65
- # params.merge!(:display => request.params['display']) if request.params['display']
65
+ %w[display state scope].each { |v| params[v.to_sym] = request.params[v] if request.params[v] }
66
66
  params[:scope] ||= DEFAULT_SCOPE
67
67
  end
68
68
  end
69
-
69
+
70
70
  private
71
-
71
+
72
72
  def prune!(hash)
73
- hash.delete_if do |_, value|
73
+ hash.delete_if do |_, value|
74
74
  prune!(value) if value.is_a?(Hash)
75
75
  value.nil? || (value.respond_to?(:empty?) && value.empty?)
76
76
  end
77
- end
77
+ end
78
78
  end
79
79
  end
80
80
  end
@@ -15,7 +15,7 @@ Gem::Specification.new do |s|
15
15
  s.executables = `git ls-files -- bin/*`.split("\n").map { |f| File.basename(f) }
16
16
  s.require_paths = ['lib']
17
17
 
18
- s.add_runtime_dependency 'omniauth-oauth2', '~> 1.0.0'
18
+ s.add_runtime_dependency 'omniauth-oauth2', '~> 1.1.0'
19
19
 
20
20
  s.add_development_dependency 'rspec', '~> 2.7.0'
21
21
  s.add_development_dependency 'rake'
@@ -2,8 +2,17 @@ require 'spec_helper'
2
2
  require 'omniauth-soundcloud'
3
3
 
4
4
  describe OmniAuth::Strategies::SoundCloud do
5
+ let(:request) do
6
+ double('request',
7
+ :params => {},
8
+ :cookies => {},
9
+ :env => {})
10
+ end
11
+
5
12
  subject do
6
- OmniAuth::Strategies::SoundCloud.new(nil, @options || {})
13
+ OmniAuth::Strategies::SoundCloud.new(nil, @options || {}).tap do |strategy|
14
+ strategy.stub(:request => request)
15
+ end
7
16
  end
8
17
 
9
18
  it_should_behave_like 'an oauth2 strategy'
@@ -27,4 +36,24 @@ describe OmniAuth::Strategies::SoundCloud do
27
36
  subject.callback_path.should eq('/auth/soundcloud/callback')
28
37
  end
29
38
  end
39
+
40
+ describe '#authorize_params' do
41
+ it 'includes display parameter from request when present' do
42
+ request.stub(:params) { { 'display' => 'touch' } }
43
+ subject.authorize_params.should be_a(Hash)
44
+ subject.authorize_params[:display].should eq('touch')
45
+ end
46
+
47
+ it 'includes state parameter from request when present' do
48
+ request.stub(:params) { { 'state' => 'some_state' } }
49
+ subject.authorize_params.should be_a(Hash)
50
+ subject.authorize_params[:state].should eq('some_state')
51
+ end
52
+
53
+ it 'overrides default scope with parameter passed from request' do
54
+ request.stub(:params) { { 'scope' => 'email' } }
55
+ subject.authorize_params.should be_a(Hash)
56
+ subject.authorize_params[:scope].should eq('email')
57
+ end
58
+ end
30
59
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: omniauth-soundcloud
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.0.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,22 +9,27 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2011-11-28 00:00:00.000000000Z
12
+ date: 2012-11-02 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: omniauth-oauth2
16
- requirement: &70219109416760 !ruby/object:Gem::Requirement
16
+ requirement: !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ~>
20
20
  - !ruby/object:Gem::Version
21
- version: 1.0.0
21
+ version: 1.1.0
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70219109416760
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ~>
28
+ - !ruby/object:Gem::Version
29
+ version: 1.1.0
25
30
  - !ruby/object:Gem::Dependency
26
31
  name: rspec
27
- requirement: &70219109416200 !ruby/object:Gem::Requirement
32
+ requirement: !ruby/object:Gem::Requirement
28
33
  none: false
29
34
  requirements:
30
35
  - - ~>
@@ -32,10 +37,15 @@ dependencies:
32
37
  version: 2.7.0
33
38
  type: :development
34
39
  prerelease: false
35
- version_requirements: *70219109416200
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ~>
44
+ - !ruby/object:Gem::Version
45
+ version: 2.7.0
36
46
  - !ruby/object:Gem::Dependency
37
47
  name: rake
38
- requirement: &70219109415560 !ruby/object:Gem::Requirement
48
+ requirement: !ruby/object:Gem::Requirement
39
49
  none: false
40
50
  requirements:
41
51
  - - ! '>='
@@ -43,7 +53,12 @@ dependencies:
43
53
  version: '0'
44
54
  type: :development
45
55
  prerelease: false
46
- version_requirements: *70219109415560
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
47
62
  description:
48
63
  email:
49
64
  - lee@soundcloud.com
@@ -76,21 +91,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
76
91
  - - ! '>='
77
92
  - !ruby/object:Gem::Version
78
93
  version: '0'
79
- segments:
80
- - 0
81
- hash: 1733435778679222157
82
94
  required_rubygems_version: !ruby/object:Gem::Requirement
83
95
  none: false
84
96
  requirements:
85
97
  - - ! '>='
86
98
  - !ruby/object:Gem::Version
87
99
  version: '0'
88
- segments:
89
- - 0
90
- hash: 1733435778679222157
91
100
  requirements: []
92
101
  rubyforge_project:
93
- rubygems_version: 1.8.11
102
+ rubygems_version: 1.8.24
94
103
  signing_key:
95
104
  specification_version: 3
96
105
  summary: SoundCloud strategy for OmniAuth