Module: TimeMachine

Defined in:
lib/time_machine.rb

Overview

class Test::Unit::TestCase # 1

Instance Method Summary collapse

Instance Method Details

#now_as(time) ⇒ Object



6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# File 'lib/time_machine.rb', line 6

def now_as(time)
  time_class = class << Time; self; end   # 5
  date_class = class << Date; self; end
  begin
    Time.class_eval do 
      @now_stack ||= []
      if @now_stack.empty?                # 10
        time_class.class_eval do
          alias_method :old_now, :now
          def now
            @now_stack.last.dup
          end                             # 15
        end
        date_class.class_eval do
          alias_method :old_today, :today
          def today
            Time.now.to_date              # 20
          end
        end
      end
      @now_stack.push(time.dup)
    end                                   # 25 
    yield
  ensure
    Time.class_eval do 
      @now_stack.pop
      if @now_stack.empty?                # 30
        date_class.class_eval {alias_method :today, :old_today}
        time_class.class_eval {alias_method :now, :old_now}
      end
    end
  end                                     # 35
end