mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
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.
This commit is contained in:
parent
38d6d4129b
commit
a712acc425
3 changed files with 31 additions and 2 deletions
|
@ -1,3 +1,10 @@
|
|||
* 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 @@ module ActiveSupport
|
|||
# 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 @@ module ActiveSupport
|
|||
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 @@ module CacheStoreBehavior
|
|||
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'))
|
||||
|
|
Loading…
Reference in a new issue