Sha256: fcf3d4eff4547cf64f68aeba34486ae624320aecf84f2cc4aeff16091d5e0344

Contents?: true

Size: 824 Bytes

Versions: 7

Compression:

Stored size: 824 Bytes

Contents

require 'weakref'

module Valise
  class Cache
    class Store
      def initialize
        @hash = {}
      end

      def []=(key, object)
        @hash[key] = WeakRef.new(object)
      end

      def [](key)
        ref = @hash.fetch(key) do
          return nil
        end
        return live_ref(key, ref)
      rescue WeakRef::RefError
        nil
      end

      def live_ref(key, ref)
        ref.__getobj__
      rescue WeakRef::RefError
        @hash.delete(key)
        raise
      end

      def has_key?(key)
        ref = @hash.fetch(key) do
          false
        end
        live_ref(key, ref)
        true
      rescue WeakRef::RefError
        false
      end
    end

    def initialize
      @stores = Hash.new{|h,k| h[k] = Store.new}
    end

    def domain(key)
      @stores[key]
    end
  end
end

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
valise-1.2.1 lib/valise/cache.rb
valise-1.2.0 lib/valise/cache.rb
valise-1.1.4 lib/valise/cache.rb
valise-1.1.3 lib/valise/cache.rb
valise-1.1.2 lib/valise/cache.rb
valise-1.1.1 lib/valise/cache.rb
valise-1.1.0 lib/valise/cache.rb