Sha256: 1a9b0137a2aec1bb5938b9ffde3622f89096fd750520190f8813c658ec65725a
Contents?: true
Size: 1.36 KB
Versions: 2
Compression:
Stored size: 1.36 KB
Contents
require 'concurrent' require 'forwardable' module Yoda module Store # Registry Cache is a cache layer for {Registry}. # This class intended to reduce patch calculations of {PatchSet#patch}. class Registry::Cache class RegistryWrapper extend Forwardable include MissingDelegatable delegate_missing :registry attr_reader :registry def initialize(registry, cache = Registry::Cache.new) @registry = registry @cache = cache end def get(key, **kwargs) @cache.fetch_or_calc(key) do @registry.get(key, **kwargs) end end def clear_cache @cache.delete_all end end def initialize @data = Concurrent::Map.new end # @param key [String, Symbol] def fetch_or_calc(key) if cache = data.get(key.to_sym) return cache end yield.tap { |value| data.put_if_absent(key.to_sym, value) } end # @param key [String, Symbol] def delete(key) data.delete(key.to_sym) end def delete_all data.clear end # @param patch [Objects::Patch] def clear_from_patch(patch) patch.keys.each { |key| delete(key) } end private # @return [Concurrent::Map] attr_reader :data end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
yoda-language-server-0.10.1 | lib/yoda/store/registry/cache.rb |
yoda-language-server-0.10.0 | lib/yoda/store/registry/cache.rb |