module Fontist::Memoizable::ClassMethods
Public Instance Methods
Source
# File lib/fontist/memoizable.rb, line 33 def memoize(method_name, ttl: nil, key: nil) original_method = "_unmemoized_#{method_name}" alias_method original_method, method_name define_method(method_name) do |*args| cache_key = generate_memo_cache_key(method_name, args, key) # Try memory cache first (fastest) @memo_cache ||= {} @memo_cache_keys ||= Set.new if @memo_cache[cache_key] return @memo_cache[cache_key] end # Try disk cache (persistent across runs) cached = Fontist::Cache::Manager.get(cache_key) if cached && !memo_cache_expired?(cached) @memo_cache[cache_key] = cached @memo_cache_keys.add(cache_key) return cached end # Compute and cache result = send(original_method, *args) @memo_cache[cache_key] = result @memo_cache_keys.add(cache_key) Fontist::Cache::Manager.set(cache_key, result, ttl: ttl) if ttl result end end
Declare memoized methods with cache backing Example: memoize :method_name, ttl: 300, key: -> { โcache_keyโ }