module Playlist::Format::SimpleText

Module to parse and generate playlists with one line per track

Public Class Methods

generate(playlist) click to toggle source

Generate a human readable list of tracks from a Playlist @param playlist [Playlist] the playlist @return [String] the playlist with one line per track

# File lib/playlist/format/simple_text.rb, line 38
def generate(playlist)
  playlist.tracks.map { |t| "#{t.artist} - #{t.title}" }.join("\n") + "\n"
end
parse(input) click to toggle source

Parse a human readable list of tracks into a Playlist @param input any object that responds to each_line

(either a String or a IO object)

@return [Playlist] a new Playlist object

# File lib/playlist/format/simple_text.rb, line 8
def parse(input)
  Playlist.new do |playlist|
    input.each_line do |line|
      next if line =~ /^#/

      track = parse_line(line.strip)
      playlist.tracks << track unless track.nil?
    end
  end
end
parse_line(line) click to toggle source

Parse a single line from a playlist into a Track obect @param line [String] any object that responds to each_line @return [Track] a new Track object

# File lib/playlist/format/simple_text.rb, line 22
def parse_line(line)
  matches = line.match(
    /^(\d{1,2}[:.]\d{1,2}([:.]\d{1,2})?)?\s*(.+?) - (.+?)$/
  )
  unless matches.nil?
    Playlist::Track.new(
      :start_time => matches[1],
      :creator => matches[3].strip,
      :title => matches[4].strip
    )
  end
end