Skip to content

Commit ea46a00

Browse files
Merge pull request rails#50192 from sbfaulkner/memory-store-unless-exist
Fix MemoryStore#write with unless_exist and namespace
2 parents 6093281 + 701377c commit ea46a00

File tree

2 files changed

+23
-14
lines changed

2 files changed

+23
-14
lines changed

activesupport/lib/active_support/cache/memory_store.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -210,7 +210,7 @@ def read_entry(key, **options)
210210
def write_entry(key, entry, **options)
211211
payload = serialize_entry(entry, **options)
212212
synchronize do
213-
return false if options[:unless_exist] && exist?(key)
213+
return false if options[:unless_exist] && exist?(key, namespace: nil)
214214

215215
old_payload = @data[key]
216216
if old_payload

activesupport/test/cache/stores/memory_store_test.rb

Lines changed: 22 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,28 @@ def test_nil_coder_bypasses_mutation_safeguard
6161
assert_same value, @cache.read("key")
6262
end
6363

64+
def test_write_with_unless_exist
65+
assert_equal true, @cache.write(1, "aaaaaaaaaa")
66+
assert_equal false, @cache.write(1, "aaaaaaaaaa", unless_exist: true)
67+
@cache.write(1, nil)
68+
assert_equal false, @cache.write(1, "aaaaaaaaaa", unless_exist: true)
69+
end
70+
71+
def test_namespaced_write_with_unless_exist
72+
namespaced_cache = lookup_store(expires_in: 60, namespace: "foo")
73+
74+
assert_equal true, namespaced_cache.write(1, "aaaaaaaaaa")
75+
assert_equal false, namespaced_cache.write(1, "aaaaaaaaaa", unless_exist: true)
76+
namespaced_cache.write(1, nil)
77+
assert_equal false, namespaced_cache.write(1, "aaaaaaaaaa", unless_exist: true)
78+
end
79+
80+
def test_write_expired_value_with_unless_exist
81+
assert_equal true, @cache.write(1, "aaaa", expires_in: 1.second)
82+
travel 2.seconds
83+
assert_equal true, @cache.write(1, "bbbb", expires_in: 1.second, unless_exist: true)
84+
end
85+
6486
private
6587
def compression_always_disabled_by_default?
6688
true
@@ -187,17 +209,4 @@ def test_cache_different_object_ids_string
187209
assert_not_equal item.object_id, read_item.object_id
188210
assert_not_equal read_item.object_id, @cache.read(key).object_id
189211
end
190-
191-
def test_write_with_unless_exist
192-
assert_equal true, @cache.write(1, "aaaaaaaaaa")
193-
assert_equal false, @cache.write(1, "aaaaaaaaaa", unless_exist: true)
194-
@cache.write(1, nil)
195-
assert_equal false, @cache.write(1, "aaaaaaaaaa", unless_exist: true)
196-
end
197-
198-
def test_write_expired_value_with_unless_exist
199-
assert_equal true, @cache.write(1, "aaaa", expires_in: 1.second)
200-
travel 2.seconds
201-
assert_equal true, @cache.write(1, "bbbb", expires_in: 1.second, unless_exist: true)
202-
end
203212
end

0 commit comments

Comments
 (0)