Onze dagmethode #14: Time#warp
Geplaatst door Remco van 't Veer vr, 22 feb 2008 08:00:00 GMT
Tijdreizen is verschrikkelijk handig maar jammer genoeg niet altijd even gemakkelijk. Als de realiteit het niet toestaat dan passen die gewoon aan!
class Time
  def self.now_with_warping
    @warptime || now_without_warping
  end
  class << self
    alias_method :now_without_warping, :now
    alias_method :now, :now_with_warping
  end
  def warp
    self.class.instance_variable_set('@warptime', self)
    yield
  ensure
    self.class.instance_variable_set('@warptime', nil)
  end
end
Hiermee kunnen we gemakkelijk terug naar “Unix Epoch”:
Time.at(0).warp do
  puts "The current time is: #{Time.now}" 
end
Of vlak voor het einde der tijden:
Time.at(2 ** 31 - 1).warp do
  Time.now + 1
end
	Wat heb je er aan? Heel handig om tijds afhankelijke zaken te testen!

cool!
Wij gebruiken voor testing wat extra methods op Time.
Nu kun je mooi in je testen je tijd zetten. Op de carnavals datum bijvoorbeeld.
Niet vergeten in de teardown de time weer terug te zetten.
Mooi toch?