From 8fa0f99432dac901bdbf761464d04e7154b058f6 Mon Sep 17 00:00:00 2001 From: Chris Oliver Date: Fri, 3 Dec 2021 08:46:46 -0600 Subject: [PATCH] Deduplicate new elements for unique lists --- lib/kredis/types/unique_list.rb | 10 ++++++++-- test/types/unique_list_test.rb | 10 ++++++++++ 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/lib/kredis/types/unique_list.rb b/lib/kredis/types/unique_list.rb index 669923f..1da5691 100644 --- a/lib/kredis/types/unique_list.rb +++ b/lib/kredis/types/unique_list.rb @@ -5,19 +5,25 @@ class Kredis::Types::UniqueList < Kredis::Types::List attr_accessor :typed, :limit def prepend(elements) + elements = Array.wrap(elements).flatten.uniq + return if elements.empty? + multi do remove elements super ltrim 0, (limit - 1) if limit - end if Array(elements).flatten.any? + end end def append(elements) + elements = Array.wrap(elements).flatten.uniq + return if elements.empty? + multi do remove elements super ltrim -limit, -1 if limit - end if Array(elements).flatten.any? + end end alias << append end diff --git a/test/types/unique_list_test.rb b/test/types/unique_list_test.rb index ee46a75..17762db 100644 --- a/test/types/unique_list_test.rb +++ b/test/types/unique_list_test.rb @@ -63,4 +63,14 @@ class UniqueListTest < ActiveSupport::TestCase @list.prepend(%w[ 6 7 8 ]) assert_equal %w[ 8 7 6 5 4 ], @list.elements end + + test "appending array with duplicates" do + @list.append(%w[ 1 1 1 ]) + assert_equal %w[ 1 ], @list.elements + end + + test "prepending array with duplicates" do + @list.prepend(%w[ 1 1 1 ]) + assert_equal %w[ 1 ], @list.elements + end end