1
0
Fork 0
mirror of https://github.com/rails/rails.git synced 2022-11-09 12:12:34 -05:00

Array with single item correctly uses cache_key

This commit is contained in:
Graham Turner 2018-09-27 14:58:29 -04:00
parent 0ece3911cc
commit d5b57c890e
2 changed files with 50 additions and 1 deletions

View file

@ -647,7 +647,7 @@ module ActiveSupport
if key.size > 1
key = key.collect { |element| expanded_key(element) }
else
key = key.first
key = expanded_key(key.first)
end
when Hash
key = key.sort_by { |k, _| k.to_s }.collect { |k, v| "#{k}=#{v}" }

View file

@ -290,6 +290,55 @@ module CacheStoreBehavior
assert_equal "bar", @cache.read("fu/foo")
end
InstanceTest = Struct.new(:name, :id) do
def cache_key
"#{name}/#{id}"
end
def to_param
"hello"
end
end
def test_array_with_single_instance_as_cache_key_uses_cache_key_method
test_instance_one = InstanceTest.new("test", 1)
test_instance_two = InstanceTest.new("test", 2)
@cache.write([test_instance_one], "one")
@cache.write([test_instance_two], "two")
assert_equal "one", @cache.read([test_instance_one])
assert_equal "two", @cache.read([test_instance_two])
end
def test_array_with_multiple_instances_as_cache_key_uses_cache_key_method
test_instance_one = InstanceTest.new("test", 1)
test_instance_two = InstanceTest.new("test", 2)
test_instance_three = InstanceTest.new("test", 3)
@cache.write([test_instance_one, test_instance_three], "one")
@cache.write([test_instance_two, test_instance_three], "two")
assert_equal "one", @cache.read([test_instance_one, test_instance_three])
assert_equal "two", @cache.read([test_instance_two, test_instance_three])
end
def test_format_of_expanded_key_for_single_instance
test_instance_one = InstanceTest.new("test", 1)
expanded_key = @cache.send(:expanded_key, test_instance_one)
assert_equal expanded_key, test_instance_one.cache_key
end
def test_format_of_expanded_key_for_single_instance_in_array
test_instance_one = InstanceTest.new("test", 1)
expanded_key = @cache.send(:expanded_key, [test_instance_one])
assert_equal expanded_key, test_instance_one.cache_key
end
def test_hash_as_cache_key
@cache.write({ foo: 1, fu: 2 }, "bar")
assert_equal "bar", @cache.read("foo=1/fu=2")