Sha256: a36637fc1f48138976463ef1292235118d9d07fdb0c5dc44320fd6860e542f1e

Contents?: true

Size: 825 Bytes

Versions: 2

Compression:

Stored size: 825 Bytes

Contents

require 'timecop'

module HyperSpec
  class Timecop
    private

    def travel(mock_type, *args, &block)
      raise SafeModeException if Timecop.safe_mode? && !block_given?

      stack_item = TimeStackItem.new(mock_type, *args)

      stack_backup = @_stack.dup
      @_stack << stack_item

      Lolex.push(mock_type, *args)

      if block_given?
        begin
          yield stack_item.time
        ensure
          Lolex.pop
          @_stack.replace stack_backup
        end
      end
    end

    def return(&block)
      current_stack = @_stack
      current_baseline = @baseline
      unmock!
      yield
    ensure
      Lolex.restore
      @_stack = current_stack
      @baseline = current_baseline
    end

    def unmock! #:nodoc:
      @baseline = nil
      @_stack = []
      Lolex.unmock
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
hyper-spec-0.1.2 lib/hyper-spec/time_cop.rb
hyper-spec-0.1.0 lib/hyper-spec/time_cop.rb