Skip to content

Commit f907aee

Browse files
authored
Set flag expiration on attribute specification (#52)
1 parent 8dd8974 commit f907aee

File tree

4 files changed

+15
-5
lines changed

4 files changed

+15
-5
lines changed

lib/kredis/attributes.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,8 @@ def kredis_datetime(name, key: nil, config: :shared, after_change: nil, expires_
2222
kredis_connection_with __method__, name, key, config: config, after_change: after_change, expires_in: expires_in
2323
end
2424

25-
def kredis_flag(name, key: nil, config: :shared, after_change: nil)
26-
kredis_connection_with __method__, name, key, config: config, after_change: after_change
25+
def kredis_flag(name, key: nil, config: :shared, after_change: nil, expires_in: nil)
26+
kredis_connection_with __method__, name, key, config: config, after_change: after_change, expires_in: expires_in
2727

2828
define_method("#{name}?") do
2929
send(name).marked?

lib/kredis/types.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,8 +47,8 @@ def cycle(key, values:, expires_in: nil, config: :shared, after_change: nil)
4747
type_from(Cycle, config, key, after_change: after_change, values: values, expires_in: expires_in)
4848
end
4949

50-
def flag(key, config: :shared, after_change: nil)
51-
type_from(Flag, config, key, after_change: after_change)
50+
def flag(key, config: :shared, after_change: nil, expires_in: nil)
51+
type_from(Flag, config, key, after_change: after_change, expires_in: expires_in)
5252
end
5353

5454
def enum(key, values:, default:, config: :shared, after_change: nil)

lib/kredis/types/flag.rb

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
class Kredis::Types::Flag < Kredis::Types::Proxying
22
proxying :set, :exists?, :del
33

4+
attr_accessor :expires_in
5+
46
def mark(expires_in: nil)
5-
set 1, ex: expires_in
7+
set 1, ex: expires_in || self.expires_in
68
end
79

810
def marked?

test/attributes_test.rb

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ class Person
1111
kredis_list :names_with_custom_key, key: ->(p) { "person:#{p.id}:names_customized" }
1212
kredis_unique_list :skills, limit: 2
1313
kredis_flag :special
14+
kredis_flag :temporary_special, expires_in: 1.second
1415
kredis_string :address
1516
kredis_integer :age
1617
kredis_decimal :salary
@@ -236,4 +237,11 @@ def suddenly_implemented_person.id; 8; end
236237
sleep 1.1.seconds
237238
end
238239
end
240+
241+
test "expiring flag" do
242+
@person.temporary_special.mark
243+
assert_changes "@person.temporary_special.marked?", from: true, to: false do
244+
sleep 1.1.seconds
245+
end
246+
end
239247
end

0 commit comments

Comments
 (0)