Ruby: Expirar los mensajes de Starling en 3 comodos pasos
March 20th, 2009 — 06:12 pmSi te pasa como a mi, que quieres almacenar mensajes en el starling pero que algunos de ellos lleven “fecha de caducidad“, sigue los siguiente pasos.
- Paso 1 : Abrir en un editor el fichero handler.rb perteneciente a la gema starling-starling.
- Paso 2 : En el método Handler#set_data añadir la siguiente linea justo antes de hacer el pack para generar la variable internal_data.
- Paso 3 : Guarda y re-arranca el starling.Todo debería de ir como la seda.
... expiry = Time.now.to_i + expiry.to_i unless expiry.to_i == 0 ...
Con esto, lo único que hemos hecho es corregir un pequeño bug que hay en Handler#get ya que en este método solo se devuelve un mensaje si su expiry es 0 o si expiry es mayor que now (now en este contexto es Time.now.to_i ). El fallo viene de comparar a now (valor unix time) con expiry el cual es solo un offset desde el momento en el que decidimos guardar un mensaje en starling.
... break if expiry == 0 || expiry >= now @expiry_stats[key] += 1 expiry, data = nil ...
Con la linea que añadimos al método Handler#set_data forzamos que la comparación sea entre dos valores unix time.Uno refiriéndose al momento actual (now) y otro al momento en el que expirara el mensaje (la suma de Time.now.to_i en el momento del almacenarlo y el tiempo de vida del mensaje).