diff --git a/lib/identity_cache/encoder.rb b/lib/identity_cache/encoder.rb index 27b4f669..71015eb5 100644 --- a/lib/identity_cache/encoder.rb +++ b/lib/identity_cache/encoder.rb @@ -29,6 +29,7 @@ def coder_from_record(record, klass) coder = {} coder[:attributes] = record.attributes_before_type_cast.dup + coder[:expire_time] = record.class.name.constantize::EXPIRE_CACHE if defined?(record.class.name.constantize::EXPIRE_CACHE) recursively_embedded_associations = klass.send(:recursively_embedded_associations) id_embedded_has_manys = klass.cached_has_manys.select { |_, association| association.embedded_by_reference? } diff --git a/lib/identity_cache/fallback_fetcher.rb b/lib/identity_cache/fallback_fetcher.rb index 76216089..2d950353 100644 --- a/lib/identity_cache/fallback_fetcher.rb +++ b/lib/identity_cache/fallback_fetcher.rb @@ -26,7 +26,7 @@ def fetch_multi(keys) unless missed_keys.empty? replacement_results = yield missed_keys missed_keys.zip(replacement_results) do |key, replacement_result| - @cache_backend.write(key, replacement_result) if IdentityCache.should_fill_cache? + write_cache(key, replacement_result) if IdentityCache.should_fill_cache? results[key] = replacement_result end end @@ -41,9 +41,17 @@ def fetch(key, **cache_fetcher_options) result = @cache_backend.read(key) if result.nil? result = yield - @cache_backend.write(key, result) if IdentityCache.should_fill_cache? + write_cache(key, result) if IdentityCache.should_fill_cache? end result end + + def write_cache(key, result) + if (result.is_a? Hash) && result[:expire_time].present? + @cache_backend.write(key, result, expires_in: result[:expire_time]) + else + @cache_backend.write(key, result) + end + end end end