class Redis::Connection::Synchrony

def self.connect(config)

def self.connect(config)
  if config[:scheme] == "unix"
    begin
      conn = EventMachine.connect_unix_domain(config[:path], RedisClient)
    rescue RuntimeError => e
      if e.message == "no connection"
        raise Errno::ECONNREFUSED
      else
        raise e
      end
    end
  elsif config[:scheme] == "rediss" || config[:ssl]
    raise NotImplementedError, "SSL not supported by synchrony driver"
  else
    conn = EventMachine.connect(config[:host], config[:port], RedisClient) do |c|
      c.pending_connect_timeout = [config[:connect_timeout], 0.1].max
    end
  end
  fiber = Fiber.current
  conn.callback { fiber.resume }
  conn.errback { fiber.resume :refused }
  raise Errno::ECONNREFUSED if Fiber.yield == :refused
  instance = new(conn)
  instance.timeout = config[:read_timeout]
  instance
end