From ba23de686de741539b4d8ec0ad964078132da963 Mon Sep 17 00:00:00 2001 From: Benjamin Fleischer Date: Thu, 14 Apr 2016 22:24:30 -0500 Subject: [PATCH] Complete extracting to Serializer#cached_attributes --- lib/active_model/serializer/caching.rb | 18 ++++++++++++++++++ .../adapter/attributes.rb | 16 ++-------------- 2 files changed, 20 insertions(+), 14 deletions(-) diff --git a/lib/active_model/serializer/caching.rb b/lib/active_model/serializer/caching.rb index 6444f9d9..f7f2904b 100644 --- a/lib/active_model/serializer/caching.rb +++ b/lib/active_model/serializer/caching.rb @@ -1,3 +1,5 @@ +# TODO(BF): refactor file to be smaller +# rubocop:disable Metrics/ModuleLength module ActiveModel class Serializer UndefinedCacheKey = Class.new(StandardError) @@ -206,6 +208,21 @@ module ActiveModel end end + def cached_attributes(options, cached_attributes, adapter_instance) + if self.class.cache_enabled? + key = cache_key(adapter_instance) + cached_attributes.fetch(key) do + cache_check(adapter_instance) do + attributes(options[:fields]) + end + end + else + cache_check(adapter_instance) do + attributes(options[:fields]) + end + end + end + def cache_check(adapter_instance) if self.class.cache_enabled? self.class.cache_store.fetch(cache_key(adapter_instance), self.class._cache_options) do @@ -322,3 +339,4 @@ module ActiveModel end end end +# rubocop:enable Metrics/ModuleLength diff --git a/lib/active_model_serializers/adapter/attributes.rb b/lib/active_model_serializers/adapter/attributes.rb index ba7caa37..abcc5cba 100644 --- a/lib/active_model_serializers/adapter/attributes.rb +++ b/lib/active_model_serializers/adapter/attributes.rb @@ -32,20 +32,8 @@ module ActiveModelSerializers end def serializable_hash_for_single_resource(options) - resource = - if serializer.class.cache_enabled? - cached_attributes = instance_options[:cached_attributes] || {} - key = serializer.cache_key(self) - cached_attributes.fetch(key) do - serializer.cache_check(self) do - serializer.attributes(options[:fields]) - end - end - else - serializer.cache_check(self) do - serializer.attributes(options[:fields]) - end - end + cached_attributes = instance_options[:cached_attributes] || {} + resource = serializer.cached_attributes(options, cached_attributes, self) relationships = resource_relationships(options) resource.merge(relationships) end