Skip to content

Commit 69081d6

Browse files
committed
Support expiration in OrderedSet
1 parent 5397a6e commit 69081d6

File tree

3 files changed

+19
-5
lines changed

3 files changed

+19
-5
lines changed

lib/kredis/types.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -73,8 +73,8 @@ def set(key, default: nil, typed: :string, config: :shared, after_change: nil, e
7373
type_from(Set, config, key, after_change: after_change, default: default, typed: typed, expires_in: expires_in)
7474
end
7575

76-
def ordered_set(key, default: nil, typed: :string, limit: nil, config: :shared, after_change: nil)
77-
type_from(OrderedSet, config, key, after_change: after_change, default: default, typed: typed, limit: limit)
76+
def ordered_set(key, default: nil, typed: :string, limit: nil, config: :shared, after_change: nil, expires_in: nil)
77+
type_from(OrderedSet, config, key, after_change: after_change, default: default, typed: typed, limit: limit, expires_in: expires_in)
7878
end
7979

8080
def slot(key, config: :shared, after_change: nil)

lib/kredis/types/ordered_set.rb

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
class Kredis::Types::OrderedSet < Kredis::Types::Proxying
44
prepend Kredis::DefaultValues
5+
include Kredis::Expiration
56

67
proxying :multi, :zrange, :zrem, :zadd, :zremrangebyrank, :zcard, :exists?, :del, :zscore
78

@@ -53,9 +54,11 @@ def insert(elements, prepending: false)
5354
[ score, element ]
5455
end
5556

56-
multi do
57-
zadd(elements_with_scores)
58-
trim(from_beginning: prepending)
57+
with_expiration do
58+
multi do
59+
zadd(elements_with_scores)
60+
trim(from_beginning: prepending)
61+
end
5962
end
6063
end
6164

test/types/ordered_set_test.rb

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
# frozen_string_literal: true
22

33
require "test_helper"
4+
require "active_support/core_ext/integer"
45

56
class OrderedSetTest < ActiveSupport::TestCase
67
setup { @set = Kredis.ordered_set "ordered-set", limit: 5 }
@@ -31,6 +32,16 @@ class OrderedSetTest < ActiveSupport::TestCase
3132
assert_equal thousand_elements, @set.elements
3233
end
3334

35+
test "append with expiry" do
36+
@set = Kredis.ordered_set "ordered-set", limit: 5, expires_in: 1.second
37+
38+
@set.append(%w[ 1 2 3 ])
39+
assert_equal %w[ 1 2 3 ], @set.elements
40+
41+
sleep 1.1
42+
assert @set.elements.empty?
43+
end
44+
3445
test "prepend" do
3546
@set.prepend(%w[ 1 2 3 ])
3647
@set.prepend(%w[ 1 2 3 4 ])

0 commit comments

Comments
 (0)