mirror of
https://github.com/ditkrg/active_model_serializers.git
synced 2026-01-25 15:23:06 +00:00
Use ActiveSupport::Cache.expand_cache_key for cache key expansions (#1878)
* Use ActiveSupport::Cache.expand_cache_key for cache key expansions
This commit is contained in:
committed by
Benjamin Fleischer
parent
6de3f31b6e
commit
5f3bdcc87c
@@ -4,6 +4,30 @@ require 'tempfile'
|
||||
|
||||
module ActiveModelSerializers
|
||||
class CacheTest < ActiveSupport::TestCase
|
||||
# Instead of a primitive cache key (i.e. a string), this class
|
||||
# returns a list of objects that require to be expanded themselves.
|
||||
class AuthorWithExpandableCacheElements < Author
|
||||
# For the test purposes it's important that #to_s for HasCacheKey differs
|
||||
# between instances, hence not a Struct.
|
||||
class HasCacheKey
|
||||
attr_reader :cache_key
|
||||
def initialize(cache_key)
|
||||
@cache_key = cache_key
|
||||
end
|
||||
|
||||
def to_s
|
||||
"HasCacheKey##{object_id}"
|
||||
end
|
||||
end
|
||||
|
||||
def cache_key
|
||||
[
|
||||
HasCacheKey.new(name),
|
||||
HasCacheKey.new(id)
|
||||
]
|
||||
end
|
||||
end
|
||||
|
||||
class UncachedAuthor < Author
|
||||
# To confirm cache_key is set using updated_at and cache_key option passed to cache
|
||||
undef_method :cache_key
|
||||
@@ -106,6 +130,20 @@ module ActiveModelSerializers
|
||||
assert_equal(uncached_author_serializer.attributes.to_json, cache_store.fetch(key).to_json)
|
||||
end
|
||||
|
||||
def test_cache_key_expansion
|
||||
author = AuthorWithExpandableCacheElements.new(id: 10, name: 'hello')
|
||||
same_author = AuthorWithExpandableCacheElements.new(id: 10, name: 'hello')
|
||||
diff_author = AuthorWithExpandableCacheElements.new(id: 11, name: 'hello')
|
||||
|
||||
author_serializer = AuthorSerializer.new(author)
|
||||
same_author_serializer = AuthorSerializer.new(same_author)
|
||||
diff_author_serializer = AuthorSerializer.new(diff_author)
|
||||
adapter = AuthorSerializer.serialization_adapter_instance
|
||||
|
||||
assert_equal(author_serializer.cache_key(adapter), same_author_serializer.cache_key(adapter))
|
||||
refute_equal(author_serializer.cache_key(adapter), diff_author_serializer.cache_key(adapter))
|
||||
end
|
||||
|
||||
def test_default_cache_key_fallback
|
||||
render_object_with_cache(@comment)
|
||||
key = "#{@comment.cache_key}/#{adapter.cache_key}"
|
||||
|
||||
Reference in New Issue
Block a user