module ActiveModel::Serializer::Caching
Constants
- CALLER_FILE
Matches
"c:/git/emberjs/ember-crm-backend/app/serializers/lead_serializer.rb:1:in `<top (required)>'" AND "/c/git/emberjs/ember-crm-backend/app/serializers/lead_serializer.rb:1:in `<top (required)>'" AS c/git/emberjs/ember-crm-backend/app/serializers/lead_serializer.rb
Public Instance Methods
cache_key(adapter_instance)
click to toggle source
# File lib/active_model/serializer/concerns/caching.rb, line 269 def cache_key(adapter_instance) return @cache_key if defined?(@cache_key) parts = [] parts << object_cache_key parts << adapter_instance.cache_key parts << serializer_class._cache_digest unless serializer_class._skip_digest? @cache_key = expand_cache_key(parts) end
expand_cache_key(parts)
click to toggle source
# File lib/active_model/serializer/concerns/caching.rb, line 279 def expand_cache_key(parts) ActiveSupport::Cache.expand_cache_key(parts) end
fetch(adapter_instance, cache_options = serializer_class._cache_options, key = nil) { || ... }
click to toggle source
# File lib/active_model/serializer/concerns/caching.rb, line 231 def fetch(adapter_instance, cache_options = serializer_class._cache_options, key = nil) if serializer_class.cache_store key ||= cache_key(adapter_instance) serializer_class.cache_store.fetch(key, cache_options) do yield end else yield end end
fetch_attributes(fields, cached_attributes, adapter_instance)
click to toggle source
INSTANCE METHODS
# File lib/active_model/serializer/concerns/caching.rb, line 222 def fetch_attributes(fields, cached_attributes, adapter_instance) key = cache_key(adapter_instance) cached_attributes.fetch(key) do fetch(adapter_instance, serializer_class._cache_options, key) do attributes(fields, true) end end end
fetch_attributes_fragment(adapter_instance, cached_attributes = {})
click to toggle source
-
Determine cached fields from serializer class options
-
Get non_cached_fields and fetch cache_fields
-
Merge the two hashes using adapter_instance#fragment_cache
# File lib/active_model/serializer/concerns/caching.rb, line 245 def fetch_attributes_fragment(adapter_instance, cached_attributes = {}) serializer_class._cache_options ||= {} serializer_class._cache_options[:key] = serializer_class._cache_key if serializer_class._cache_key fields = serializer_class.fragmented_attributes non_cached_fields = fields[:non_cached].dup non_cached_hash = attributes(non_cached_fields, true) include_directive = JSONAPI::IncludeDirective.new(non_cached_fields - non_cached_hash.keys) non_cached_hash.merge! associations_hash({}, { include_directive: include_directive }, adapter_instance) cached_fields = fields[:cached].dup key = cache_key(adapter_instance) cached_hash = cached_attributes.fetch(key) do fetch(adapter_instance, serializer_class._cache_options, key) do hash = attributes(cached_fields, true) include_directive = JSONAPI::IncludeDirective.new(cached_fields - hash.keys) hash.merge! associations_hash({}, { include_directive: include_directive }, adapter_instance) end end # Merge both results adapter_instance.fragment_cache(cached_hash, non_cached_hash) end
object_cache_key()
click to toggle source
Use object's cache_key
if available, else derive a key from the object Pass the `key` option to the `cache` declaration or override this method to customize the cache key
# File lib/active_model/serializer/concerns/caching.rb, line 285 def object_cache_key if object.respond_to?(:cache_key_with_version) object.cache_key_with_version elsif object.respond_to?(:cache_key) object.cache_key elsif (serializer_cache_key = (serializer_class._cache_key || serializer_class._cache_options[:key])) object_time_safe = object.updated_at object_time_safe = object_time_safe.strftime('%Y%m%d%H%M%S%9N') if object_time_safe.respond_to?(:strftime) "#{serializer_cache_key}/#{object.id}-#{object_time_safe}" else fail UndefinedCacheKey, "#{object.class} must define #cache_key, or the 'key:' option must be passed into '#{serializer_class}.cache'" end end
serializer_class()
click to toggle source
# File lib/active_model/serializer/concerns/caching.rb, line 299 def serializer_class @serializer_class ||= self.class end