Class: Lutaml::Model::CachedTypeResolver::MutexHashCache Private

Inherits:
Object
  • Object
show all
Defined in:
lib/lutaml/model/cached_type_resolver/mutex_hash_cache.rb

Overview

This class is part of a private API. You should avoid using this class if possible, as it may be removed or be changed in the future.

Hash-backed cache that only relies on Mutex semantics available on Opal.

API:

  • private

Instance Method Summary collapse

Constructor Details

#initialize(store: {}, mutex: Mutex.new) ⇒ MutexHashCache

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns a new instance of MutexHashCache.

API:

  • private



8
9
10
11
# File 'lib/lutaml/model/cached_type_resolver/mutex_hash_cache.rb', line 8

def initialize(store: {}, mutex: Mutex.new)
  @store = store
  @mutex = mutex
end

Instance Method Details

#clearObject

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

API:

  • private



41
42
43
# File 'lib/lutaml/model/cached_type_resolver/mutex_hash_cache.rb', line 41

def clear
  @mutex.synchronize { @store.clear }
end

#clear_context(context_id) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

API:

  • private



35
36
37
38
39
# File 'lib/lutaml/model/cached_type_resolver/mutex_hash_cache.rb', line 35

def clear_context(context_id)
  @mutex.synchronize do
    @store.delete_if { |key, _| key[0] == context_id }
  end
end

#fetch_or_store(cache_key) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

API:

  • private



13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# File 'lib/lutaml/model/cached_type_resolver/mutex_hash_cache.rb', line 13

def fetch_or_store(cache_key)
  found = false
  cached_value = @mutex.synchronize do
    if @store.key?(cache_key)
      found = true
      @store[cache_key]
    end
  end
  return cached_value if found

  value = yield

  @mutex.synchronize do
    @store[cache_key] = value unless @store.key?(cache_key)
    @store[cache_key]
  end
end

#key?(cache_key) ⇒ Boolean

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns:

API:

  • private



31
32
33
# File 'lib/lutaml/model/cached_type_resolver/mutex_hash_cache.rb', line 31

def key?(cache_key)
  @mutex.synchronize { @store.key?(cache_key) }
end

#keysObject

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

API:

  • private



45
46
47
# File 'lib/lutaml/model/cached_type_resolver/mutex_hash_cache.rb', line 45

def keys
  @mutex.synchronize { @store.keys.dup }
end