Tag: Add new tag


Ruby: Expirar los mensajes de Starling en 3 comodos pasos

Si 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.
  •   ...
      expiry = Time.now.to_i + expiry.to_i unless expiry.to_i == 0
      ...
  • Paso 3 : Guarda y re-arranca el starling.Todo debería de ir como la seda.

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).

2 comments » | programacion, ruby