Skip to content

Instantly share code, notes, and snippets.

@ox
Created October 29, 2012 19:21
Show Gist options
  • Save ox/3975886 to your computer and use it in GitHub Desktop.
Save ox/3975886 to your computer and use it in GitHub Desktop.
One way to use classes to facilitate cleaner interactions with Redis as the main "database"
class Playlist
def initialize(playlist={})
return nil unless playlist["tracks"] and playlist["author"]
num = $redis.incr("playlists:num")
next_id = $redis.incr("playlists:next_id")
$redis.sadd("playlists:all", next_id)
playlist["date"] = Time.now
playlist["id"] = next_id
playlist.each_pair do |key, val|
$redis.hset("playlists:#{next_id}", key, val)
end
if playlist["name"]
$redis.set("playlists:by_name:#{playlist["name"].gsub(/\W/, "_")}", next_id)
end
return playlist
end
def self.get_all
playlists = []
$redis.smembers("playlists:all").each do |n|
playlists << self.get_by_id(n)
end
return playlists
end
def self.get_by_id(id)
playlist = $redis.hgetall("playlists:#{id}")
playlist['tracks'] = $redis.smembers("tracks:#{playlist['tracks']}")
return playlist
end
def self.get_by_name(name)
track_id = $redis.get("playlists:by_name:#{name.gsub(/\W/, "_")}")
return self.get_by_id(track_id)
end
def self.delete_by_id(id)
$redis.srem("playlists:all", id)
$redis.hdel("playlists:#{id}")
$redis.decr("playlists:num")
end
def self.delete_by_name(name)
id = $redis.get("playlists:by_name:#{name}")
$redis.del("playlists:by_name:#{name}")
self.delete_by_id(id)
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment