diff options
author | Jason Lee <huacnlee@gmail.com> | 2018-03-21 14:16:00 +0800 |
---|---|---|
committer | Jason Lee <huacnlee@gmail.com> | 2018-03-21 14:16:00 +0800 |
commit | 4e13a364a67e02ed0b3b8f69bac84d69632f58f6 (patch) | |
tree | da4aec84d75b3859df9400efb963aa9afaea218e | |
parent | fab6ded8f299d51593f4d68f4f9b7b03b44aa2c3 (diff) | |
download | rails-4e13a364a67e02ed0b3b8f69bac84d69632f58f6.tar.gz rails-4e13a364a67e02ed0b3b8f69bac84d69632f58f6.tar.bz2 rails-4e13a364a67e02ed0b3b8f69bac84d69632f58f6.zip |
Fix Cache `read_multi` with local_cache return values.
It should returns raw value, not instance of `ActiveSupport::Cache::Entry`.
-rw-r--r-- | activesupport/lib/active_support/cache/strategy/local_cache.rb | 9 | ||||
-rw-r--r-- | activesupport/test/cache/behaviors/local_cache_behavior.rb | 12 |
2 files changed, 20 insertions, 1 deletions
diff --git a/activesupport/lib/active_support/cache/strategy/local_cache.rb b/activesupport/lib/active_support/cache/strategy/local_cache.rb index e17308f83e..39b32fc7f6 100644 --- a/activesupport/lib/active_support/cache/strategy/local_cache.rb +++ b/activesupport/lib/active_support/cache/strategy/local_cache.rb @@ -55,7 +55,14 @@ module ActiveSupport end def read_multi_entries(keys, options) - Hash[keys.map { |name| [name, read_entry(name, options)] }.keep_if { |_name, value| value }] + values = {} + + keys.each do |name| + entry = read_entry(name, options) + values[name] = entry.value if entry + end + + values end def write_entry(key, value, options) diff --git a/activesupport/test/cache/behaviors/local_cache_behavior.rb b/activesupport/test/cache/behaviors/local_cache_behavior.rb index 363f2d1084..baa38ba6ac 100644 --- a/activesupport/test/cache/behaviors/local_cache_behavior.rb +++ b/activesupport/test/cache/behaviors/local_cache_behavior.rb @@ -129,6 +129,18 @@ module LocalCacheBehavior end end + def test_local_cache_of_read_multi + @cache.with_local_cache do + @cache.write("foo", "foo", raw: true) + @cache.write("bar", "bar", raw: true) + values = @cache.read_multi("foo", "bar") + assert_equal "foo", @cache.read("foo") + assert_equal "bar", @cache.read("bar") + assert_equal "foo", values["foo"] + assert_equal "bar", values["bar"] + end + end + def test_middleware app = lambda { |env| result = @cache.write("foo", "bar") |