rspotify 1.2.0 → 1.3.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 +4 -4
- data/lib/rspotify/album.rb +25 -4
- data/lib/rspotify/artist.rb +3 -3
- data/lib/rspotify/base.rb +2 -13
- data/lib/rspotify/playlist.rb +40 -12
- data/lib/rspotify/track.rb +1 -1
- data/lib/rspotify/user.rb +3 -3
- data/lib/rspotify/version.rb +1 -1
- data/rspotify.gemspec +1 -0
- data/spec/lib/rspotify/album_spec.rb +21 -7
- data/spec/lib/rspotify/artist_spec.rb +32 -12
- data/spec/lib/rspotify/playlist_spec.rb +7 -2
- data/spec/lib/rspotify/track_spec.rb +21 -7
- data/spec/lib/rspotify/user_spec.rb +12 -5
- data/spec/spec_helper.rb +6 -0
- data/spec/vcr_cassettes/album_find_2agWNCZl5Ts9W05mij8EPh.yml +138 -0
- data/spec/vcr_cassettes/album_find_3JquYMWj5wrzuZCNAvOYN9.yml +267 -0
- data/spec/vcr_cassettes/album_find_5bU1XKYxHhEwukllT20xtk.yml +107 -0
- data/spec/vcr_cassettes/album_search_AM.yml +145 -0
- data/spec/vcr_cassettes/album_search_AM_limit_10.yml +109 -0
- data/spec/vcr_cassettes/album_search_AM_offset_10.yml +145 -0
- data/spec/vcr_cassettes/album_search_AM_offset_10_limit_10.yml +108 -0
- data/spec/vcr_cassettes/artist_7Ln80lUS6He07XvHI8qqHH_albums.yml +133 -0
- data/spec/vcr_cassettes/artist_7Ln80lUS6He07XvHI8qqHH_related_artists.yml +153 -0
- data/spec/vcr_cassettes/artist_7Ln80lUS6He07XvHI8qqHH_top_tracks_US.yml +102 -0
- data/spec/vcr_cassettes/artist_find_0oSGxfWSnnOXhD2fKuz2Gy.yml +74 -0
- data/spec/vcr_cassettes/artist_find_3dBVyJ7JuOMt4GE9607Qin.yml +80 -0
- data/spec/vcr_cassettes/artist_find_7Ln80lUS6He07XvHI8qqHH.yml +68 -0
- data/spec/vcr_cassettes/artist_search_Arctic.yml +122 -0
- data/spec/vcr_cassettes/artist_search_Arctic_limit_10.yml +96 -0
- data/spec/vcr_cassettes/artist_search_Arctic_offset_10.yml +119 -0
- data/spec/vcr_cassettes/artist_search_Arctic_offset_10_limit_10.yml +92 -0
- data/spec/vcr_cassettes/authenticate_5ac1cda2ad354aeaa1ad2693d33bb98c.yml +71 -0
- data/spec/vcr_cassettes/playlist_find_wizzler_00wHcTN0zQiun4xri9pmvX.yml +507 -0
- data/spec/vcr_cassettes/track_find_3jfr0TF6DQcOLat8gGn7E2.yml +76 -0
- data/spec/vcr_cassettes/track_find_4oI9kesyxHUr8fqiLd6uO9.yml +77 -0
- data/spec/vcr_cassettes/track_find_7D8BAYkrR9peCB9XSKCADc.yml +85 -0
- data/spec/vcr_cassettes/track_search_Wanna_Know.yml +234 -0
- data/spec/vcr_cassettes/track_search_Wanna_Know_limit_10.yml +154 -0
- data/spec/vcr_cassettes/track_search_Wanna_Know_limit_10_offset_10.yml +154 -0
- data/spec/vcr_cassettes/track_search_Wanna_Know_offset_10.yml +236 -0
- data/spec/vcr_cassettes/user_find_wizzler.yml +62 -0
- data/spec/vcr_cassettes/user_wizzler_playlists.yml +77 -0
- metadata +72 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c7f112a228d4a745e4a0856808fdcb5c9380f852
|
4
|
+
data.tar.gz: b13cbfa86d18bcd1f747ed8767fb710e19249381
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 75306911e3e1cb4c6b2c156fa97a106e0cb205711d4ea913878dbc725f8ef6bc767d6a5d07bbba68128252ecd04c671130baea05f096327c83c562ec20d43f65
|
7
|
+
data.tar.gz: f3422f96d4299b9ef58399a843c2bbbf43a4df3ce99126e0d636b1605d2e8759280cc424ab2ba4fabfd04514f545b2a29ae6e6fd644d1692f4e3a1ebea4d9d86
|
data/lib/rspotify/album.rb
CHANGED
@@ -10,7 +10,6 @@ module RSpotify
|
|
10
10
|
# @attr [Integer] popularity The popularity of the album. The value will be between 0 and 100, with 100 being the most popular
|
11
11
|
# @attr [String] release_date The date the album was first released, for example "1981-12-15". Depending on the precision, it might be shown as "1981" or "1981-12"
|
12
12
|
# @attr [String] release_date_precision The precision with which release_date value is known: "year", "month", or "day"
|
13
|
-
# @attr [Array<Track>] tracks The tracks of the album.
|
14
13
|
class Album < Base
|
15
14
|
|
16
15
|
# Returns Album object(s) with id(s) provided
|
@@ -34,7 +33,7 @@ module RSpotify
|
|
34
33
|
# Returns array of Album objects matching the query, ordered by popularity
|
35
34
|
#
|
36
35
|
# @param query [String] The search query's keywords. See the q description in {https://developer.spotify.com/web-api/search-item here} for details.
|
37
|
-
# @param limit [Integer] Maximum number of albums to return.
|
36
|
+
# @param limit [Integer] Maximum number of albums to return. Maximum: 50. Default: 20.
|
38
37
|
# @param offset [Integer] The index of the first album to return. Use with limit to get the next set of albums. Default: 0.
|
39
38
|
# @return [Array<Album>]
|
40
39
|
#
|
@@ -65,11 +64,33 @@ module RSpotify
|
|
65
64
|
options['artists'].map { |a| Artist.new a }
|
66
65
|
end
|
67
66
|
|
68
|
-
@
|
69
|
-
options['tracks']['items'].map { |
|
67
|
+
@tracks_cache = if options['tracks'] && options['tracks']['items']
|
68
|
+
options['tracks']['items'].map { |i| Track.new i }
|
70
69
|
end
|
71
70
|
|
72
71
|
super(options)
|
73
72
|
end
|
73
|
+
|
74
|
+
# Returns array of tracks from the album
|
75
|
+
#
|
76
|
+
# @param limit [Integer] Maximum number of tracks to return. Maximum: 50. Default: 50.
|
77
|
+
# @param offset [Integer] The index of the first track to return. Use with limit to get the next set of objects. Default: 0.
|
78
|
+
# @return [Array<Track>]
|
79
|
+
#
|
80
|
+
# @example
|
81
|
+
# album = RSpotify::Album.find('41vPD50kQ7JeamkxQW7Vuy')
|
82
|
+
# album.tracks.first.name #=> "Do I Wanna Know?"
|
83
|
+
def tracks(limit: 50, offset: 0)
|
84
|
+
last_track = offset + limit - 1
|
85
|
+
if @tracks_cache && last_track < 50
|
86
|
+
return @tracks_cache[offset..last_track]
|
87
|
+
end
|
88
|
+
|
89
|
+
url = "albums/#{@id}/tracks?limit=#{limit}&offset=#{offset}"
|
90
|
+
json = RSpotify.get(url)
|
91
|
+
tracks = json['items'].map { |i| Track.new i }
|
92
|
+
@tracks_cache = tracks if limit == 50 && offset == 0
|
93
|
+
tracks
|
94
|
+
end
|
74
95
|
end
|
75
96
|
end
|
data/lib/rspotify/artist.rb
CHANGED
@@ -27,7 +27,7 @@ module RSpotify
|
|
27
27
|
# Returns array of Artist objects matching the query, ordered by popularity
|
28
28
|
#
|
29
29
|
# @param query [String] The search query's keywords. See the q description in {https://developer.spotify.com/web-api/search-item here} for details.
|
30
|
-
# @param limit [Integer] Maximum number of artists to return.
|
30
|
+
# @param limit [Integer] Maximum number of artists to return. Maximum: 50. Default: 20.
|
31
31
|
# @param offset [Integer] The index of the first artist to return. Use with limit to get the next set of artists. Default: 0.
|
32
32
|
# @return [Array<Artist>]
|
33
33
|
#
|
@@ -65,10 +65,10 @@ module RSpotify
|
|
65
65
|
def albums
|
66
66
|
return @albums unless @albums.nil?
|
67
67
|
json = RSpotify.get("artists/#{@id}/albums")
|
68
|
-
@albums = json['items'].map { |
|
68
|
+
@albums = json['items'].map { |i| Album.new i }
|
69
69
|
end
|
70
70
|
|
71
|
-
# Returns array of similar artists. Similarity is based on analysis of the Spotify community’s {http://news.spotify.com/se/2010/02/03/related-artists listening history}
|
71
|
+
# Returns array of similar artists. Similarity is based on analysis of the Spotify community’s {http://news.spotify.com/se/2010/02/03/related-artists listening history}.
|
72
72
|
#
|
73
73
|
# @return [Array<Artist>]
|
74
74
|
#
|
data/lib/rspotify/base.rb
CHANGED
@@ -30,10 +30,6 @@ module RSpotify
|
|
30
30
|
return false
|
31
31
|
end
|
32
32
|
limit = (type == 'album' ? 20 : 50)
|
33
|
-
if ids.size > limit
|
34
|
-
warn "Too many ids requested. Maximum: #{limit} for #{type}"
|
35
|
-
return false
|
36
|
-
end
|
37
33
|
find_many(ids, type)
|
38
34
|
when String
|
39
35
|
id = ids
|
@@ -43,7 +39,6 @@ module RSpotify
|
|
43
39
|
|
44
40
|
def self.find_many(ids, type)
|
45
41
|
type_class = RSpotify.const_get(type.capitalize)
|
46
|
-
|
47
42
|
path = "#{type}s?ids=#{ids.join ','}"
|
48
43
|
json = RSpotify.get path
|
49
44
|
json["#{type}s"].map { |t| type_class.new t }
|
@@ -52,7 +47,6 @@ module RSpotify
|
|
52
47
|
|
53
48
|
def self.find_one(id, type)
|
54
49
|
type_class = RSpotify.const_get(type.capitalize)
|
55
|
-
|
56
50
|
path = "#{type}s/#{id}"
|
57
51
|
json = RSpotify.get path
|
58
52
|
type_class.new json
|
@@ -63,7 +57,7 @@ module RSpotify
|
|
63
57
|
#
|
64
58
|
# @param query [String] The search query's keywords. See the q description in {https://developer.spotify.com/web-api/search-item here} for details.
|
65
59
|
# @param type [String] Valid types are: album, artist and track. Separate multiple types with commas.
|
66
|
-
# @param limit [Integer] Maximum number of objects to return.
|
60
|
+
# @param limit [Integer] Maximum number of objects to return. Maximum: 50. Default: 20.
|
67
61
|
# @param offset [Integer] The index of the first object to return. Use with limit to get the next set of objects. Default: 0.
|
68
62
|
# @return [Array<Base>]
|
69
63
|
#
|
@@ -76,11 +70,6 @@ module RSpotify
|
|
76
70
|
# albums = RSpotify::Base.search('AM', 'album', limit: 10)
|
77
71
|
# albums.size #=> 10
|
78
72
|
def self.search(query, types, limit: 20, offset: 0)
|
79
|
-
if limit < 1 || limit > 50
|
80
|
-
warn 'Limit must be between 1 and 50'
|
81
|
-
return false
|
82
|
-
end
|
83
|
-
|
84
73
|
types.gsub!(/\s+/, '')
|
85
74
|
|
86
75
|
json = RSpotify.get 'search',
|
@@ -93,7 +82,7 @@ module RSpotify
|
|
93
82
|
|
94
83
|
types.split(',').flat_map do |type|
|
95
84
|
type_class = RSpotify.const_get(type.capitalize)
|
96
|
-
json["#{type}s"]['items'].map { |
|
85
|
+
json["#{type}s"]['items'].map { |i| type_class.new i }
|
97
86
|
end
|
98
87
|
end
|
99
88
|
|
data/lib/rspotify/playlist.rb
CHANGED
@@ -7,7 +7,6 @@ module RSpotify
|
|
7
7
|
# @attr [String] name The name of the playlist
|
8
8
|
# @attr [User] owner The user who owns the playlist
|
9
9
|
# @attr [Boolean] public true if the playlist is not marked as secret
|
10
|
-
# @attr [Array<Track>] tracks The tracks of the playlist
|
11
10
|
class Playlist < Base
|
12
11
|
|
13
12
|
# Returns Playlist object with user_id and id provided
|
@@ -43,10 +42,10 @@ module RSpotify
|
|
43
42
|
User.new options['owner']
|
44
43
|
end
|
45
44
|
|
46
|
-
@
|
47
|
-
options['tracks']['items'].map { |
|
45
|
+
@tracks_cache = if options['tracks'] && options['tracks']['items']
|
46
|
+
options['tracks']['items'].map { |i| Track.new i['track'] }
|
48
47
|
end
|
49
|
-
|
48
|
+
|
50
49
|
super(options)
|
51
50
|
end
|
52
51
|
|
@@ -68,11 +67,6 @@ module RSpotify
|
|
68
67
|
# playlist.add_tracks!(tracks, position: 20)
|
69
68
|
# playlist.tracks[20].name #=> "Somebody That I Used To Know"
|
70
69
|
def add_tracks!(tracks, position: nil)
|
71
|
-
if tracks.size > 100
|
72
|
-
warn 'Too many tracks requested. Maximum: 100'
|
73
|
-
return false
|
74
|
-
end
|
75
|
-
|
76
70
|
track_uris = tracks.map(&:uri).join(',')
|
77
71
|
url = "users/#{@owner.id}/playlists/#{@id}/tracks?uris=#{track_uris}"
|
78
72
|
url << "&position=#{position}" if position
|
@@ -94,14 +88,48 @@ module RSpotify
|
|
94
88
|
# playlist.instance_variable_get("@description") #=> "Iconic soundtracks..."
|
95
89
|
def complete!
|
96
90
|
url = "users/#{@owner.id}/playlists/#{@id}"
|
97
|
-
credentials_defined = User.class_variable_defined?('@@users_credentials')
|
98
|
-
credentials = (credentials_defined ? User.class_variable_get('@@users_credentials') : nil)
|
99
91
|
|
100
|
-
if
|
92
|
+
if users_credentials && users_credentials[@owner.id]
|
101
93
|
initialize User.oauth_get(@owner.id, url)
|
102
94
|
else
|
103
95
|
initialize RSpotify.auth_get(url)
|
104
96
|
end
|
105
97
|
end
|
98
|
+
|
99
|
+
# Returns array of tracks from the playlist
|
100
|
+
#
|
101
|
+
# @param limit [Integer] Maximum number of tracks to return. Maximum: 100. Default: 100.
|
102
|
+
# @param offset [Integer] The index of the first track to return. Use with limit to get the next set of objects. Default: 0.
|
103
|
+
# @return [Array<Track>]
|
104
|
+
#
|
105
|
+
# @example
|
106
|
+
# playlist = RSpotify::Playlist.find('wizzler', '00wHcTN0zQiun4xri9pmvX')
|
107
|
+
# playlist.tracks.first.name #=> "Main Theme from Star Wars - Instrumental"
|
108
|
+
def tracks(limit: 100, offset: 0)
|
109
|
+
last_track = offset + limit - 1
|
110
|
+
if @tracks_cache && last_track < 100
|
111
|
+
return @tracks_cache[offset..last_track]
|
112
|
+
end
|
113
|
+
|
114
|
+
url = "users/#{@owner.id}/playlists/#{@id}/tracks" \
|
115
|
+
"?limit=#{limit}&offset=#{offset}"
|
116
|
+
|
117
|
+
json = if users_credentials && users_credentials[@owner.id]
|
118
|
+
User.oauth_get(@owner.id, url)
|
119
|
+
else
|
120
|
+
RSpotify.auth_get(url)
|
121
|
+
end
|
122
|
+
|
123
|
+
tracks = json['items'].map { |i| Track.new i['track'] }
|
124
|
+
@tracks_cache = tracks if limit == 100 && offset == 0
|
125
|
+
tracks
|
126
|
+
end
|
127
|
+
|
128
|
+
private
|
129
|
+
|
130
|
+
def users_credentials
|
131
|
+
credentials_defined = User.class_variable_defined?('@@users_credentials')
|
132
|
+
User.class_variable_get('@@users_credentials') if credentials_defined
|
133
|
+
end
|
106
134
|
end
|
107
135
|
end
|
data/lib/rspotify/track.rb
CHANGED
@@ -34,7 +34,7 @@ module RSpotify
|
|
34
34
|
# Returns array of Track objects matching the query, ordered by popularity
|
35
35
|
#
|
36
36
|
# @param query [String] The search query's keywords. See the q description in {https://developer.spotify.com/web-api/search-item here} for details.
|
37
|
-
# @param limit [Integer] Maximum number of tracks to return.
|
37
|
+
# @param limit [Integer] Maximum number of tracks to return. Maximum: 50. Default: 20.
|
38
38
|
# @param offset [Integer] The index of the first track to return. Use with limit to get the next set of tracks. Default: 0.
|
39
39
|
# @return [Array<Track>]
|
40
40
|
#
|
data/lib/rspotify/user.rb
CHANGED
@@ -114,7 +114,7 @@ module RSpotify
|
|
114
114
|
# playlists.first.name #=> "Movie Soundtrack Masterpieces"
|
115
115
|
def playlists
|
116
116
|
json = RSpotify.auth_get("users/#{@id}/playlists")
|
117
|
-
json['items'].map { |
|
117
|
+
json['items'].map { |i| Playlist.new i }
|
118
118
|
end
|
119
119
|
|
120
120
|
# Remove tracks from the user’s “Your Music” library.
|
@@ -156,7 +156,7 @@ module RSpotify
|
|
156
156
|
|
157
157
|
# Returns the tracks saved in the Spotify user’s “Your Music” library
|
158
158
|
#
|
159
|
-
# @param limit [Integer] Maximum number of tracks to return.
|
159
|
+
# @param limit [Integer] Maximum number of tracks to return. Maximum: 50. Default: 20.
|
160
160
|
# @param offset [Integer] The index of the first track to return. Use with limit to get the next set of tracks. Default: 0.
|
161
161
|
# @return [Array<Track>]
|
162
162
|
#
|
@@ -167,7 +167,7 @@ module RSpotify
|
|
167
167
|
def saved_tracks(limit: 20, offset: 0)
|
168
168
|
url = "me/tracks?limit=#{limit}&offset=#{offset}"
|
169
169
|
json = User.oauth_get(@id, url)
|
170
|
-
json['items'].map { |
|
170
|
+
json['items'].map { |i| Track.new i['track'] }
|
171
171
|
end
|
172
172
|
|
173
173
|
# Check if tracks are already saved in the Spotify user’s “Your Music” library
|
data/lib/rspotify/version.rb
CHANGED
data/rspotify.gemspec
CHANGED
@@ -4,7 +4,9 @@ describe RSpotify::Album do
|
|
4
4
|
|
5
5
|
before(:each) do
|
6
6
|
# Get Arctic Monkeys's AM album as a testing sample
|
7
|
-
@album =
|
7
|
+
@album = VCR.use_cassette('album:find:5bU1XKYxHhEwukllT20xtk') do
|
8
|
+
RSpotify::Album.find('5bU1XKYxHhEwukllT20xtk')
|
9
|
+
end
|
8
10
|
end
|
9
11
|
|
10
12
|
it 'should find album with correct attributes' do
|
@@ -44,13 +46,17 @@ describe RSpotify::Album do
|
|
44
46
|
describe 'Album::find receiving array of ids' do
|
45
47
|
it 'should find the right albums' do
|
46
48
|
ids = ['2agWNCZl5Ts9W05mij8EPh']
|
47
|
-
albums =
|
49
|
+
albums = VCR.use_cassette('album:find:2agWNCZl5Ts9W05mij8EPh') do
|
50
|
+
RSpotify::Album.find(ids)
|
51
|
+
end
|
48
52
|
expect(albums) .to be_an Array
|
49
53
|
expect(albums.size) .to eq 1
|
50
54
|
expect(albums.first.name) .to eq 'The Next Day Extra'
|
51
55
|
|
52
56
|
ids << '3JquYMWj5wrzuZCNAvOYN9'
|
53
|
-
albums =
|
57
|
+
albums = VCR.use_cassette('album:find:3JquYMWj5wrzuZCNAvOYN9') do
|
58
|
+
RSpotify::Album.find(ids)
|
59
|
+
end
|
54
60
|
expect(albums) .to be_an Array
|
55
61
|
expect(albums.size) .to eq 2
|
56
62
|
expect(albums.first.name) .to eq 'The Next Day Extra'
|
@@ -60,7 +66,9 @@ describe RSpotify::Album do
|
|
60
66
|
|
61
67
|
describe 'Album::search' do
|
62
68
|
it 'should search for the right albums' do
|
63
|
-
albums =
|
69
|
+
albums = VCR.use_cassette('album:search:AM') do
|
70
|
+
RSpotify::Album.search('AM')
|
71
|
+
end
|
64
72
|
expect(albums) .to be_an Array
|
65
73
|
expect(albums.size) .to eq 20
|
66
74
|
expect(albums.first) .to be_an RSpotify::Album
|
@@ -68,15 +76,21 @@ describe RSpotify::Album do
|
|
68
76
|
end
|
69
77
|
|
70
78
|
it 'should accept additional options' do
|
71
|
-
albums =
|
79
|
+
albums = VCR.use_cassette('album:search:AM:limit:10') do
|
80
|
+
RSpotify::Album.search('AM', limit: 10)
|
81
|
+
end
|
72
82
|
expect(albums.size) .to eq 10
|
73
83
|
expect(albums.map(&:name)) .to include('AM', 'Am I Wrong')
|
74
84
|
|
75
|
-
albums =
|
85
|
+
albums = VCR.use_cassette('album:search:AM:offset:10') do
|
86
|
+
RSpotify::Album.search('AM', offset: 10)
|
87
|
+
end
|
76
88
|
expect(albums.size) .to eq 20
|
77
89
|
expect(albums.map(&:name)) .to include('Melody AM', 'I Am')
|
78
90
|
|
79
|
-
albums =
|
91
|
+
albums = VCR.use_cassette('album:search:AM:offset:10:limit:10') do
|
92
|
+
RSpotify::Album.search('AM', limit: 10, offset: 10)
|
93
|
+
end
|
80
94
|
expect(albums.size) .to eq 10
|
81
95
|
expect(albums.map(&:name)) .to include('Melody AM')
|
82
96
|
end
|
@@ -4,7 +4,9 @@ describe RSpotify::Artist do
|
|
4
4
|
|
5
5
|
before(:each) do
|
6
6
|
# Get Arctic Monkeys as a testing sample
|
7
|
-
@artist =
|
7
|
+
@artist = VCR.use_cassette('artist:find:7Ln80lUS6He07XvHI8qqHH') do
|
8
|
+
RSpotify::Artist.find('7Ln80lUS6He07XvHI8qqHH')
|
9
|
+
end
|
8
10
|
end
|
9
11
|
|
10
12
|
it 'should find artist with correct attributes' do
|
@@ -20,7 +22,9 @@ describe RSpotify::Artist do
|
|
20
22
|
end
|
21
23
|
|
22
24
|
it 'should find artist with correct albums' do
|
23
|
-
albums =
|
25
|
+
albums = VCR.use_cassette('artist:7Ln80lUS6He07XvHI8qqHH:albums') do
|
26
|
+
@artist.albums
|
27
|
+
end
|
24
28
|
expect(albums) .to be_an Array
|
25
29
|
expect(albums.size) .to eq 20
|
26
30
|
expect(albums.first) .to be_an RSpotify::Album
|
@@ -28,7 +32,9 @@ describe RSpotify::Artist do
|
|
28
32
|
end
|
29
33
|
|
30
34
|
it 'should find artist with correct top tracks' do
|
31
|
-
top_tracks =
|
35
|
+
top_tracks = VCR.use_cassette('artist:7Ln80lUS6He07XvHI8qqHH:top_tracks:US') do
|
36
|
+
@artist.top_tracks(:US)
|
37
|
+
end
|
32
38
|
expect(top_tracks) .to be_an Array
|
33
39
|
expect(top_tracks.size) .to eq 10
|
34
40
|
expect(top_tracks.first) .to be_an RSpotify::Track
|
@@ -36,7 +42,9 @@ describe RSpotify::Artist do
|
|
36
42
|
end
|
37
43
|
|
38
44
|
it 'should find artist with correct related artists' do
|
39
|
-
related_artists =
|
45
|
+
related_artists = VCR.use_cassette('artist:7Ln80lUS6He07XvHI8qqHH:related_artists') do
|
46
|
+
@artist.related_artists
|
47
|
+
end
|
40
48
|
expect(related_artists) .to be_an Array
|
41
49
|
expect(related_artists.size) .to eq 20
|
42
50
|
expect(related_artists.first) .to be_an RSpotify::Artist
|
@@ -47,13 +55,17 @@ describe RSpotify::Artist do
|
|
47
55
|
describe 'Artist::find receiving array of ids' do
|
48
56
|
it 'should find the right artists' do
|
49
57
|
ids = ['0oSGxfWSnnOXhD2fKuz2Gy']
|
50
|
-
artists =
|
58
|
+
artists = VCR.use_cassette('artist:find:0oSGxfWSnnOXhD2fKuz2Gy') do
|
59
|
+
RSpotify::Artist.find(ids)
|
60
|
+
end
|
51
61
|
expect(artists) .to be_an Array
|
52
62
|
expect(artists.size) .to eq 1
|
53
63
|
expect(artists.first.name) .to eq 'David Bowie'
|
54
64
|
|
55
65
|
ids << '3dBVyJ7JuOMt4GE9607Qin'
|
56
|
-
artists =
|
66
|
+
artists = VCR.use_cassette('artist:find:3dBVyJ7JuOMt4GE9607Qin') do
|
67
|
+
RSpotify::Artist.find(ids)
|
68
|
+
end
|
57
69
|
expect(artists) .to be_an Array
|
58
70
|
expect(artists.size) .to eq 2
|
59
71
|
expect(artists.first.name) .to eq 'David Bowie'
|
@@ -63,7 +75,9 @@ describe RSpotify::Artist do
|
|
63
75
|
|
64
76
|
describe 'Artist::search' do
|
65
77
|
it 'should search for the right artists' do
|
66
|
-
artists =
|
78
|
+
artists = VCR.use_cassette('artist:search:Arctic') do
|
79
|
+
RSpotify::Artist.search('Arctic')
|
80
|
+
end
|
67
81
|
expect(artists) .to be_an Array
|
68
82
|
expect(artists.size) .to eq 20
|
69
83
|
expect(artists.first) .to be_an RSpotify::Artist
|
@@ -71,17 +85,23 @@ describe RSpotify::Artist do
|
|
71
85
|
end
|
72
86
|
|
73
87
|
it 'should accept additional options' do
|
74
|
-
artists =
|
88
|
+
artists = VCR.use_cassette('artist:search:Arctic:limit:10') do
|
89
|
+
RSpotify::Artist.search('Arctic', limit: 10)
|
90
|
+
end
|
75
91
|
expect(artists.size) .to eq 10
|
76
92
|
expect(artists.map(&:name)) .to include('Arctic Monkeys', 'Arctic')
|
77
93
|
|
78
|
-
artists =
|
94
|
+
artists = VCR.use_cassette('artist:search:Arctic:offset:10') do
|
95
|
+
RSpotify::Artist.search('Arctic', offset: 10)
|
96
|
+
end
|
79
97
|
expect(artists.size) .to eq 20
|
80
|
-
expect(artists.map(&:name)) .to include('Arctic
|
98
|
+
expect(artists.map(&:name)) .to include('Arctic Flame', 'Arctic Night')
|
81
99
|
|
82
|
-
artists =
|
100
|
+
artists = VCR.use_cassette('artist:search:Arctic:offset:10:limit:10') do
|
101
|
+
RSpotify::Artist.search('Arctic', limit: 10, offset: 10)
|
102
|
+
end
|
83
103
|
expect(artists.size) .to eq 10
|
84
|
-
expect(artists.map(&:name)) .to include('Arctic
|
104
|
+
expect(artists.map(&:name)) .to include('Arctic Flame')
|
85
105
|
end
|
86
106
|
end
|
87
107
|
end
|
@@ -6,10 +6,15 @@ describe RSpotify::Playlist do
|
|
6
6
|
# Keys generated specifically for the tests. Should be removed in the future
|
7
7
|
client_id = '5ac1cda2ad354aeaa1ad2693d33bb98c'
|
8
8
|
client_secret = '155fc038a85840679b55a1822ef36b9b'
|
9
|
-
|
9
|
+
|
10
|
+
VCR.use_cassette('authenticate:5ac1cda2ad354aeaa1ad2693d33bb98c') do
|
11
|
+
RSpotify.authenticate(client_id, client_secret)
|
12
|
+
end
|
10
13
|
|
11
14
|
# Get wizzler's "Movie Soundtrack Masterpieces" playlist as a testing sample
|
12
|
-
@playlist =
|
15
|
+
@playlist = VCR.use_cassette('playlist:find:wizzler:00wHcTN0zQiun4xri9pmvX') do
|
16
|
+
RSpotify::Playlist.find('wizzler', '00wHcTN0zQiun4xri9pmvX')
|
17
|
+
end
|
13
18
|
end
|
14
19
|
|
15
20
|
it 'should find playlist with correct attributes' do
|