как изменить значение Date.today внутри запущенного процесса ruby - PullRequest
6 голосов
/ 26 октября 2010

Я знаю, что это плохая идея, но у меня много устаревшего кода, и я хочу выполнить некоторые исторические пакетные задания.Я не хочу менять системную дату, потому что другие вещи работают в той же системе.Есть ли способ, которым я могу изменить значение, которое Date.today будет возвращать только для жизни данного процесса.Идея здесь состоит в том, чтобы перемотать и запустить несколько старых пакетных сценариев, которые использовались для работы с Date.today.

Ответы [ 3 ]

6 голосов
/ 26 октября 2010

Вы можете либо обезьяна-патч Ruby, как показал вам Николаус, либо использовать гем TimeCop. Он был разработан для облегчения написания тестов, но вы можете использовать его и в обычном коде.

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

Это отличный, но простой кусок кода. Попробуйте, это избавит вас от головной боли, когда вы сами поймете дату и время.

Ссылка: https://rubygems.org/gems/timecop

0 голосов
/ 26 октября 2010

Если переопределение Date.today кажется слишком хакерским, вы можете попробовать delorean

со страницы 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
0 голосов
/ 26 октября 2010

вы можете переопределить метод класса today для класса Date

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

, это исправит Date.today к 2000-01-01.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...