Skip to content

Commit bc86d50

Browse files
committed
Decrement participant count when overriding version
1 parent 0d1f43f commit bc86d50

File tree

2 files changed

+15
-0
lines changed

2 files changed

+15
-0
lines changed

lib/split/persistence/dual_adapter.rb

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,13 +41,26 @@ def [](key)
4141

4242
def []=(key, value)
4343
@logged_in_adapter[key] = value if @logged_in
44+
old_value = @logged_out_adapter[key]
4445
@logged_out_adapter[key] = value
46+
47+
decrement_participation(key, old_value) if decrement_participation?(old_value, value)
4548
end
4649

4750
def delete(key)
4851
@logged_in_adapter.delete(key)
4952
@logged_out_adapter.delete(key)
5053
end
54+
55+
private
56+
57+
def decrement_participation?(old_value, value)
58+
!old_value.nil? && !value.nil? && old_value != value
59+
end
60+
61+
def decrement_participation(key, value)
62+
Split.redis.hincrby("#{key}:#{value}", 'participant_count', -1)
63+
end
5164
end
5265
end
5366
end

spec/persistence/dual_adapter_spec.rb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
it '#[]=' do
2727
expect(logged_in_adapter_instance).to receive(:[]=).with('my_key', 'my_value')
2828
expect(logged_out_adapter_instance).to receive(:[]=).with('my_key', 'my_value')
29+
expect(logged_out_adapter_instance).to receive(:[]).with('my_key') { nil }
2930
subject['my_key'] = 'my_value'
3031
end
3132

@@ -60,6 +61,7 @@
6061
it '#[]=' do
6162
expect_any_instance_of(logged_in_adapter).not_to receive(:[]=)
6263
expect(logged_out_adapter_instance).to receive(:[]=).with('my_key', 'my_value')
64+
expect(logged_out_adapter_instance).to receive(:[]).with('my_key') { nil }
6365
subject['my_key'] = 'my_value'
6466
end
6567

0 commit comments

Comments
 (0)