Class: ActiveModelSerializers::CachedSerializer
- Inherits:
-
Object
- Object
- ActiveModelSerializers::CachedSerializer
- Defined in:
- lib/active_model_serializers/cached_serializer.rb
Constant Summary
- UndefinedCacheKey =
Class.new(StandardError)
Class Method Summary (collapse)
-
+ (String?) object_cache_key(serializer, adapter_instance)
The cache_key of the serializer or nil.
-
+ (Array) object_cache_keys(serializers, adapter_instance, include_tree)
find all cache_key for the collection_serializer.
Instance Method Summary (collapse)
- - (Object) cache_check(adapter_instance)
- - (Object) cache_key(adapter_instance)
- - (Boolean) cached?
- - (Boolean) fragment_cached?
-
- (CachedSerializer) initialize(serializer)
constructor
A new instance of CachedSerializer.
-
- (Object) object_cache_key
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.
Constructor Details
- (CachedSerializer) initialize(serializer)
Returns a new instance of CachedSerializer
5 6 7 8 |
# File 'lib/active_model_serializers/cached_serializer.rb', line 5 def initialize(serializer) @cached_serializer = serializer @klass = @cached_serializer.class end |
Class Method Details
+ (String?) object_cache_key(serializer, adapter_instance)
Returns the cache_key of the serializer or nil
80 81 82 83 84 85 |
# File 'lib/active_model_serializers/cached_serializer.rb', line 80 def self.object_cache_key(serializer, adapter_instance) return unless serializer.present? && serializer.object.present? cached_serializer = new(serializer) cached_serializer.cached? ? cached_serializer.cache_key(adapter_instance) : nil end |
+ (Array) object_cache_keys(serializers, adapter_instance, include_tree)
find all cache_key for the collection_serializer
59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 |
# File 'lib/active_model_serializers/cached_serializer.rb', line 59 def self.object_cache_keys(serializers, adapter_instance, include_tree) cache_keys = [] serializers.each do |serializer| cache_keys << object_cache_key(serializer, adapter_instance) serializer.associations(include_tree).each do |association| if association.serializer.respond_to?(:each) association.serializer.each do |sub_serializer| cache_keys << object_cache_key(sub_serializer, adapter_instance) end else cache_keys << object_cache_key(association.serializer, adapter_instance) end end end cache_keys.compact.uniq end |
Instance Method Details
- (Object) cache_check(adapter_instance)
10 11 12 13 14 15 16 17 18 19 20 |
# File 'lib/active_model_serializers/cached_serializer.rb', line 10 def cache_check(adapter_instance) if cached? @klass._cache.fetch(cache_key(adapter_instance), @klass.) do yield end elsif fragment_cached? FragmentCache.new(adapter_instance, @cached_serializer, adapter_instance.).fetch else yield end end |
- (Object) cache_key(adapter_instance)
30 31 32 33 34 35 36 37 38 |
# File 'lib/active_model_serializers/cached_serializer.rb', line 30 def cache_key(adapter_instance) return @cache_key if defined?(@cache_key) parts = [] parts << object_cache_key parts << adapter_instance.cached_name parts << @klass._cache_digest unless @klass._skip_digest? @cache_key = parts.join('/') end |
- (Boolean) cached?
22 23 24 |
# File 'lib/active_model_serializers/cached_serializer.rb', line 22 def cached? @klass.cache_enabled? end |
- (Boolean) fragment_cached?
26 27 28 |
# File 'lib/active_model_serializers/cached_serializer.rb', line 26 def fragment_cached? @klass.fragment_cache_enabled? end |
- (Object) object_cache_key
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
42 43 44 45 46 47 48 49 50 51 52 |
# File 'lib/active_model_serializers/cached_serializer.rb', line 42 def object_cache_key if @cached_serializer.object.respond_to?(:cache_key) @cached_serializer.object.cache_key elsif (cache_key = (@klass._cache_key || @klass.[:key])) object_time_safe = @cached_serializer.object.updated_at object_time_safe = object_time_safe.strftime('%Y%m%d%H%M%S%9N') if object_time_safe.respond_to?(:strftime) "#{cache_key}/#{@cached_serializer.object.id}-#{object_time_safe}" else fail UndefinedCacheKey, "#{@cached_serializer.object.class} must define #cache_key, or the 'key:' option must be passed into '#{@klass}.cache'" end end |