rspotify 0.8.0 → 0.9.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 64b0804e1886e1ffa8bb5d5df377e8d25ddfeb50
4
- data.tar.gz: 462a1211c106279de90490fa58ef1c7340122019
3
+ metadata.gz: 4b8f239c93e7f8445a6ab7963b82551dae8d2fa5
4
+ data.tar.gz: 0201d9d38995ffcd8b7d218402e5ef047898b890
5
5
  SHA512:
6
- metadata.gz: b1d02142eacd40743e3681e7b87858f4390738e12a2fc3383f48dcf977ca705f985ac101195de3411f6627a609f308b523e787b54e9010910fadd09e9ad9526c
7
- data.tar.gz: 4819abd8af5a198e89c4fce6f781d33c2051b25817f8f2122d50976e31b1d44017ef026dd9099bf574d4dbea331a69bd448174e8304569ee30e8459ce8196883
6
+ metadata.gz: 318e529c2896ad7563d85c64b74833df356d2987a78fabb1f207f9ba7eb8ecd8f2a94d78797f1eb316c46964a48c110d7a35723c4db8a633e90c0fd29133f3b7
7
+ data.tar.gz: 0433cdf3d380e6d945ba3b3ee7357111a127b2d2d1f2d043f9f498e9ca14646f065116994e6823491b1c5cdcd7e3738418615c8668f240714155af45c165ed8c
data/README.md CHANGED
@@ -145,14 +145,25 @@ class UsersController < ApplicationController
145
145
  spotify_user = RSpotify::User.new(request.env['omniauth.auth'])
146
146
  # Now you can create playlists for the user and much more!
147
147
 
148
- spotify_user.create_playlist!('my-awesome-playlist')
149
- # Directly creates playlist in user's Spotify account
148
+ playlist = spotify_user.create_playlist!('my-awesome-playlist')
149
+ # Directly creates playlist in user's Spotify account and returns it
150
+
151
+ tracks = RSpotify::Track.search('Know')
152
+
153
+ playlist.add_tracks!(tracks)
154
+ # user's Spotify account now has a playlist with songs containing "Know" in the name
155
+
156
+ playlist.tracks.first.name #=> "Somebody That I Used To Know"
150
157
  end
151
158
  end
152
159
  ```
153
160
 
154
161
  **Note**: You might also like to add `RSpotify::authenticate("<your_client_id>", "<your_client_secret>")` to your `config/application.rb`. This will allow extra calls to be made.
155
162
 
163
+ ## Notes
164
+
165
+ If you'd like to use OAuth outside rails, have a look [here](https://developer.spotify.com/web-api/authorization-guide/#authorization_code_flow) for the requests that need to be made. You should be able to pass the response to RSpotify::User.new just as well, and from there easily create playlists and more for your user.
166
+
156
167
  ## Contributing
157
168
 
158
169
  1. Fork it ( https://github.com/guilhermesad/rspotify/fork )
@@ -7,7 +7,7 @@ module RSpotify
7
7
  API_URI = 'https://api.spotify.com/v1/'
8
8
  AUTHORIZE_URI = 'https://accounts.spotify.com/authorize'
9
9
  TOKEN_URI = 'https://accounts.spotify.com/api/token'
10
- VERBS = %w(get post put delete)
10
+ VERBS = %w(get post)
11
11
 
12
12
  autoload :Album, 'rspotify/album'
13
13
  autoload :Artist, 'rspotify/artist'
@@ -21,7 +21,7 @@ module RSpotify
21
21
  authorization = Base64.strict_encode64 "#{client_id}:#{client_secret}"
22
22
  headers = { 'Authorization' => "Basic #{authorization}" }
23
23
  response = RestClient.post(TOKEN_URI, request_body, headers)
24
- @access_token = JSON.parse(response)['access_token']
24
+ @client_token = JSON.parse(response)['access_token']
25
25
  true
26
26
  end
27
27
 
@@ -29,11 +29,11 @@ module RSpotify
29
29
  define_singleton_method verb do |path, *params|
30
30
  url = API_URI + path
31
31
  response = RestClient.send(verb, url, *params)
32
- JSON.parse response
32
+ JSON.parse response unless response.empty?
33
33
  end
34
34
 
35
35
  define_singleton_method "auth_#{verb}" do |path, *params|
36
- auth_header = { 'Authorization' => "Bearer #{@access_token}" }
36
+ auth_header = { 'Authorization' => "Bearer #{@client_token}" }
37
37
  params << auth_header
38
38
  send(verb, path, *params)
39
39
  end
@@ -50,6 +50,21 @@ module RSpotify
50
50
  super(options)
51
51
  end
52
52
 
53
+ #TODO doc
54
+ def add_tracks!(tracks, position: nil)
55
+ if tracks.size > 100
56
+ warn 'Too many tracks requested. Maximum: 100'
57
+ return false
58
+ end
59
+
60
+ track_uris = tracks.map(&:uri).join(',')
61
+ url = "users/#{@owner.id}/playlists/#{@id}/tracks?uris=#{track_uris}"
62
+ url << "&position=#{position}" if position
63
+
64
+ RSpotify.post(url, {}, User.send(:oauth_headers, @owner.id))
65
+ @tracks = nil
66
+ end
67
+
53
68
  # When an object is obtained undirectly, Spotify usually returns a simplified version of it.
54
69
  # This method updates it into a full object, with all attributes filled.
55
70
  #
@@ -61,7 +76,15 @@ module RSpotify
61
76
  # playlist.complete!
62
77
  # playlist.instance_variable_get("@description") #=> "Iconic soundtracks..."
63
78
  def complete!
64
- initialize RSpotify.auth_get("users/#{@owner.id}/playlists/#{@id}")
79
+ url = "users/#{@owner.id}/playlists/#{@id}"
80
+ credentials_defined = User.class_variable_defined?('@@users_credentials')
81
+ credentials = (credentials_defined ? User.class_variable_get('@@users_credentials') : nil)
82
+
83
+ if credentials && credentials[@owner.id]
84
+ initialize RSpotify.get(url, User.send(:oauth_headers, @owner.id))
85
+ else
86
+ initialize RSpotify.auth_get(url)
87
+ end
65
88
  end
66
89
  end
67
90
  end
@@ -21,9 +21,17 @@ module RSpotify
21
21
  false
22
22
  end
23
23
 
24
+ def self.oauth_headers(user_id)
25
+ {
26
+ 'Authorization' => "Bearer #{@@users_credentials[user_id]['token']}",
27
+ 'Content-Type' => 'application/json'
28
+ }
29
+ end
30
+ private_class_method :oauth_headers
31
+
24
32
  def initialize(options = {})
25
- @credentials ||= options['credentials']
26
- options = options['info'] if options['info']
33
+ credentials = options['credentials']
34
+ options = options['info'] if options['info']
27
35
 
28
36
  @country ||= options['country']
29
37
  @display_name ||= options['display_name']
@@ -32,16 +40,18 @@ module RSpotify
32
40
  @product ||= options['product']
33
41
 
34
42
  super(options)
43
+
44
+ if credentials
45
+ @@users_credentials ||= {}
46
+ @@users_credentials[@id] = credentials
47
+ end
35
48
  end
36
49
 
50
+ #TODO doc
37
51
  def create_playlist!(name, public: true)
38
- headers = {
39
- 'Authorization' => "Bearer #{@credentials['token']}",
40
- 'Content-Type' => 'application/json'
41
- }
52
+ url = "users/#{@id}/playlists"
42
53
  request_data = %Q({"name":"#{name}", "public":#{public}})
43
-
44
- RSpotify.post("users/#{@id}/playlists", request_data, headers)
54
+ Playlist.new RSpotify.post(url, request_data, User.send(:oauth_headers, @id))
45
55
  end
46
56
 
47
57
  # Returns all playlists from user
@@ -1,3 +1,3 @@
1
1
  module RSpotify
2
- VERSION = '0.8.0'
2
+ VERSION = '0.9.0'
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rspotify
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.0
4
+ version: 0.9.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Guilherme Sad