Skip to content

Commit a2268b6

Browse files
committed
Support expiration in Set
1 parent 0409623 commit a2268b6

File tree

3 files changed

+21
-3
lines changed

3 files changed

+21
-3
lines changed

lib/kredis/types.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -69,8 +69,8 @@ def unique_list(key, default: nil, typed: :string, limit: nil, config: :shared,
6969
type_from(UniqueList, config, key, after_change: after_change, default: default, typed: typed, limit: limit)
7070
end
7171

72-
def set(key, default: nil, typed: :string, config: :shared, after_change: nil)
73-
type_from(Set, config, key, after_change: after_change, default: default, typed: typed)
72+
def set(key, default: nil, typed: :string, config: :shared, after_change: nil, expires_in: nil)
73+
type_from(Set, config, key, after_change: after_change, default: default, typed: typed, expires_in: expires_in)
7474
end
7575

7676
def ordered_set(key, default: nil, typed: :string, limit: nil, config: :shared, after_change: nil)

lib/kredis/types/set.rb

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

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

67
proxying :smembers, :sadd, :srem, :multi, :del, :sismember, :scard, :spop, :exists?, :srandmember, :smove
78

@@ -16,7 +17,11 @@ def members
1617
alias to_a members
1718

1819
def add(*members)
19-
sadd types_to_strings(members, typed) if members.flatten.any?
20+
return unless members.flatten.any?
21+
22+
with_expiration do
23+
sadd types_to_strings(members, typed)
24+
end
2025
end
2126
alias << add
2227

test/types/set_test.rb

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

33
require "test_helper"
44
require "active_support/core_ext/object/inclusion"
5+
require "active_support/core_ext/integer"
56

67
class SetTest < ActiveSupport::TestCase
78
setup { @set = Kredis.set "myset" }
@@ -157,6 +158,18 @@ class SetTest < ActiveSupport::TestCase
157158
assert_equal [ 1, 2, 3, 5, 6, 7 ], @set.members
158159
end
159160

161+
test "add with expiration" do
162+
@set = Kredis.set "mylist", typed: :integer, expires_in: 1.second
163+
@set.add(%w[ 1 2 3 ])
164+
165+
sleep 0.7.seconds
166+
@set.add(%w[ 4 5 ])
167+
assert_equal [1, 2, 3, 4, 5], @set.members
168+
169+
sleep 0.5.seconds
170+
assert_equal [], @set.members
171+
end
172+
160173
test "remove with default" do
161174
@set = Kredis.set "mylist", default: -> () { %w[ 1 2 3 4 ] }
162175
@set.remove(%w[ 2 3 ])

0 commit comments

Comments
 (0)