class DistRedis

def add_server(server)

def add_server(server)
  server, port = server.split(':')
  @ring.add_node Redis.new(:host => server, :port => port)
end

def bgsave

def bgsave
  on_each_node :bgsave
end

def delete_cloud!

def delete_cloud!
  @ring.nodes.each do |red|
    red.keys("*").each do |key|
      red.delete key
    end
  end
end

def flush_all

def flush_all
  on_each_node :flush_all
end

def flush_db

def flush_db
  on_each_node :flush_db
end

def initialize(opts={})

def initialize(opts={})
  hosts = []
  db = opts[:db] || nil
  timeout = opts[:timeout] || nil
  raise Error, "No hosts given" unless opts[:hosts]
  opts[:hosts].each do |h|
    host, port = h.split(':')
    hosts << Redis.new(:host => host, :port => port, :db => db, :timeout => timeout)
  end
  @ring = HashRing.new hosts
end

def keys(glob)

def keys(glob)
  @ring.nodes.map do |red|
    red.keys(glob)
  end
end

def method_missing(sym, *args, &blk)

def method_missing(sym, *args, &blk)
  if redis = node_for_key(args.first.to_s)
    redis.send sym, *args, &blk
  else
    super
  end
end

def node_for_key(key)

def node_for_key(key)
  key = $1 if key =~ /\{(.*)?\}/
  @ring.get_node(key)
end

def on_each_node(command, *args)

def on_each_node(command, *args)
  @ring.nodes.each do |red|
    red.send(command, *args)
  end
end

def quit

def quit
  on_each_node :quit
end

def save

def save
  on_each_node :save
end