Complete extracting to Serializer#cached_attributes

This commit is contained in:
Benjamin Fleischer 2016-04-14 22:24:30 -05:00
parent 96750b2f9a
commit ba23de686d
2 changed files with 20 additions and 14 deletions

View File

@ -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

View File

@ -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