Class: Muzak::Playlist
- Inherits:
-
Object
- Object
- Muzak::Playlist
- Defined in:
- lib/muzak/playlist.rb
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.
56 57 58 59 60 61 62 63 64 65 66 67 |
# File 'lib/muzak/playlist.rb', line 56 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.
4 5 6 |
# File 'lib/muzak/playlist.rb', line 4 def filename @filename end |
#songs ⇒ Array<Song>
Returns the playlist's songs.
7 8 9 |
# File 'lib/muzak/playlist.rb', line 7 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.
26 27 28 |
# File 'lib/muzak/playlist.rb', line 26 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.
17 18 19 |
# File 'lib/muzak/playlist.rb', line 17 def self.exist?(pname) File.exist?(path_for(pname)) end |
.load_playlists! ⇒ Hash{String => Playlist}
Instantiates all playlists by loading them from disk.
42 43 44 45 46 47 48 49 50 51 |
# File 'lib/muzak/playlist.rb', line 42 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.
11 12 13 |
# File 'lib/muzak/playlist.rb', line 11 def self.path_for(pname) File.join(PLAYLIST_DIR, pname) + ".yml" end |
.playlist_names ⇒ Array<String>
Returns the names of all currently available playlists.
31 32 33 34 35 36 37 |
# File 'lib/muzak/playlist.rb', line 31 def self.playlist_names Dir.entries(PLAYLIST_DIR).reject do |ent| ent.start_with?(".") end.map do |ent| File.basename(ent, File.extname(ent)) end end |
Instance Method Details
#add(songs) ⇒ void
This method returns an undefined value.
76 77 78 79 80 81 82 83 84 |
# File 'lib/muzak/playlist.rb', line 76 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.
89 90 91 92 93 |
# File 'lib/muzak/playlist.rb', line 89 def delete(songs) [*songs].each { |song| @songs.delete(song) } sync! end |
#name ⇒ String
Returns the playlist's name.
70 71 72 |
# File 'lib/muzak/playlist.rb', line 70 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.
97 98 99 |
# File 'lib/muzak/playlist.rb', line 97 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.
104 105 106 |
# File 'lib/muzak/playlist.rb', line 104 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.
110 111 112 |
# File 'lib/muzak/playlist.rb', line 110 def to_hash { "songs" => @songs } end |