2010-10-26 11 views
6

Sé que esta es una mala idea, pero tengo un montón de código heredado y quiero ejecutar algunos trabajos por lotes históricos. No quiero cambiar la fecha del sistema porque otras cosas se ejecutan en el mismo sistema. ¿Hay alguna forma de que pueda cambiar el valor que Date.today devolverá solo durante la vida de un proceso determinado? La idea aquí es rebobinar y ejecutar algunos scripts por lotes más antiguos que se utilizaron para funcionar fuera de Date.today.cómo cambiar el valor de Date.today en un proceso de ruby ​​en ejecución

gracias Joel

Respuesta

6

Puedes usar el parche de mono Ruby como Nikolaus, o puedes usar la gema TimeCop. Fue diseñado para facilitar las pruebas de escritura, pero también puede usarlo en su código normal.

# Set the time where you want to go. 
t = Time.local(2008, 9, 1, 10, 5, 0) 

Timecop.freeze(t) do 
    # Back to the future! 
end 
# And you're back! 

# You can also travel (e.g. time continues to go by) 
Timecop.travel(t) 

Es un código grande pero simple. Pruébalo, te ahorrará algunos dolores de cabeza cuando pagues la fecha y la hora tú mismo.

Enlace: https://rubygems.org/gems/timecop

+0

+1 para TimeCop! – Jonathan

+0

oh genial, ¡me gusta esto aún mejor! – Joelio

0

puede volver a definir el 'hoy' de clase método de la clase Date

class Date 
    def Date.today 
    return Date.new(2000,1,1) 
    end 
end 

este fijaría Date.today al 2000-01-01.

+0

bien fresco, ¿Dónde pongo este código. Tengo una aplicación de rieles, mi archivo por lotes se ejecuta como una tarea de rake. ¿Cómo me aseguro de que solo la tarea de rake incluya este código? ¿Simplemente lo puse en la tarea de rake? – Joelio

+0

incluyéndolo en la tarea de rake debería funcionar bien –

0

Si la redefinición Date.today parece demasiado hacky, puede intentar delorean

Desde la página de GitHub:

require 'delorean' 

# Date.today => Wed Feb 24 
Delorean.time_travel_to "1 month ago" # Date.today => Sun Jan 24 
Delorean.back_to_the_present   # Date.today => Wed Feb 24 
Cuestiones relacionadas