Module: CacheAspect

Included in:
ServerBase
Defined in:
lib/macaw_framework/aspects/cache_aspect.rb

Overview

Aspect that provide cache for the endpoints.

Instance Method Summary collapse

Instance Method Details

#call_endpoint(cache, *args, **kwargs) ⇒ Object



6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# File 'lib/macaw_framework/aspects/cache_aspect.rb', line 6

def call_endpoint(cache, *args, **kwargs)
  return super(*args, **kwargs) if cache[:cache].nil? || !cache[:endpoints_to_cache]&.include?(args[0])

  cache_filtered_name = cache_name_filter(args[1], cache[:cached_methods][args[0]])

  cached_response = cache[:cache].mutex.synchronize { cache[:cache].cache[cache_filtered_name]&.dig(0) }
  return cached_response unless cached_response.nil?

  response = super(*args, **kwargs)
  if response && should_cache_response?(response[1])
    cache[:cache].mutex.synchronize do
      cache[:cache].cache[cache_filtered_name] = [response, Time.now]
    end
  end
  response
end