Sha256: 896f2b3b77ef497e27e46c413ccfb9afb39c1e7123c0a95cc2cb58eacdc729cf

Contents?: true

Size: 1.38 KB

Versions: 15

Compression:

Stored size: 1.38 KB

Contents

# frozen_string_literal: true

require 'concurrent/map'

module ROM
  # Thread-safe cache used by various rom components
  #
  # @api private
  class Cache
    attr_reader :objects

    # @api private
    class Namespaced
      # @api private
      attr_reader :cache

      # @api private
      attr_reader :namespace

      # @api private
      def initialize(cache, namespace)
        @cache = cache
        @namespace = namespace.to_sym
      end

      # @api private
      def [](key)
        cache[[namespace, key].hash]
      end

      # @api private
      def fetch_or_store(*args, &block)
        cache.fetch_or_store([namespace, args.hash].hash, &block)
      end

      # @api private
      def size
        cache.size
      end

      # @api private
      def inspect
        %(#<#{self.class} size=#{size}>)
      end
    end

    # @api private
    def initialize
      @objects = Concurrent::Map.new
      @namespaced = {}
    end

    def [](key)
      cache[key]
    end

    # @api private
    def fetch_or_store(*args, &block)
      objects.fetch_or_store(args.hash, &block)
    end

    # @api private
    def size
      objects.size
    end

    # @api private
    def namespaced(namespace)
      @namespaced[namespace] ||= Namespaced.new(objects, namespace)
    end

    # @api private
    def inspect
      %(#<#{self.class} size=#{size} namespaced=#{@namespaced.inspect}>)
    end
  end
end

Version data entries

15 entries across 15 versions & 1 rubygems

Version Path
rom-core-5.3.2 lib/rom/cache.rb
rom-core-5.3.1 lib/rom/cache.rb
rom-core-5.3.0 lib/rom/cache.rb
rom-core-5.2.6 lib/rom/cache.rb
rom-core-5.2.5 lib/rom/cache.rb
rom-core-5.2.4 lib/rom/cache.rb
rom-core-5.2.3 lib/rom/cache.rb
rom-core-5.2.2 lib/rom/cache.rb
rom-core-5.2.1 lib/rom/cache.rb
rom-core-5.1.2 lib/rom/cache.rb
rom-core-5.1.1 lib/rom/cache.rb
rom-core-5.1.0 lib/rom/cache.rb
rom-core-5.0.2 lib/rom/cache.rb
rom-core-5.0.1 lib/rom/cache.rb
rom-core-5.0.0 lib/rom/cache.rb