提交 a712acc4 编写于 作者: S Santosh Wadghule

Fix forced cache miss for fetch.

- Raised an argument error if no block is passed to #fetch with
'force: true' option is set.
- Added tests for the same.
上级 38d6d412
* Raise an argument error if no block is passed to #fetch with option
`force: true` is set.
cache.fetch('today', force: true) # => ArgumentError: Missing block
*Santosh Wadghule*
* `ActiveSupport::Duration` supports weeks and hours.
[1.hour.inspect, 1.hour.value, 1.hour.parts]
......
......@@ -198,10 +198,16 @@ def mute
# cache.fetch('city') # => "Duckburgh"
#
# You may also specify additional options via the +options+ argument.
# Setting <tt>force: true</tt> will force a cache miss:
# Setting <tt>force: true</tt> will force a cache miss and return value of
# the block will be written to the cache under the given cache key.
#
# cache.write('today', 'Monday')
# cache.fetch('today', force: true) # => nil
# cache.fetch('today', force: true) { 'Tuesday' } # => 'Tuesday'
#
# It will raise an argument error if no block is passed to #fetch with
# option <tt>force: true</tt> is set.
#
# cache.fetch('today', force: true) # => ArgumentError: Missing block
#
# Setting <tt>:compress</tt> will store a large cache entry set by the call
# in a compressed format.
......@@ -292,6 +298,8 @@ def fetch(name, options = nil)
else
save_block_result_to_cache(name, options) { |_name| yield _name }
end
elsif options && options[:force]
raise ArgumentError, 'Missing block'
else
read(name, options)
end
......
......@@ -266,6 +266,20 @@ def test_fetch_with_cached_nil
end
end
def test_fetch_with_forced_cache_miss_with_block
@cache.write('foo', 'bar')
assert_equal 'foo_bar', @cache.fetch('foo', force: true) { 'foo_bar' }
end
def test_fetch_with_forced_cache_miss_without_block
@cache.write('foo', 'bar')
assert_raises(ArgumentError, 'Missing block') do
@cache.fetch('foo', force: true)
end
assert_equal 'bar', @cache.read('foo')
end
def test_should_read_and_write_hash
assert @cache.write('foo', {:a => "b"})
assert_equal({:a => "b"}, @cache.read('foo'))
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册