From 3b4e52cb36e789ccc74e436a1c75d7781228bed0 Mon Sep 17 00:00:00 2001 From: Sam Date: Mon, 28 Sep 2015 16:40:27 +1000 Subject: [PATCH] FEATURE: fragment cache for use with serializers --- app/serializers/application_serializer.rb | 25 +++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/app/serializers/application_serializer.rb b/app/serializers/application_serializer.rb index ad570267a..245336ef7 100644 --- a/app/serializers/application_serializer.rb +++ b/app/serializers/application_serializer.rb @@ -1,3 +1,28 @@ +require 'distributed_cache' + class ApplicationSerializer < ActiveModel::Serializer embed :ids, include: true + + class CachedFragment + def initialize(json) + @json = json + end + def as_json(*_args) + @json + end + end + + def self.expire_cache_fragment!(name) + fragment_cache.delete(name) + end + + def self.fragment_cache + @cache ||= DistributedCache.new("am_serializer_fragment_cache") + end + + protected + + def cache_fragment(name) + ApplicationSerializer.fragment_cache[name] ||= yield + end end