rspotify 1.13.0 → 1.14.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 495b361c9240bb43508644573a00414428b1901d
4
- data.tar.gz: ee523423c4773c2b2f2daa6ba3f9b2eafa8dd5e1
3
+ metadata.gz: 1082adbe732bf14bc527e73ba174a6f6ff13af16
4
+ data.tar.gz: 2d82ce44c497c38d87f1c37d21164f0d355ed3b4
5
5
  SHA512:
6
- metadata.gz: 1c1f6a424d8125963f1964333d986e21f1fcda490b168ff348993a89d4832f002d451393299bdeb2dbfbbd9a4ec07ff07d90768fe30ec24473d1fe1bc9c2a638
7
- data.tar.gz: 9765e359a882d2313989b39d0bbedb1c3ac948d67fcdea71e66faffa20151ea46fa58025b6a36d79e6d66a65db6ea9e8b9e852aa7733c4e6ce20af4acbbddde9
6
+ metadata.gz: be541f01c62b9c4185a116bcd04c52b9becde49cd5616dcd7ea02f9a9d56be7651f3bfc5bc83c88f10fba09a1e681b68cae9482bcea187f3d0bb289291a20802
7
+ data.tar.gz: 479718f76a3c2e38e319ff53087a41f4d0f4a9ff5e5b9303655a80646addaddcdde7ba54bafdf2fe154537364ca5bc1a5a2d7949a9793275ab0c948cc2cafee0
data/.editorconfig ADDED
@@ -0,0 +1,13 @@
1
+ # http://editorconfig.org
2
+ root = true
3
+
4
+ [*]
5
+ indent_style = space
6
+ indent_size = 2
7
+ end_of_line = lf
8
+ charset = utf-8
9
+ trim_trailing_whitespace = true
10
+ insert_final_newline = true
11
+
12
+ [*.md]
13
+ trim_trailing_whitespace = false
data/README.md CHANGED
@@ -121,7 +121,7 @@ new_releases = RSpotify::Album.new_releases(country: 'ES')
121
121
 
122
122
  ## Rails + OAuth
123
123
 
124
- You'll may want your application to access an user's Spotify account.
124
+ You might want your application to access a user's Spotify account.
125
125
 
126
126
  For instance, suppose you want your app to create playlists for the user based on his taste, or to add a feature that syncs user's playlists with some external app.
127
127
 
@@ -136,6 +136,8 @@ RSpotify::authenticate("<your_client_id>", "<your_client_secret>")
136
136
  ```ruby
137
137
  # config/initializers/omniauth.rb
138
138
 
139
+ require 'rspotify/oauth'
140
+
139
141
  Rails.application.config.middleware.use OmniAuth::Builder do
140
142
  provider :spotify, "<your_client_id>", "<your_client_secret>", scope: 'user-read-email playlist-modify-public user-library-read user-library-modify'
141
143
  end
data/lib/rspotify.rb CHANGED
@@ -1,5 +1,4 @@
1
1
  require 'rspotify/connection'
2
- require 'rspotify/oauth'
3
2
  require 'rspotify/version'
4
3
 
5
4
  module RSpotify
@@ -22,7 +22,7 @@ module RSpotify
22
22
  # album = RSpotify::Album.find('41vPD50kQ7JeamkxQW7Vuy')
23
23
  # album.class #=> RSpotify::Album
24
24
  # album.name #=> "AM"
25
- #
25
+ #
26
26
  # ids = %w(41vPD50kQ7JeamkxQW7Vuy 4jKGRliQXa5VwxKOsiCbfL)
27
27
  # albums = RSpotify::Album.find(ids)
28
28
  # albums.class #=> Array
@@ -44,7 +44,7 @@ module RSpotify
44
44
  def self.new_releases(limit: 20, offset: 0, country: nil)
45
45
  url = "browse/new-releases?limit=#{limit}&offset=#{offset}"
46
46
  url << "&country=#{country}" if country
47
- json = RSpotify.auth_get(url)
47
+ json = RSpotify.get(url)
48
48
  json['albums']['items'].map { |i| Album.new i }
49
49
  end
50
50
 
@@ -29,7 +29,7 @@ module RSpotify
29
29
  url << '&' unless index == options.size-1
30
30
  end
31
31
 
32
- json = RSpotify.auth_get(url)
32
+ json = RSpotify.get(url)
33
33
  Category.new json
34
34
  end
35
35
 
@@ -50,7 +50,7 @@ module RSpotify
50
50
  options.each do |option, value|
51
51
  url << "&#{option}=#{value}"
52
52
  end
53
- json = RSpotify.auth_get(url)
53
+ json = RSpotify.get(url)
54
54
  json['categories']['items'].map { |i| Category.new i }
55
55
  end
56
56
 
@@ -69,7 +69,7 @@ module RSpotify
69
69
 
70
70
  # See {Base#complete!}
71
71
  def complete!
72
- initialize RSpotify.auth_get("browse/categories/#{@id}")
72
+ initialize RSpotify.get("browse/categories/#{@id}")
73
73
  end
74
74
 
75
75
  # Get a list of Spotify playlists tagged with a particular category.
@@ -91,7 +91,7 @@ module RSpotify
91
91
  url << "&#{option}=#{value}"
92
92
  end
93
93
 
94
- json = RSpotify.auth_get(url)
94
+ json = RSpotify.get(url)
95
95
  json['playlists']['items'].map { |i| Playlist.new i }
96
96
  end
97
97
  end
@@ -31,14 +31,8 @@ module RSpotify
31
31
 
32
32
  VERBS.each do |verb|
33
33
  define_method verb do |path, *params|
34
- response = RestClient.send(verb, api_url(path), *params)
35
- JSON.parse response unless response.empty?
36
- end
37
-
38
- define_method "auth_#{verb}" do |path, *params|
39
- auth_header = { 'Authorization' => "Bearer #{@client_token}" }
40
- params << auth_header
41
- send(verb, path, *params)
34
+ params << { 'Authorization' => "Bearer #{@client_token}" } if @client_token
35
+ send_request(verb, path, *params)
42
36
  end
43
37
  end
44
38
 
@@ -50,14 +44,16 @@ module RSpotify
50
44
  if users_credentials && users_credentials[user_id]
51
45
  User.oauth_get(user_id, url)
52
46
  else
53
- auth_get(url)
47
+ get(url)
54
48
  end
55
49
  end
56
50
 
57
51
  private
58
52
 
59
- def api_url(path)
60
- path.start_with?("http") ? path : API_URI + path
53
+ def send_request(verb, path, *params)
54
+ url = path.start_with?("http") ? path : API_URI + path
55
+ response = RestClient.send(verb, url, *params)
56
+ JSON.parse response unless response.empty?
61
57
  end
62
58
 
63
59
  def auth_header
@@ -32,7 +32,7 @@ module RSpotify
32
32
  options.each do |option, value|
33
33
  url << "&#{option}=#{value}"
34
34
  end
35
- json = RSpotify.auth_get(url)
35
+ json = RSpotify.get(url)
36
36
  json['playlists']['items'].map { |i| Playlist.new i }
37
37
  end
38
38
 
@@ -127,7 +127,7 @@ module RSpotify
127
127
  # playlist.tracks[20].name #=> "Somebody That I Used To Know"
128
128
  def add_tracks!(tracks, position: nil)
129
129
  track_uris = tracks.map(&:uri).join(',')
130
- url = @href + "/tracks?uris=#{track_uris}"
130
+ url = "#{@href}/tracks?uris=#{track_uris}"
131
131
  url << "&position=#{position}" if position
132
132
 
133
133
  User.oauth_post(@owner.id, url, {})
@@ -174,6 +174,38 @@ module RSpotify
174
174
  initialize RSpotify.resolve_auth_request(@owner.id, @href)
175
175
  end
176
176
 
177
+ # Check if one or more Spotify users are following a specified playlist. Checking if the user is privately
178
+ # following a playlist is only possible if he/she has granted access to the *playlist-read-private* scope.
179
+ #
180
+ # @param users [Array<User>] The users to check. Maximum: 5.
181
+ # @return [Array<Boolean>]
182
+ #
183
+ # @example
184
+ # user1 = RSpotify::User.find('<some-id>')
185
+ # user2 = RSpotify::User.find('<some-other-id>')
186
+ # playlist.is_followed_by?([user1, user2]) #=> [true, true] (Users publicly following playlist)
187
+ #
188
+ # oauth-user = RSpotify::User.new(request.env['omniauth.auth']) # (See OAuth section in readme)
189
+ # playlist.is_followed_by?([oauth-user]) #=> [true] (User publicly or privately following playlist)
190
+ def is_followed_by?(users)
191
+ user_ids = users.map(&:id).join(',')
192
+ url = "#{@href}/followers/contains?ids=#{user_ids}"
193
+
194
+ users_credentials = if User.class_variable_defined?('@@users_credentials')
195
+ User.class_variable_get('@@users_credentials')
196
+ end
197
+
198
+ auth_users = users.select do |user|
199
+ users_credentials[user.id]
200
+ end if users_credentials
201
+
202
+ if auth_users && auth_users.any?
203
+ User.oauth_get(auth_users.first.id, url)
204
+ else
205
+ RSpotify.get(url)
206
+ end
207
+ end
208
+
177
209
  # Returns array of tracks from the playlist
178
210
  #
179
211
  # @param limit [Integer] Maximum number of tracks to return. Maximum: 100. Default: 100.
@@ -189,7 +221,7 @@ module RSpotify
189
221
  return @tracks_cache[offset..last_track]
190
222
  end
191
223
 
192
- url = @href + "/tracks?limit=#{limit}&offset=#{offset}"
224
+ url = "#{@href}/tracks?limit=#{limit}&offset=#{offset}"
193
225
  json = RSpotify.resolve_auth_request(@owner.id, url)
194
226
  tracks = json['items'].select { |i| i['track'] }
195
227
 
@@ -234,7 +266,6 @@ module RSpotify
234
266
  response = User.oauth_put(@owner.id, url, data.to_json)
235
267
  @snapshot_id = response['snapshot_id']
236
268
  @tracks_cache = nil
237
-
238
269
  self
239
270
  end
240
271
 
@@ -251,7 +282,7 @@ module RSpotify
251
282
  # playlist.tracks.map(&:name) #=> ["Somebody That I Used To Know", "Do I Wanna Know?"]
252
283
  def replace_tracks!(tracks)
253
284
  track_uris = tracks.map(&:uri).join(',')
254
- url = @href + "/tracks?uris=#{track_uris}"
285
+ url = "#{@href}/tracks?uris=#{track_uris}"
255
286
 
256
287
  User.oauth_put(@owner.id, url, {})
257
288
  @total = tracks.size
data/lib/rspotify/user.rb CHANGED
@@ -50,12 +50,12 @@ module RSpotify
50
50
  private_class_method :oauth_header
51
51
 
52
52
  def self.oauth_send(user_id, verb, path, *params)
53
- RSpotify.send(verb, path, *params)
53
+ RSpotify.send(:send_request, verb, path, *params)
54
54
  rescue RestClient::Unauthorized => e
55
55
  raise e if e.response !~ /access token expired/
56
56
  refresh_token(user_id)
57
57
  params[-1] = oauth_header(user_id)
58
- RSpotify.send(verb, path, *params)
58
+ RSpotify.send(:send_request, verb, path, *params)
59
59
  end
60
60
  private_class_method :oauth_header
61
61
 
@@ -110,7 +110,7 @@ module RSpotify
110
110
 
111
111
  # Add the current user as a follower of one or more artists, other Spotify users or a playlist. Following artists or users require the *user-follow-modify*
112
112
  # scope. Following a playlist publicly requires the *playlist-modify-public* scope; following it privately requires the *playlist-modify-private* scope.
113
- #
113
+ #
114
114
  # @note Scopes you provide for playlists determine only whether the current user can themselves follow the playlist publicly or privately (i.e. show others what they are following), not whether the playlist itself is public or private.
115
115
  #
116
116
  # @param followed [Artist, Array<Artist>, User, Array<User>, Playlist] The artists, users or playlist to follow
@@ -144,7 +144,7 @@ module RSpotify
144
144
  followed
145
145
  end
146
146
 
147
- # Check to see if the current user is following one or more artists or other Spotify users. This method
147
+ # Check if the current user is following one or more artists or other Spotify users. This method
148
148
  # is only available when the current user has granted access to the *user-follow-read* scope.
149
149
  #
150
150
  # @param followed [Artist, Array<Artist>, User, Array<User>] The users or artists to check
@@ -233,7 +233,7 @@ module RSpotify
233
233
  def saved_tracks(limit: 20, offset: 0)
234
234
  url = "me/tracks?limit=#{limit}&offset=#{offset}"
235
235
  json = User.oauth_get(@id, url)
236
-
236
+
237
237
  tracks = json['items'].select { |i| i['track'] }
238
238
  @tracks_added_at = hash_for(tracks, 'added_at') do |added_at|
239
239
  Time.parse added_at
@@ -266,7 +266,7 @@ module RSpotify
266
266
 
267
267
  # Remove the current user as a follower of one or more artists, other Spotify users or a playlist. Unfollowing artists or users require the *user-follow-modify* scope.
268
268
  # Unfollowing a publicly followed playlist requires the *playlist-modify-public* scope; unfollowing a privately followed playlist requires the *playlist-modify-private* scope.
269
- #
269
+ #
270
270
  # @note Note that the scopes you provide for playlists relate only to whether the current user is following the playlist publicly or privately (i.e. showing others what they are following), not whether the playlist itself is public or private.
271
271
  #
272
272
  # @param unfollowed [Artist, Array<Artist>, User, Array<User>, Playlist] The artists, users or playlist to unfollow
@@ -1,3 +1,3 @@
1
1
  module RSpotify
2
- VERSION = '1.13.0'
2
+ VERSION = '1.14.0'
3
3
  end
@@ -183,4 +183,31 @@ describe RSpotify::Playlist do
183
183
  expect(playlist.name).to eq 'Movie Soundtrack Masterpieces'
184
184
  end
185
185
  end
186
+
187
+ describe 'Playlist#is_followed_by?' do
188
+ let(:playlist) do
189
+ VCR.use_cassette('playlist:find:spotify:4LO89Y0ydu8li9Phq2iwKT') do
190
+ RSpotify::Playlist.find('spotify', '4LO89Y0ydu8li9Phq2iwKT')
191
+ end
192
+ end
193
+
194
+ let(:spotify) do
195
+ VCR.use_cassette('user:find:spotify') do
196
+ RSpotify::User.find('spotify')
197
+ end
198
+ end
199
+
200
+ let(:wizzler) do
201
+ VCR.use_cassette('user:find:wizzler') do
202
+ RSpotify::User.find('wizzler')
203
+ end
204
+ end
205
+
206
+ it "should say if it's followed by the specified users" do
207
+ response = VCR.use_cassette('playlist:is_followed_by') do
208
+ playlist.is_followed_by? [spotify, wizzler]
209
+ end
210
+ expect(response).to eq [true, false]
211
+ end
212
+ end
186
213
  end
@@ -27,7 +27,7 @@ http_interactions:
27
27
  server:
28
28
  - nginx
29
29
  date:
30
- - Sat, 21 Mar 2015 21:32:09 GMT
30
+ - Sun, 21 Jun 2015 01:31:19 GMT
31
31
  content-type:
32
32
  - application/json
33
33
  transfer-encoding:
@@ -73,10 +73,10 @@ http_interactions:
73
73
  body:
74
74
  encoding: ASCII-8BIT
75
75
  string: !binary |-
76
- H4sIAAAAAAAAAx3NMQ6CMBQA0Lt0dgAqHdxsJSQERDQgYWlK/VZEAVtAjPHu
77
- outb3hsJKcEY3rc1NGiFaMIE2TmueuBRa7/L9ze1EcxxB1Lbuo3o6CdFMKi4
78
- zzjNGc29M15f4ru8Hmy2jZZliNPQI6YpTvSYpCWeApk90QL9A96/OvgtIDTo
79
- WWHqKg2GV/ONiWV9vn6cn8CRAAAA
76
+ H4sIAAAAAAAAAx3Nuw6CMBQA0H/pLEmNCaluqIOQRpSHWJcG4QrF8GobbTX+
77
+ u+h6lvNGeVGAUlz3d+jQCq2PXhoNY9L0yomvXmbF2dLS0S8VpFnI1KUibcSh
78
+ M9uGJqfDU1Tl7mb9R8aIXpoN5mNL4gZTOvdNHdSjdlm499AM/QOu7QC/BXIJ
79
+ clIwg5CguJjuhYvx5wvHTQLZkQAAAA==
80
80
  http_version: '1.1'
81
- recorded_at: Sat, 21 Mar 2015 21:32:09 GMT
81
+ recorded_at: Sun, 21 Jun 2015 01:31:19 GMT
82
82
  recorded_with: VCR 2.9.3
@@ -0,0 +1,483 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: https://api.spotify.com/v1/users/spotify/playlists/4LO89Y0ydu8li9Phq2iwKT
6
+ body:
7
+ encoding: US-ASCII
8
+ string: ''
9
+ headers:
10
+ accept:
11
+ - "*/*; q=0.5, application/xml"
12
+ accept-encoding:
13
+ - gzip, deflate
14
+ authorization:
15
+ - Bearer BQAURpqTjos-SbAWyiXyLd-tzsJUWOYsZg8mR_enxDjLTVPwigdHfyIvWY8t9xC0_qm8Sj0LL1IxhJhqt6YONA
16
+ user-agent:
17
+ - Ruby
18
+ response:
19
+ status:
20
+ code: 200
21
+ message: OK
22
+ headers:
23
+ server:
24
+ - nginx
25
+ date:
26
+ - Sun, 21 Jun 2015 01:31:42 GMT
27
+ content-type:
28
+ - application/json; charset=utf-8
29
+ transfer-encoding:
30
+ - chunked
31
+ connection:
32
+ - keep-alive
33
+ keep-alive:
34
+ - timeout=600
35
+ cache-control:
36
+ - public, max-age=0
37
+ etag:
38
+ - '"AAAARj5B/KvtAOzzZ/BcT8CV0AoP1gob"'
39
+ access-control-allow-headers:
40
+ - Accept, Authorization, Origin, Content-Type
41
+ access-control-allow-origin:
42
+ - "*"
43
+ access-control-max-age:
44
+ - '604800'
45
+ access-control-allow-methods:
46
+ - GET, POST, OPTIONS, PUT, DELETE
47
+ access-control-allow-credentials:
48
+ - 'true'
49
+ content-encoding:
50
+ - gzip
51
+ x-content-type-options:
52
+ - nosniff
53
+ strict-transport-security:
54
+ - max-age=31536000;
55
+ body:
56
+ encoding: ASCII-8BIT
57
+ string: !binary |-
58
+ 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
438
+ Jm5Y2huGdzP74CdN/zVY6/3wZnA2PT+/e9blCXaX+727ynNO1vp43bErMoXo
439
+ W+6Q5qRn3dCocXbekfT8G97xKU+lVdKCQI5A3u4vURo9IsPGg4rmHW17djA5
440
+ IXvTk52LcVs2x7B2nkPF0Xi1MbwjUfBtWbqe73ds6Uup25q6JcEN+OdphxcA
441
+ Y8sk9horzqB03AHDqIOYec3DKwdUfRcX9pF2vM9NsjLvWDoeq/EOuQluWBfv
442
+ WKXo6NfNutBgVLwzuHi6hfcX/Pjgovd48EIU6rVyKowZqzruEE4lWgwsBgFy
443
+ GmM84N5YqSgh0lnpFWXEYh9FqcqwOvwyR/LiYDExUBvlsUGUSY4go8IKgRC3
444
+ hBGhCdFUkwCN1wGLCXWCSeUUhJhLDiwzIED2qPqOjMp1CsOlENZmhMWN3lA9
445
+ uU5W/Js0z9fgfj9sT2t4YEcjDdFzp6OuzG29nJP7fbzu2OuuFKLv8K8r1d2o
446
+ 6XJIm5f0/KsEomYIQRWY5p66rdKoRPlCAGcFYzSOaoc3nQfwPDodPpzW4LPt
447
+ NGomM0ZboPbjyZss+OZ2pjutp++NbT+Cswypjakh3CGisBFhrw67IwbYK+KN
448
+ sApJAAHUkAi/FJxlwGbLx2G1wFO4BcUGm21cTTa8u0hrcK2723hA5wLcD7gz
449
+ J/fns6vZeT7W4HjVsbanNKKpYO/qaU6sZDrgMwm0ZNR7STBXhmhPmNDzIo4i
450
+ oDq5JPtxamT5E64moQ2cUWSFD1jSGci5E0pLg/k8JSpHSLOwsa8D9jpMnadQ
451
+ GOYJD+20HAcg7jXBUBPrCRSQOYWWFadJA3svh643dt3/5//qdNyw9KUUIa/d
452
+ 1n1rrDqlcnPY77VMx2Uu8Ji0DNZgFT7lsMXbjraqOzfs4qS+17/T9ZyswvG6
453
+ Y1dmCtH4scrBMJzQBRvD8Kc8oFYgHYRQLPM2DB8DBFiU0bRowzA9n1xMry/G
454
+ D0+0fNTeb/QPa/hcZfduj1f7EVImC74LF1dReZXvN9OkCiv0p2kIZ9Jw4SQ2
455
+ kkHEuPKcMMW884GXcIexZDhKd1ZUYOTykVmBhtAtADeBkb+Bibg4X+xa9VE8
456
+ Yz2l1y9Vcb7dH+xgvp2PL3a86ljjVBrRYuzCjIbdFBvFtCUWeOUtM4gFgBf9
457
+ KCkGBCpnwHqSFDLqlENSAKeBdBZooBEgIGpqVJWdcgMYk3xxZusik0cbaxXj
458
+ RmAriBPQealc6EVsnIyS3EQlaSi0y7JupwHIp37seqW/1dTQTEalXdXt977u
459
+ 7JldJZKm/hpMxe2bOzvZPcDt6dHFSX98d3pb9k85mYrjdceuxhSib0fvu4HJ
460
+ wVic0ANFZmqBN7M+mYjJTRnedWsDNd4D9CynPDkLdMf1fhrR7wz11861ezZ7
461
+ 3yc9fyo+8rPZvIHI2YNif6e2PQ8DDRtm0VXQ+cPwHD3umnujafXE1ienx2fZ
462
+ C6ssUPsR9CQL/rCbfil93E4XA2W4JDS0N+l0loDc90O+clXzpb2aCuTSLwhd
463
+ QrQF8BYBG5D72UHuxpbxexvbqTqednhZ7g7Hd49POyczqWDtLBcusUB13PmZ
464
+ SrQgLoEdAgGTW2wtMgEWIyC1UzwcQtYBFKgGAYji9XAJLR2hAkJIDbE8tBJp
465
+ bxQiAjLDERaKGKM9YuvgEgASaBQB3BEXWqY9Jd54J7zF4QT3hgAntGBZ4zor
466
+ UdhSr1Q5y0odkmb6GqjDrrlt7O00L8oNc3Iw6rG76qh5kRN1iNcdSx1SiL6V
467
+ o1G9sRqNW6ZUG5b2+tMc6ENCL2xM6p/yGFqpBCMWIN9U8vs7l+dXEf8Asui6
468
+ P7g9qV0MTw6uRuSqMVPllgG+3M1egjFe7UfkmCz4ljDGDf5/9s6tp20YiuPv
469
+ fArUT2Af32LeEKhStqyLVgTa3o5vI5CRFVqgSHx3EiDqhTZtRqsKjVf7yJLj
470
+ Y/v8Yvt/MtzvFzPZO+dv8kwjW7tf6ASsMoRLriBoUknIU1aWaM0tdUQjAqAJ
471
+ yGaC3Dm64NN1bXMwNo5E21vW8Jmk/CPSxf+zoH9UokhUNy7x/5eU9stAdbs6
472
+ 7cJmHnMuaXohUaxjuh2iMERSg8BYUBgxDFIhk6ikdJUGaxkgM8FAi92ktiQe
473
+ GKBi6I0KxmrkIngvPfVCowMijAjM2eUp6bdIFCgCV9RQQZwh3tFKvEZrqXyk
474
+ mBdGc2SRpjM5fuc/3DpEkeLQnt8V15ebgIoVzr4DtZgz+3v87dKFOLntHaUn
475
+ eBvHvQ2dRyxpe+H8W8N0Erc8XPhr56+W6l62UIxZ0f1/pYnPbWenKjFKRhsW
476
+ K+8lP/qKQkkQZNsvAaCX9u8Hx4dx9nAB94kmx6enSfL+zKGLm30bHa42nOg2
477
+ 5SO/n4zyclKMGxhiOopvxxDMsUpm0kvKkTMaQFsVoFKNUSZAZBmPFBgBTQzx
478
+ ntcAzWPxyhC1l3by7M+Lj9F6o+1clW4xe4rSKUK48c+FtdFzb4vRzZzhsBi+
479
+ RNJC7r0O+6QDf3Mc5/Uy1xilH9SmBzz5HumfZOxGUZ7p9HwA2d3Xk87e4xMA
480
+ AAD//wMAdFwh/TOVAgA=
481
+ http_version: '1.1'
482
+ recorded_at: Sun, 21 Jun 2015 01:31:42 GMT
483
+ recorded_with: VCR 2.9.3
@@ -0,0 +1,59 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: https://api.spotify.com/v1/users/spotify/playlists/4LO89Y0ydu8li9Phq2iwKT/followers/contains?ids=spotify,wizzler
6
+ body:
7
+ encoding: US-ASCII
8
+ string: ''
9
+ headers:
10
+ accept:
11
+ - "*/*; q=0.5, application/xml"
12
+ accept-encoding:
13
+ - gzip, deflate
14
+ authorization:
15
+ - Bearer BQAURpqTjos-SbAWyiXyLd-tzsJUWOYsZg8mR_enxDjLTVPwigdHfyIvWY8t9xC0_qm8Sj0LL1IxhJhqt6YONA
16
+ user-agent:
17
+ - Ruby
18
+ response:
19
+ status:
20
+ code: 200
21
+ message: OK
22
+ headers:
23
+ server:
24
+ - nginx
25
+ date:
26
+ - Sun, 21 Jun 2015 01:35:39 GMT
27
+ content-type:
28
+ - application/json
29
+ transfer-encoding:
30
+ - chunked
31
+ connection:
32
+ - keep-alive
33
+ keep-alive:
34
+ - timeout=600
35
+ cache-control:
36
+ - private, max-age=0
37
+ access-control-allow-headers:
38
+ - Accept, Authorization, Origin, Content-Type
39
+ access-control-allow-origin:
40
+ - "*"
41
+ access-control-max-age:
42
+ - '604800'
43
+ access-control-allow-methods:
44
+ - GET, POST, OPTIONS, PUT, DELETE
45
+ access-control-allow-credentials:
46
+ - 'true'
47
+ content-encoding:
48
+ - gzip
49
+ x-content-type-options:
50
+ - nosniff
51
+ strict-transport-security:
52
+ - max-age=31536000;
53
+ body:
54
+ encoding: ASCII-8BIT
55
+ string: !binary |-
56
+ H4sIAAAAAAAAAIpWKCkqTdVRSEvMKU5ViAUAAAD//wMA0CIqHQ8AAAA=
57
+ http_version: '1.1'
58
+ recorded_at: Sun, 21 Jun 2015 01:35:39 GMT
59
+ recorded_with: VCR 2.9.3
@@ -0,0 +1,65 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: https://api.spotify.com/v1/users/spotify
6
+ body:
7
+ encoding: US-ASCII
8
+ string: ''
9
+ headers:
10
+ accept:
11
+ - "*/*; q=0.5, application/xml"
12
+ accept-encoding:
13
+ - gzip, deflate
14
+ authorization:
15
+ - Bearer BQAURpqTjos-SbAWyiXyLd-tzsJUWOYsZg8mR_enxDjLTVPwigdHfyIvWY8t9xC0_qm8Sj0LL1IxhJhqt6YONA
16
+ user-agent:
17
+ - Ruby
18
+ response:
19
+ status:
20
+ code: 200
21
+ message: OK
22
+ headers:
23
+ server:
24
+ - nginx
25
+ date:
26
+ - Sun, 21 Jun 2015 01:31:22 GMT
27
+ content-type:
28
+ - application/json; charset=utf-8
29
+ transfer-encoding:
30
+ - chunked
31
+ connection:
32
+ - keep-alive
33
+ keep-alive:
34
+ - timeout=600
35
+ cache-control:
36
+ - public, max-age=14400
37
+ access-control-allow-headers:
38
+ - Accept, Authorization, Origin, Content-Type
39
+ access-control-allow-origin:
40
+ - "*"
41
+ access-control-max-age:
42
+ - '604800'
43
+ access-control-allow-methods:
44
+ - GET, POST, OPTIONS, PUT, DELETE
45
+ access-control-allow-credentials:
46
+ - 'true'
47
+ content-encoding:
48
+ - gzip
49
+ x-content-type-options:
50
+ - nosniff
51
+ strict-transport-security:
52
+ - max-age=31536000;
53
+ body:
54
+ encoding: ASCII-8BIT
55
+ string: !binary |-
56
+ H4sIAAAAAAAAAFyR0Y6DIBBF3/crjM/dUhu16G/0cbNpxjJUEhQCuF3T9N8X
57
+ UEm7j3Nn7pw78PjIspwJqyXMlxEGzLM2y89aOcHnfBe6+OvQjCAvk5E2tB9e
58
+ 9bpdh4Khd07blhClcdyvjf1VDWSyaMg26X3PuJIrKdUdzeu63iAP5ThJuVsk
59
+ pxzIoFXH5tTQMvm32cQFLd6wP0Uk24SONsGi6V0b4IYxx1dKguLWu39Z/PGJ
60
+ 6IHaKC4kfi72vb2y0YMJGCess4Qhh0k6UjS067qK06KDkh2AF/RY1Vj6ojmw
61
+ GqEugdJTk6+Uu2Cu38jh3Ow7pnSzXn4mXLUEn4x4vaYNnTa99PMPAAD//wMA
62
+ RFsKfNkBAAA=
63
+ http_version: '1.1'
64
+ recorded_at: Sun, 21 Jun 2015 01:31:21 GMT
65
+ recorded_with: VCR 2.9.3
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rspotify
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.13.0
4
+ version: 1.14.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Guilherme Sad
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-03-21 00:00:00.000000000 Z
11
+ date: 2015-06-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: omniauth-oauth2
@@ -129,6 +129,7 @@ executables: []
129
129
  extensions: []
130
130
  extra_rdoc_files: []
131
131
  files:
132
+ - ".editorconfig"
132
133
  - ".gitignore"
133
134
  - ".rspec"
134
135
  - ".travis.yml"
@@ -193,7 +194,9 @@ files:
193
194
  - spec/vcr_cassettes/playlist_browse_featured_limit_10_offset_10.yml
194
195
  - spec/vcr_cassettes/playlist_browse_featured_locale_es_MX.yml
195
196
  - spec/vcr_cassettes/playlist_find_118430647_starred.yml
197
+ - spec/vcr_cassettes/playlist_find_spotify_4LO89Y0ydu8li9Phq2iwKT.yml
196
198
  - spec/vcr_cassettes/playlist_find_wizzler_00wHcTN0zQiun4xri9pmvX.yml
199
+ - spec/vcr_cassettes/playlist_is_followed_by.yml
197
200
  - spec/vcr_cassettes/playlist_search_Indie.yml
198
201
  - spec/vcr_cassettes/playlist_search_Indie_limit_10.yml
199
202
  - spec/vcr_cassettes/playlist_search_Indie_offset_10.yml
@@ -207,6 +210,7 @@ files:
207
210
  - spec/vcr_cassettes/track_search_Wanna_Know_limit_10_offset_10.yml
208
211
  - spec/vcr_cassettes/track_search_Wanna_Know_market_ES.yml
209
212
  - spec/vcr_cassettes/track_search_Wanna_Know_offset_10.yml
213
+ - spec/vcr_cassettes/user_find_spotify.yml
210
214
  - spec/vcr_cassettes/user_find_wizzler.yml
211
215
  - spec/vcr_cassettes/user_wizzler_playlists_limit_20_offset_0.yml
212
216
  homepage: http://rubygems.org/gems/rspotify
@@ -279,7 +283,9 @@ test_files:
279
283
  - spec/vcr_cassettes/playlist_browse_featured_limit_10_offset_10.yml
280
284
  - spec/vcr_cassettes/playlist_browse_featured_locale_es_MX.yml
281
285
  - spec/vcr_cassettes/playlist_find_118430647_starred.yml
286
+ - spec/vcr_cassettes/playlist_find_spotify_4LO89Y0ydu8li9Phq2iwKT.yml
282
287
  - spec/vcr_cassettes/playlist_find_wizzler_00wHcTN0zQiun4xri9pmvX.yml
288
+ - spec/vcr_cassettes/playlist_is_followed_by.yml
283
289
  - spec/vcr_cassettes/playlist_search_Indie.yml
284
290
  - spec/vcr_cassettes/playlist_search_Indie_limit_10.yml
285
291
  - spec/vcr_cassettes/playlist_search_Indie_offset_10.yml
@@ -293,6 +299,7 @@ test_files:
293
299
  - spec/vcr_cassettes/track_search_Wanna_Know_limit_10_offset_10.yml
294
300
  - spec/vcr_cassettes/track_search_Wanna_Know_market_ES.yml
295
301
  - spec/vcr_cassettes/track_search_Wanna_Know_offset_10.yml
302
+ - spec/vcr_cassettes/user_find_spotify.yml
296
303
  - spec/vcr_cassettes/user_find_wizzler.yml
297
304
  - spec/vcr_cassettes/user_wizzler_playlists_limit_20_offset_0.yml
298
305
  has_rdoc: