From c58a18be291ec15a71261478b22d605fc68d388c Mon Sep 17 00:00:00 2001 From: Vasiliy Ermolovich Date: Tue, 20 Mar 2012 20:47:00 +0300 Subject: [PATCH] add flux capacitor --- delorean.gemspec | 8 +++---- lib/delorean.rb | 52 ++---------------------------------------- lib/flux_capacitor.rb | 53 +++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 59 insertions(+), 54 deletions(-) create mode 100644 lib/flux_capacitor.rb diff --git a/delorean.gemspec b/delorean.gemspec index abb4768..2af9ec1 100644 --- a/delorean.gemspec +++ b/delorean.gemspec @@ -6,16 +6,16 @@ Gem::Specification.new do |gem| gem.date = Date.today.to_s gem.summary = "Delorean lets you travel in time with Ruby by mocking Time.now" - + gem.authors = ["Luismi Cavallé", "Sergio Gil"] gem.email = "ballsbreaking@bebanjo.com" gem.homepage = "http://github.com/bebanjo/delorean" gem.extra_rdoc_files = ["README.md"] - gem.files = ["lib/delorean.rb", "README.md", "MIT-LICENSE"] - + gem.files = ["lib/delorean.rb", "lib/flux_capacitor.rb", "README.md", "MIT-LICENSE"] + gem.add_runtime_dependency 'chronic', '>= 0' - + gem.add_development_dependency 'rspec', '~> 1.3.0' gem.add_development_dependency 'activesupport', '~> 2.3.0' gem.add_development_dependency 'rake' diff --git a/lib/delorean.rb b/lib/delorean.rb index 15efdd0..781eed3 100644 --- a/lib/delorean.rb +++ b/lib/delorean.rb @@ -1,57 +1,9 @@ require 'chronic' +require 'flux_capacitor' module Delorean + include FluxCapacitor extend self - - def time_travel_to(time, options={}) - mock_current_time(time, options) - return unless block_given? - begin - yield - ensure - restore_previous_time - end - end - - def back_to_the_present - reset - end - alias :back_to_1985 :back_to_the_present - - def jump(seconds) - mock_current_time Time.now + seconds - return unless block_given? - begin - yield - ensure - restore_previous_time - end - end - - def now - Time.now_without_delorean - time_travel_offsets.inject(0){ |sum, val| sum + val } - end - - private - - def time_travel_offsets - @@time_travel_offsets ||= [] - end - - def reset - @@time_travel_offsets = [] - end - - def mock_current_time(time, options={}) - time = Chronic.parse(time, options) if time.is_a?(String) - time = Time.local(time.year, time.month, time.day) if time.is_a?(Date) && !time.is_a?(DateTime) - - time_travel_offsets.push Time.now - time - end - - def restore_previous_time - time_travel_offsets.pop - end end class << Time diff --git a/lib/flux_capacitor.rb b/lib/flux_capacitor.rb new file mode 100644 index 0000000..ba4b689 --- /dev/null +++ b/lib/flux_capacitor.rb @@ -0,0 +1,53 @@ +module Delorean + module FluxCapacitor + def time_travel_to(time, options={}) + mock_current_time(time, options) + return unless block_given? + begin + yield + ensure + restore_previous_time + end + end + + def back_to_the_present + reset + end + alias :back_to_1985 :back_to_the_present + + def jump(seconds) + mock_current_time Time.now + seconds + return unless block_given? + begin + yield + ensure + restore_previous_time + end + end + + def now + Time.now_without_delorean - time_travel_offsets.inject(0){ |sum, val| sum + val } + end + + private + + def time_travel_offsets + @@time_travel_offsets ||= [] + end + + def reset + @@time_travel_offsets = [] + end + + def mock_current_time(time, options={}) + time = Chronic.parse(time, options) if time.is_a?(String) + time = Time.local(time.year, time.month, time.day) if time.is_a?(Date) && !time.is_a?(DateTime) + + time_travel_offsets.push Time.now - time + end + + def restore_previous_time + time_travel_offsets.pop + end + end +end