Created
October 29, 2012 19:21
-
-
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"
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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