Sha256: d5c00b690f67b7f84327bc090ed9a97a026afafb3562762d810e099ca86fc52b

Contents?: true

Size: 995 Bytes

Versions: 17

Compression:

Stored size: 995 Bytes

Contents

# frozen_string_literal: true

##
# Aspect that provide cache for the endpoints.
module CacheAspect
  def call_endpoint(cache, *args)
    return super(*args) unless !cache[:cache].nil? && cache[:endpoints_to_cache]&.include?(args[0])

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

    cache[:cache].mutex.synchronize do
      return cache[:cache].cache[cache_filtered_name][0] unless cache[:cache].cache[cache_filtered_name].nil?

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

  private

  def cache_name_filter(client_data, ignored_headers)
    filtered_headers = client_data[:headers].filter { |key, _value| !ignored_headers&.include?(key) }
    [{ body: client_data[:body], params: client_data[:params], headers: filtered_headers }].to_s.to_sym
  end

  def should_cache_response?(status)
    (200..299).include?(status.to_i)
  end
end

Version data entries

17 entries across 17 versions & 1 rubygems

Version Path
macaw_framework-1.2.4 lib/macaw_framework/aspects/cache_aspect.rb
macaw_framework-1.2.3 lib/macaw_framework/aspects/cache_aspect.rb
macaw_framework-1.2.2 lib/macaw_framework/aspects/cache_aspect.rb
macaw_framework-1.2.1 lib/macaw_framework/aspects/cache_aspect.rb
macaw_framework-1.2.0 lib/macaw_framework/aspects/cache_aspect.rb
macaw_framework-1.1.8 lib/macaw_framework/aspects/cache_aspect.rb
macaw_framework-1.1.7 lib/macaw_framework/aspects/cache_aspect.rb
macaw_framework-1.1.6 lib/macaw_framework/aspects/cache_aspect.rb
macaw_framework-1.1.5 lib/macaw_framework/aspects/cache_aspect.rb
macaw_framework-1.1.4 lib/macaw_framework/aspects/cache_aspect.rb
macaw_framework-1.1.3 lib/macaw_framework/aspects/cache_aspect.rb
macaw_framework-1.1.2 lib/macaw_framework/aspects/cache_aspect.rb
macaw_framework-1.1.1 lib/macaw_framework/aspects/cache_aspect.rb
macaw_framework-1.1.0 lib/macaw_framework/aspects/cache_aspect.rb
macaw_framework-1.0.5 lib/macaw_framework/aspects/cache_aspect.rb
macaw_framework-1.0.4 lib/macaw_framework/aspects/cache_aspect.rb
macaw_framework-1.0.3 lib/macaw_framework/aspects/cache_aspect.rb