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