Class: RSpotify::Playlist
Instance Attribute Summary collapse
-
#collaborative ⇒ Boolean
true if the owner allows other users to modify the playlist.
-
#description ⇒ String
The playlist description.
-
#followers ⇒ Hash
Information about the followers of the playlist.
-
#images ⇒ Array<Hash>
The playlist images.
-
#name ⇒ String
The name of the playlist.
-
#owner ⇒ User
The user who owns the playlist.
-
#public ⇒ Boolean
true if the playlist is not marked as secret.
-
#tracks_added_at ⇒ Hash
A hash containing the date and time each track was added to the playlist.
-
#tracks_added_by ⇒ Hash
A hash containing the user that added each track to the playlist.
Attributes inherited from Base
#external_urls, #href, #id, #type, #uri
Class Method Summary collapse
-
.browse_featured(limit: 20, offset: 0, **options) ⇒ Array<Playlist>
Get a list of Spotify featured playlists (shown, for example, on a Spotify player’s “Browse” tab).
-
.find(user_id, id) ⇒ Playlist
Returns Playlist object with user_id and id provided.
-
.search(query, limit: 20, offset: 0) ⇒ Array<Playlist>
Returns array of Playlist objects matching the query.
Instance Method Summary collapse
-
#add_tracks!(tracks, position: nil) ⇒ Array<Track>
Adds one or more tracks to a playlist in user’s Spotify account.
-
#change_details!(**data) ⇒ Playlist
Change name and public/private state of playlist in user’s Spotify account.
-
#complete! ⇒ Object
When an object is obtained undirectly, Spotify usually returns a simplified version of it.
-
#initialize(options = {}) ⇒ Playlist
constructor
A new instance of Playlist.
-
#replace_tracks!(tracks) ⇒ Array<Track>
Replace all the tracks in a playlist, overwriting its existing tracks.
-
#tracks(limit: 100, offset: 0) ⇒ Array<Track>
Returns array of tracks from the playlist.
Methods inherited from Base
Constructor Details
#initialize(options = {}) ⇒ Playlist
75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 |
# File 'lib/rspotify/playlist.rb', line 75 def initialize( = {}) @collaborative = ['collaborative'] @description = ['description'] @followers = ['followers'] @images = ['images'] @name = ['name'] @public = ['public'] @owner = if ['owner'] User.new ['owner'] end tracks = ['tracks']['items'] if ['tracks'] @tracks_cache = if tracks tracks.map { |t| Track.new t['track'] } end @tracks_added_at = hash_for(tracks, 'added_at') do |added_at| Time.parse added_at end @tracks_added_by = hash_for(tracks, 'added_by') do |added_by| User.new added_by end super() end |
Dynamic Method Handling
This class handles dynamic methods through the method_missing method in the class RSpotify::Base
Instance Attribute Details
#collaborative ⇒ Boolean
true if the owner allows other users to modify the playlist
12 13 14 |
# File 'lib/rspotify/playlist.rb', line 12 def collaborative @collaborative end |
#description ⇒ String
The playlist description
12 13 14 |
# File 'lib/rspotify/playlist.rb', line 12 def description @description end |
#followers ⇒ Hash
Information about the followers of the playlist
12 13 14 |
# File 'lib/rspotify/playlist.rb', line 12 def followers @followers end |
#images ⇒ Array<Hash>
The playlist images
12 13 14 |
# File 'lib/rspotify/playlist.rb', line 12 def images @images end |
#name ⇒ String
The name of the playlist
12 13 14 |
# File 'lib/rspotify/playlist.rb', line 12 def name @name end |
#owner ⇒ User
The user who owns the playlist
12 13 14 |
# File 'lib/rspotify/playlist.rb', line 12 def owner @owner end |
#public ⇒ Boolean
true if the playlist is not marked as secret
12 13 14 |
# File 'lib/rspotify/playlist.rb', line 12 def public @public end |
#tracks_added_at ⇒ Hash
A hash containing the date and time each track was added to the playlist
12 13 14 |
# File 'lib/rspotify/playlist.rb', line 12 def tracks_added_at @tracks_added_at end |
#tracks_added_by ⇒ Hash
A hash containing the user that added each track to the playlist
12 13 14 |
# File 'lib/rspotify/playlist.rb', line 12 def tracks_added_by @tracks_added_by end |
Class Method Details
.browse_featured(limit: 20, offset: 0, **options) ⇒ Array<Playlist>
Get a list of Spotify featured playlists (shown, for example, on a Spotify player’s “Browse” tab).
27 28 29 30 31 32 33 34 |
# File 'lib/rspotify/playlist.rb', line 27 def self.browse_featured(limit: 20, offset: 0, **) url = "browse/featured-playlists?limit=#{limit}&offset=#{offset}" .each do |option, value| url << "&#{option}=#{value}" end json = RSpotify.auth_get(url) json['playlists']['items'].map { |i| Playlist.new i } end |
.find(user_id, id) ⇒ Playlist
Returns Playlist object with user_id and id provided. If id is “starred”, returns starred playlist from user.
46 47 48 49 50 51 52 53 54 |
# File 'lib/rspotify/playlist.rb', line 46 def self.find(user_id, id) url = if id == "starred" "users/#{user_id}/starred" else "users/#{user_id}/playlists/#{id}" end json = RSpotify.resolve_auth_request(user_id, url) Playlist.new json end |
.search(query, limit: 20, offset: 0) ⇒ Array<Playlist>
Returns array of Playlist objects matching the query
71 72 73 |
# File 'lib/rspotify/playlist.rb', line 71 def self.search(query, limit: 20, offset: 0) super(query, 'playlist', limit: limit, offset: offset) end |
Instance Method Details
#add_tracks!(tracks, position: nil) ⇒ Array<Track>
Adds one or more tracks to a playlist in user’s Spotify account. This method is only available when the current user has granted access to the playlist-modify and playlist-modify-private scopes.
121 122 123 124 125 126 127 128 129 |
# File 'lib/rspotify/playlist.rb', line 121 def add_tracks!(tracks, position: nil) track_uris = tracks.map(&:uri).join(',') url = @href + "/tracks?uris=#{track_uris}" url << "&position=#{position}" if position User.oauth_post(@owner.id, url, {}) @tracks_cache = nil tracks end |
#change_details!(**data) ⇒ Playlist
Change name and public/private state of playlist in user’s Spotify account. Changing a public playlist requires the playlist-modify scope; changing a private playlist requires the playlist-modify-private scope.
146 147 148 149 150 151 152 |
# File 'lib/rspotify/playlist.rb', line 146 def change_details!(**data) User.oauth_put(@owner.id, @href, data.to_json) data.each do |field, value| instance_variable_set("@#{field}", value) end self end |
#complete! ⇒ Object
It is seldom necessary to use this method explicitly, since RSpotify takes care of it automatically when needed (see Base#method_missing)
When an object is obtained undirectly, Spotify usually returns a simplified version of it. This method updates it into a full object, with all attributes filled.
164 165 166 |
# File 'lib/rspotify/playlist.rb', line 164 def complete! initialize RSpotify.resolve_auth_request(@owner.id, @href) end |
#replace_tracks!(tracks) ⇒ Array<Track>
Replace all the tracks in a playlist, overwriting its existing tracks. Changing a public playlist requires the playlist-modify scope; changing a private playlist requires the playlist-modify-private scope.
205 206 207 208 209 210 211 |
# File 'lib/rspotify/playlist.rb', line 205 def replace_tracks!(tracks) track_uris = tracks.map(&:uri).join(',') url = @href + "/tracks?uris=#{track_uris}" User.oauth_put(@owner.id, url, {}) @tracks_cache = nil tracks end |
#tracks(limit: 100, offset: 0) ⇒ Array<Track>
Returns array of tracks from the playlist
177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 |
# File 'lib/rspotify/playlist.rb', line 177 def tracks(limit: 100, offset: 0) last_track = offset + limit - 1 if @tracks_cache && last_track < 100 return @tracks_cache[offset..last_track] end url = @href + "/tracks?limit=#{limit}&offset=#{offset}" json = RSpotify.resolve_auth_request(@owner.id, url) tracks = json['items'].map do |i| Track.new i['track'] unless i['track'].nil? end.compact @tracks_cache = tracks if limit == 100 && offset == 0 tracks end |