Sha256: d56dbe981a5901715dfd12fc45d1dd414b2f2cf45fed8a3037ecfd65b9d0c7ee
Contents?: true
Size: 1.35 KB
Versions: 10
Compression:
Stored size: 1.35 KB
Contents
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
10 entries across 10 versions & 1 rubygems