Repository: go-redis/redis
Pull request #1093 (2019-07-18 11:19:51)

Making LpushX and RpushX variadic


Patch:
diff --git a/commands.go b/commands.go
index 872c35c..710aef2 100644
--- a/commands.go
+++ b/commands.go
@@ -140,7 +140,7 @@ type Cmdable interface {
 	LLen(key string) *IntCmd
 	LPop(key string) *StringCmd
 	LPush(key string, values ...interface{}) *IntCmd
-	LPushX(key string, value interface{}) *IntCmd
+	LPushX(key string, values ...interface{}) *IntCmd
 	LRange(key string, start, stop int64) *StringSliceCmd
 	LRem(key string, count int64, value interface{}) *IntCmd
 	LSet(key string, index int64, value interface{}) *StatusCmd
@@ -148,7 +148,7 @@ type Cmdable interface {
 	RPop(key string) *StringCmd
 	RPopLPush(source, destination string) *StringCmd
 	RPush(key string, values ...interface{}) *IntCmd
-	RPushX(key string, value interface{}) *IntCmd
+	RPushX(key string, values ...interface{}) *IntCmd
 	SAdd(key string, members ...interface{}) *IntCmd
 	SCard(key string) *IntCmd
 	SDiff(keys ...string) *StringSliceCmd
@@ -1087,8 +1087,12 @@ func (c cmdable) LPush(key string, values ...interface{}) *IntCmd {
 	return cmd
 }
 
-func (c cmdable) LPushX(key string, value interface{}) *IntCmd {
-	cmd := NewIntCmd("lpushx", key, value)
+func (c cmdable) LPushX(key string, values ...interface{}) *IntCmd {
+	args := make([]interface{}, 2, 2+len(values))
+	args[0] = "lpushx"
+	args[1] = key
+	args = appendArgs(args, values)
+	cmd := NewIntCmd(args...)
 	c(cmd)
 	return cmd
 }
@@ -1149,8 +1153,12 @@ func (c cmdable) RPush(key string, values ...interface{}) *IntCmd {
 	return cmd
 }
 
-func (c cmdable) RPushX(key string, value interface{}) *IntCmd {
-	cmd := NewIntCmd("rpushx", key, value)
+func (c cmdable) RPushX(key string, values ...interface{}) *IntCmd {
+	args := make([]interface{}, 2, 2+len(values))
+	args[0] = "rpushx"
+	args[1] = key
+	args = appendArgs(args, values)
+	cmd := NewIntCmd(args...)
 	c(cmd)
 	return cmd
 }


Test patch:
diff --git a/commands_test.go b/commands_test.go
index 13c636b..7fa9b73 100644
--- a/commands_test.go
+++ b/commands_test.go
@@ -1652,6 +1652,14 @@ var _ = Describe("Commands", func() {
 			Expect(lPushX.Err()).NotTo(HaveOccurred())
 			Expect(lPushX.Val()).To(Equal(int64(2)))
 
+			lPush = client.LPush("list1", "three")
+			Expect(lPush.Err()).NotTo(HaveOccurred())
+			Expect(lPush.Val()).To(Equal(int64(1)))
+
+			lPushX = client.LPushX("list1", "two", "one")
+			Expect(lPushX.Err()).NotTo(HaveOccurred())
+			Expect(lPushX.Val()).To(Equal(int64(3)))
+
 			lPushX = client.LPushX("list2", "Hello")
 			Expect(lPushX.Err()).NotTo(HaveOccurred())
 			Expect(lPushX.Val()).To(Equal(int64(0)))
@@ -1660,6 +1668,10 @@ var _ = Describe("Commands", func() {
 			Expect(lRange.Err()).NotTo(HaveOccurred())
 			Expect(lRange.Val()).To(Equal([]string{"Hello", "World"}))
 
+			lRange = client.LRange("list1", 0, -1)
+			Expect(lRange.Err()).NotTo(HaveOccurred())
+			Expect(lRange.Val()).To(Equal([]string{"one", "two", "three"}))
+
 			lRange = client.LRange("list2", 0, -1)
 			Expect(lRange.Err()).NotTo(HaveOccurred())
 			Expect(lRange.Val()).To(Equal([]string{}))
@@ -1808,6 +1820,14 @@ var _ = Describe("Commands", func() {
 			Expect(rPushX.Err()).NotTo(HaveOccurred())
 			Expect(rPushX.Val()).To(Equal(int64(2)))
 
+			rPush = client.RPush("list1", "one")
+			Expect(rPush.Err()).NotTo(HaveOccurred())
+			Expect(rPush.Val()).To(Equal(int64(1)))
+
+			rPushX = client.RPushX("list1", "two", "three")
+			Expect(rPushX.Err()).NotTo(HaveOccurred())
+			Expect(rPushX.Val()).To(Equal(int64(3)))
+
 			rPushX = client.RPushX("list2", "World")
 			Expect(rPushX.Err()).NotTo(HaveOccurred())
 			Expect(rPushX.Val()).To(Equal(int64(0)))
@@ -1816,6 +1836,10 @@ var _ = Describe("Commands", func() {
 			Expect(lRange.Err()).NotTo(HaveOccurred())
 			Expect(lRange.Val()).To(Equal([]string{"Hello", "World"}))
 
+			lRange = client.LRange("list1", 0, -1)
+			Expect(lRange.Err()).NotTo(HaveOccurred())
+			Expect(lRange.Val()).To(Equal([]string{"one", "two", "three"}))
+
 			lRange = client.LRange("list2", 0, -1)
 			Expect(lRange.Err()).NotTo(HaveOccurred())
 			Expect(lRange.Val()).To(Equal([]string{}))