Delorean lets you travel in time with Ruby by mocking Time.now
- Marty
-
Wait a minute, Doc. Ah… Are you telling me that you built a time machine… out of a DeLorean?
- Doc
-
The way I see it, if you’re gonna build a time machine into a car, why not do it with some style?
$ [sudo] gem install delorean
Let’s travel in time!
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
With a block:
Delorean.time_travel_to("1 month ago") do # Inside the block, Time.now => Sun Jan 24 00:34:32 +0100 2010 sleep(5) # And the time still goes by... Time.now => Sun Jan 24 00:34:37 +0100 2010 end # Outside the block, Time.now => Wed Feb 24 00:34:35 +0100 2010
You can also jump
which is like sleep
but without losing time
# Time.now => Wed Feb 24 00:34:04 +0100 2010 Delorean.jump 30 # Time.now => Wed Feb 24 00:34:34 +0100 2010
Time-travelling can be extremely useful when you’re testing your application.
For example, in RSpec you may find convenient to include Delorean’s DSL in your spec_helper.rb
:
Spec::Runner.configure do |config| config.include Delorean ...
Now you can time-travel in your examples, like this:
it "should show latest created user" do time_travel_to(3.minutes.ago) { create_user :name => "John" } time_travel_to(5.minutes.ago) { create_user :name => "Chris" } get 'show' response.should have_text("John") response.should_not have_text("Chris") end
Don’t forget to go back to the present after each example:
after(:each) { back_to_the_present }
or its alternate syntax:
after(:each) { back_to_1985 }
Delorean image based on an original by Giancarlo Pitocco
Copyright © 2010 Luismi Cavallé, Sergio Gil and BeBanjo S.L. released under the MIT license