Eliminar acentos / diacríticos de la cadena mientras se conservan otros caracteres especiales (probé mb_chars.normalize e iconv)

Hay una muysimilar question ya. Una de las soluciones usa código como este:

string.mb_chars.normalize(:kd).gsub(/[^x00-\x7F]/n, '').to_s

Que funciona de maravilla, hasta que notas que también elimina espacios, puntos, guiones y quién sabe qué más.

No estoy realmente seguro de cómo funciona el primer código, pero ¿podría hacerse para quitarsolament acentos? ¿O al menos recibir una lista de caracteres para preservar? Mi conocimiento de expresiones regulares es pequeño, pero intenté (sin éxito):

/[^\-x00-\x7F]/n # So it would leave the dash alone

Estoy a punto de hacer algo como esto:

string.mb_chars.normalize(:kd).gsub('-', '__DASH__').gsub
  (/[^x00-\x7F]/n, '').gsub('__DASH__', '-').to_s

¿Atroz? Sí..

También he intentado:

iconv = Iconv.new('UTF-8', 'US-ASCII//TRANSLIT') # Also tried ISO-8859-1
iconv.iconv 'Café' # Throws an error: Iconv::IllegalSequence: "é"

¿Ayuda por favor

Respuestas a la pregunta(3)

Su respuesta a la pregunta