Sha256: ade51ecf028e4dadd42f1a7a4a974dcafa2a1b35f387b884482910119092da35

Contents?: true

Size: 813 Bytes

Versions: 7

Compression:

Stored size: 813 Bytes

Contents

module Trice
  class Repository
    def initialize
      @backend = ThreadLocalBackend.new('trice.reference_time'.freeze)
    end

    def reference_time=(time)
      unless time.nil? || time.acts_like?(:time)
        raise ArgumentError, "#{time.inspect} is not behave like time"
      end
      @backend.set(time)
    end

    def reference_time
      @backend.get || raise(NoReferenceTime)
    end

    def with_reference_time(time, &block)
      original = @backend.get

      begin
        self.reference_time = time
        yield time
      ensure
        self.reference_time = original
      end
    end
  end

  class ThreadLocalBackend
    def initialize(key)
      @key = key
    end

    def set(time)
      Thread.current[@key] = time
    end

    def get
      Thread.current[@key]
    end
  end
end

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
trice-0.3.2 lib/trice/repository.rb
trice-0.3.1 lib/trice/repository.rb
trice-0.3.0 lib/trice/repository.rb
trice-0.2.1 lib/trice/repository.rb
trice-0.2.0 lib/trice/repository.rb
trice-0.1.1 lib/trice/repository.rb
trice-0.1.0 lib/trice/repository.rb