Skip to content

Commit 951fdf5

Browse files
committed
fix for Rails 7.1 caching
1 parent 100abbe commit 951fdf5

File tree

4 files changed

+148
-4
lines changed

4 files changed

+148
-4
lines changed

lib/active_support/cache/litecache.rb

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
require "delegate"
2+
require "active_support"
23
require "active_support/core_ext/enumerable"
34
require "active_support/core_ext/array/extract_options"
45
require "active_support/core_ext/numeric/time"
@@ -73,6 +74,14 @@ def stats
7374

7475
private
7576

77+
def serialize_entrys(entry, **options)
78+
Marshal.dump(entry)
79+
end
80+
81+
def deserialize_entrys(entry)
82+
Marshal.load(entry.to_s)
83+
end
84+
7685
# Read an entry from the cache.
7786
def read_entry(key, **options)
7887
deserialize_entry(@cache.get(key))
@@ -94,15 +103,15 @@ def write_entry(key, entry, **options)
94103
def write_multi_entries(entries, **options)
95104
return if entries.empty?
96105
entries.each_pair {|k,v| entries[k] = serialize_entry(v, **options)}
97-
expires_in = options[:expires_in].to_i
106+
expires_in = options[:expires_in].to_i if options[:expires_in]
98107
if options[:race_condition_ttl] && expires_in > 0 && !options[:raw]
99108
expires_in += 5.minutes
100109
end
101110
@cache.set_multi(entries, expires_in)
102111
end
103112

104113
def write_serialized_entry(key, payload, **options)
105-
expires_in = options[:expires_in].to_i
114+
expires_in = options[:expires_in].to_i if options[:expires_in]
106115
if options[:race_condition_ttl] && expires_in > 0 && !options[:raw]
107116
expires_in += 5.minutes
108117
end

lib/litestack/litecache.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -162,13 +162,13 @@ def delete(key)
162162
end
163163

164164
# increment an integer value by amount, optionally add an expiry value (in seconds)
165-
def increment(key, amount, expires_in = nil)
165+
def increment(key, amount=1, expires_in = nil)
166166
expires_in ||= @expires_in
167167
@conn.acquire { |cache| cache.stmts[:incrementer].execute!(key.to_s, amount, expires_in) }
168168
end
169169

170170
# decrement an integer value by amount, optionally add an expiry value (in seconds)
171-
def decrement(key, amount, expires_in = nil)
171+
def decrement(key, amount=1, expires_in = nil)
172172
increment(key, -amount, expires_in)
173173
end
174174

test/test_cache.rb

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
require "minitest/autorun"
2+
require_relative "../lib/litestack/litecache"
3+
4+
class TestCache < Minitest::Test
5+
def setup
6+
@cache = Litecache.new({path: ":memory:", sleep_interval: 1})
7+
@cache.clear
8+
end
9+
10+
def test_caceh_set
11+
@cache.set("key", "value")
12+
assert_equal "value", @cache.get("key")
13+
@cache.set("key", "new_value")
14+
assert_equal "new_value", @cache.get("key")
15+
end
16+
17+
def test_caceh_set_unless_exists
18+
@cache.set("key", "value")
19+
assert_equal "value", @cache.get("key")
20+
@cache.set_unless_exists("key", "new_value")
21+
assert_equal "value", @cache.get("key")
22+
end
23+
24+
def test_cache_set_multi
25+
data = {k1: "v1", k2: "v2", k3: "v3"}
26+
@cache.set_multi(data)
27+
data.keys.each do |key|
28+
assert_equal data[key], @cache.get(key)
29+
end
30+
end
31+
32+
def test_cache_get_multi
33+
data = {k1: "v1", k2: "v2", k3: "v3"}
34+
data.each_pair{|k, v| @cache.set(k, v) }
35+
results = @cache.get_multi(*data.keys)
36+
assert_equal data, results
37+
end
38+
39+
def test_cache_expiry
40+
@cache.set("key", "value", 1)
41+
assert_equal "value", @cache.get("key")
42+
sleep 1.1
43+
assert_nil @cache.get("key")
44+
end
45+
46+
def test_increment_decrement
47+
@cache.increment("key")
48+
assert_equal 1, @cache.get("key")
49+
@cache.increment("key", 5)
50+
assert_equal 6, @cache.get("key")
51+
@cache.decrement("key", 4)
52+
assert_equal 2, @cache.get("key")
53+
end
54+
55+
def test_increment_decrement_expiry
56+
@cache.increment("key", 2, 1)
57+
assert_equal 2, @cache.get("key")
58+
sleep 1.1
59+
@cache.increment("key", 5)
60+
assert_equal 5, @cache.get("key")
61+
end
62+
63+
end
64+

test/test_cache_rails.rb

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
require "minitest/autorun"
2+
require_relative "../lib/active_support/cache/litecache"
3+
4+
class TestCache < Minitest::Test
5+
def setup
6+
@cache = ActiveSupport::Cache::Litecache.new({path: ":memory:", sleep_interval: 1})
7+
@cache.clear
8+
end
9+
10+
def test_caceh_write
11+
@cache.write("key", "value")
12+
assert_equal "value", @cache.read("key")
13+
@cache.write("key", "new_value")
14+
assert_equal "new_value", @cache.read("key")
15+
end
16+
17+
def test_cache_fetch
18+
result = @cache.fetch("key") {"value"}
19+
assert_equal "value", result
20+
result = @cache.fetch("key") {"new_value"}
21+
assert_equal "value", result
22+
end
23+
24+
def test_cache_write_multi
25+
data = {k1: "v1", k2: "v2", k3: "v3"}
26+
@cache.write_multi(data)
27+
data.keys.each do |key|
28+
assert_equal data[key], @cache.read(key)
29+
end
30+
end
31+
32+
def test_cache_read_multi
33+
data = {k1: "v1", k2: "v2", k3: "v3"}
34+
data.each_pair{|k, v| @cache.write(k, v) }
35+
results = @cache.read_multi(*data.keys)
36+
assert_equal data, results
37+
end
38+
39+
def test_cache_write_read_multi
40+
data = {k1: "v1", k2: "v2", k3: "v3"}
41+
@cache.write_multi(data)
42+
results = @cache.read_multi(*data.keys)
43+
assert_equal data, results
44+
end
45+
46+
def test_cache_expiry
47+
@cache.write("key", "value", expires_at: 1.second.from_now)
48+
assert_equal "value", @cache.read("key")
49+
sleep 1.1
50+
assert_nil @cache.read("key")
51+
end
52+
53+
def test_increment_decrement
54+
@cache.increment("key")
55+
assert_equal 1, @cache.read("key")
56+
@cache.increment("key", 5)
57+
assert_equal 6, @cache.read("key")
58+
@cache.decrement("key", 4)
59+
assert_equal 2, @cache.read("key")
60+
end
61+
62+
def test_increment_decrement_expiry
63+
@cache.increment("key", 2, expires_at: 1.second.from_now)
64+
assert_equal 2, @cache.read("key")
65+
sleep 1.1
66+
@cache.increment("key", 5)
67+
assert_equal 5, @cache.read("key")
68+
end
69+
70+
end
71+

0 commit comments

Comments
 (0)