Module: NexusMods::CacheableApi::CacheableHelpers

Defined in:
lib/nexus_mods/cacheable_api.rb

Overview

Some class helpers to make API calls easily cacheable

Instance Method Summary collapse

Instance Method Details

#cacheable_api(*original_method_names, expiry_from_key:, on_cache_update:, key_format: nil) ⇒ Object

Cache methods used for the NexusMods API with a given expiry time in seconds

Parameters
  • original_method_names (Array): List of methods to which this cache apply
  • expiry_from_key (Proc): Code giving the number of seconds of cache expiry from the key

    * Parameters
    • key (String): The key for which we want the expiry time in seconds
    * Result
    • Integer: Corresponding expiry time
  • on_cache_update (Proc): Proc called when the cache has been updated
  • key_format (Proc or nil): Optional proc giving the key format from the target of cacheable [default: nil]. If nil then a default proc concatenating the target's class, method name and all arguments will be used.

    * Parameters
    • target (Object): Object on which the method is cached
    • method_name (Symbol): Method being cached
    • method_args (Array): Method's arguments
    • method_kwargs (Hash<Symbol,Object>): Method's kwargs
    • * Result
      • String: The corresponding key to be used for caching
      
      
      41
      42
      43
      44
      45
      46
      47
      48
      49
      50
      51
      52
      53
      54
      55
      56
      57
      58
      59
      60
      61
      # File 'lib/nexus_mods/cacheable_api.rb', line 41
      
      def cacheable_api(*original_method_names, expiry_from_key:, on_cache_update:, key_format: nil)
        cacheable_with_expiry(
          *original_method_names,
          key_format: key_format || proc do |target, method_name, method_args, method_kwargs|
            (
              [
                target.class,
                method_name
              ] +
                method_args +
                method_kwargs.map { |key, value| "#{key}:#{value}" }
            ).join('/')
          end,
          expiry_from_key:,
          cache_options: {
            on_cache_update: proc do |_adapter, _key, _value, _options, _context|
              on_cache_update.call
            end
          }
        )
      end