Module: Banzai::RequestStoreReferenceCache
- Defined in:
- lib/banzai/request_store_reference_cache.rb
Instance Method Summary collapse
- #cached_call(request_store_key, cache_key, path: []) ⇒ Object
- #get_or_set_cache(cache, key) ⇒ Object
Instance Method Details
#cached_call(request_store_key, cache_key, path: []) ⇒ Object
5 6 7 8 9 10 11 12 13 14 15 16 17 |
# File 'lib/banzai/request_store_reference_cache.rb', line 5 def cached_call(request_store_key, cache_key, path: []) if Gitlab::SafeRequestStore.active? cache = Gitlab::SafeRequestStore[request_store_key] ||= Hash.new do |hash, key| hash[key] = Hash.new { |h, k| h[k] = {} } end cache = cache.dig(*path) if path.any? get_or_set_cache(cache, cache_key) { yield } else yield end end |
#get_or_set_cache(cache, key) ⇒ Object
19 20 21 22 23 24 25 26 27 |
# File 'lib/banzai/request_store_reference_cache.rb', line 19 def get_or_set_cache(cache, key) if cache.key?(key) cache[key] else value = yield cache[key] = value if key.present? value end end |