aboutsummaryrefslogtreecommitdiffstats
path: root/activesupport
diff options
context:
space:
mode:
authorNoah Hendrix <noahhendrix@gmail.com>2012-10-23 00:04:42 -0700
committerNoah Hendrix <noahhendrix@gmail.com>2012-10-23 00:04:42 -0700
commit81b711256591874b92683e55dc405286eb6df7a6 (patch)
tree94e91619aa8bd8161da6077098e2d269d76ae4f0 /activesupport
parent40496430d5825f55d1b8aa063f6642b82f6c65d5 (diff)
downloadrails-81b711256591874b92683e55dc405286eb6df7a6.tar.gz
rails-81b711256591874b92683e55dc405286eb6df7a6.tar.bz2
rails-81b711256591874b92683e55dc405286eb6df7a6.zip
pass the key to the block in cache.fetch on misses
Diffstat (limited to 'activesupport')
-rw-r--r--activesupport/lib/active_support/cache.rb10
-rw-r--r--activesupport/test/caching_test.rb9
2 files changed, 12 insertions, 7 deletions
diff --git a/activesupport/lib/active_support/cache.rb b/activesupport/lib/active_support/cache.rb
index 732ab4b7df..9a53870b3d 100644
--- a/activesupport/lib/active_support/cache.rb
+++ b/activesupport/lib/active_support/cache.rb
@@ -182,10 +182,10 @@ module ActiveSupport
# the cache with the given key, then that data is returned.
#
# If there is no such data in the cache (a cache miss), then +nil+ will be
- # returned. However, if a block has been passed, that block will be run
- # in the event of a cache miss. The return value of the block will be
- # written to the cache under the given cache key, and that return value
- # will be returned.
+ # returned. However, if a block has been passed, that block will be passed
+ # the key and executed in the event of a cache miss. The return value of the
+ # block will be written to the cache under the given cache key, and that
+ # return value will be returned.
#
# cache.write('today', 'Monday')
# cache.fetch('today') # => "Monday"
@@ -300,7 +300,7 @@ module ActiveSupport
entry.value
else
result = instrument(:generate, name, options) do |payload|
- yield
+ yield(name)
end
write(name, result, options)
result
diff --git a/activesupport/test/caching_test.rb b/activesupport/test/caching_test.rb
index 9f76f4c90b..318d51767d 100644
--- a/activesupport/test/caching_test.rb
+++ b/activesupport/test/caching_test.rb
@@ -83,7 +83,7 @@ class CacheKeyTest < ActiveSupport::TestCase
def test_expand_cache_key_of_true
assert_equal 'true', ActiveSupport::Cache.expand_cache_key(true)
end
-
+
def test_expand_cache_key_of_array_like_object
assert_equal 'foo/bar/baz', ActiveSupport::Cache.expand_cache_key(%w{foo bar baz}.to_enum)
end
@@ -197,6 +197,11 @@ module CacheStoreBehavior
assert_equal 'baz', @cache.fetch('foo') { 'baz' }
end
+ def test_fetch_with_cache_miss_passes_key_to_block
+ @cache.expects(:write).with('foo', 3, @cache.options)
+ assert_equal 3, @cache.fetch('foo') { |key| key.length }
+ end
+
def test_fetch_with_forced_cache_miss
@cache.write('foo', 'bar')
@cache.expects(:read).never
@@ -594,7 +599,7 @@ class FileStoreTest < ActiveSupport::TestCase
assert_equal "views/index?id=1", @cache_with_pathname.send(:file_path_key, key)
end
- # Test that generated cache keys are short enough to have Tempfile stuff added to them and
+ # Test that generated cache keys are short enough to have Tempfile stuff added to them and
# remain valid
def test_filename_max_size
key = "#{'A' * ActiveSupport::Cache::FileStore::FILENAME_MAX_SIZE}"