Class: Muzak::Playlist
- Inherits:
-
Object
- Object
- Muzak::Playlist
- Defined in:
- lib/muzak/playlist.rb
Overview
Represents a sequential list of songs for muzak.
Instance Attribute Summary collapse
-
#filename ⇒ String
The absolute path to the playlist on disk.
-
#songs ⇒ Array<Song>
The playlist's songs.
Class Method Summary collapse
-
.delete!(pname) ⇒ void
Deletes the given playlist from disk.
-
.exist?(pname) ⇒ Boolean
Whether or not the given playlist name already exists.
-
.load_playlists! ⇒ Hash{String => Playlist}
Instantiates all playlists by loading them from disk.
-
.path_for(pname) ⇒ String
The absolute path to the given playlist name.
-
.playlist_names ⇒ Array<String>
The names of all currently available playlists.
Instance Method Summary collapse
- #add(songs) ⇒ void
- #delete(songs) ⇒ void
-
#initialize(pname) ⇒ Playlist
constructor
Create a new Playlist with the given name, or load one by that name if it already exists.
-
#name ⇒ String
The playlist's name.
-
#shuffle! ⇒ void
Shuffles the internal order of the playlist's songs.
-
#sync! ⇒ void
Synchronizes the current instance with its disk representation.
-
#to_hash ⇒ Hash{String => Array<Song>}
Provides a hash representation of the current instance.
Constructor Details
#initialize(pname) ⇒ Playlist
Create a new Muzak::Playlist with the given name, or load one by that name if it already exists.
55 56 57 58 59 60 61 62 63 64 65 66 |
# File 'lib/muzak/playlist.rb', line 55 def initialize(pname) @filename = self.class.path_for pname if File.exist?(@filename) phash = YAML.load_file(@filename) @songs = phash["songs"] else @songs = [] end sync! end |
Instance Attribute Details
#filename ⇒ String
Returns the absolute path to the playlist on disk.
7 8 9 |
# File 'lib/muzak/playlist.rb', line 7 def filename @filename end |
#songs ⇒ Array<Song>
Returns the playlist's songs.
10 11 12 |
# File 'lib/muzak/playlist.rb', line 10 def songs @songs end |
Class Method Details
.delete!(pname) ⇒ void
If already instantiated, the playlist may still be present in memory (and may reappear on disk if modified in memory)
This method returns an undefined value.
Deletes the given playlist from disk.
29 30 31 |
# File 'lib/muzak/playlist.rb', line 29 def self.delete!(pname) File.delete(path_for(pname)) if exist? pname end |
.exist?(pname) ⇒ Boolean
Returns whether or not the given playlist name already exists.
20 21 22 |
# File 'lib/muzak/playlist.rb', line 20 def self.exist?(pname) File.exist?(path_for(pname)) end |
.load_playlists! ⇒ Hash{String => Playlist}
Instantiates all playlists by loading them from disk.
41 42 43 44 45 46 47 48 49 50 |
# File 'lib/muzak/playlist.rb', line 41 def self.load_playlists! playlists = {} playlists.default_proc = proc { |h, k| h[k] = Playlist.new(k) } playlist_names.each do |pname| playlists[pname] = Playlist.new(pname) end playlists end |
.path_for(pname) ⇒ String
Returns the absolute path to the given playlist name.
14 15 16 |
# File 'lib/muzak/playlist.rb', line 14 def self.path_for(pname) File.join(Config::PLAYLIST_DIR, pname) + ".yml" end |
.playlist_names ⇒ Array<String>
Returns the names of all currently available playlists.
34 35 36 |
# File 'lib/muzak/playlist.rb', line 34 def self.playlist_names Dir[Config::PLAYLIST_GLOB].map { |p| File.basename(p, File.extname(p)) } end |
Instance Method Details
#add(songs) ⇒ void
This method returns an undefined value.
75 76 77 78 79 80 81 82 83 |
# File 'lib/muzak/playlist.rb', line 75 def add(songs) # coerce a single song into an array [*songs].each do |song| next if @songs.include?(song) @songs << song end sync! end |
#delete(songs) ⇒ void
This method returns an undefined value.
88 89 90 91 92 |
# File 'lib/muzak/playlist.rb', line 88 def delete(songs) [*songs].each { |song| @songs.delete(song) } sync! end |
#name ⇒ String
Returns the playlist's name.
69 70 71 |
# File 'lib/muzak/playlist.rb', line 69 def name File.basename(@filename, File.extname(@filename)) end |
#shuffle! ⇒ void
This method returns an undefined value.
Shuffles the internal order of the playlist's songs.
96 97 98 |
# File 'lib/muzak/playlist.rb', line 96 def shuffle! @songs.shuffle! end |
#sync! ⇒ void
You shouldn't need to call this.
This method returns an undefined value.
Synchronizes the current instance with its disk representation.
103 104 105 |
# File 'lib/muzak/playlist.rb', line 103 def sync! File.open(@filename, "w") { |io| io.write to_hash.to_yaml } end |
#to_hash ⇒ Hash{String => Array<Song>}
Provides a hash representation of the current instance.
109 110 111 |
# File 'lib/muzak/playlist.rb', line 109 def to_hash { "songs" => @songs } end |