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:
Mark Abramov
2016-08-14 00:59:36 +03:00
committed by Benjamin Fleischer
parent 6de3f31b6e
commit 5f3bdcc87c
3 changed files with 45 additions and 1 deletions

View File

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