From 6a579ac16e7dc4b300caf6629a4ac1e2f2292b49 Mon Sep 17 00:00:00 2001 From: Brian Sam-Bodden Date: Tue, 20 Jul 2021 16:52:14 -0700 Subject: [PATCH 1/3] feat: allow client to be instantiated with a Jedis instance --- src/main/java/com/redislabs/modules/rejson/JReJSON.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/redislabs/modules/rejson/JReJSON.java b/src/main/java/com/redislabs/modules/rejson/JReJSON.java index af05136..c0ee84d 100644 --- a/src/main/java/com/redislabs/modules/rejson/JReJSON.java +++ b/src/main/java/com/redislabs/modules/rejson/JReJSON.java @@ -100,6 +100,7 @@ public byte[] getRaw() { } private Pool client; + private Jedis jedis; /** * Creates a client to the local machine @@ -126,6 +127,10 @@ public JReJSON(String host, int port) { public JReJSON(Pool jedis) { this.client = jedis; } + + public JReJSON(Jedis jedis) { + this.jedis = jedis; + } /** * Helper to check for an OK reply @@ -523,7 +528,7 @@ public static Class type(Jedis conn, String key, Path... path) { } private Jedis getConnection() { - return this.client.getResource(); + return jedis != null ? jedis : this.client.getResource(); } /** From 92aed4f81f938f0e4c8de42010048fb10f03740c Mon Sep 17 00:00:00 2001 From: Brian Sam-Bodden Date: Thu, 28 Oct 2021 08:11:14 -0700 Subject: [PATCH 2/3] feat: allow for GsonBuilder (Gson factory) to be set on the client --- .../com/redislabs/modules/rejson/JReJSON.java | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/redislabs/modules/rejson/JReJSON.java b/src/main/java/com/redislabs/modules/rejson/JReJSON.java index c0ee84d..1d4dd77 100644 --- a/src/main/java/com/redislabs/modules/rejson/JReJSON.java +++ b/src/main/java/com/redislabs/modules/rejson/JReJSON.java @@ -35,6 +35,7 @@ import java.util.stream.Stream; import com.google.gson.Gson; +import com.google.gson.GsonBuilder; import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisPool; @@ -48,7 +49,13 @@ */ public class JReJSON { - private static final Gson gson = new Gson(); + private GsonBuilder gsonBuilder = new GsonBuilder(); + private Gson gson = gsonBuilder.create(); + + public void setGsonBuilder(GsonBuilder gsonBuilder) { + this.gsonBuilder = gsonBuilder; + this.gson = gsonBuilder.create(); + } private enum Command implements ProtocolCommand { DEL("JSON.DEL"), @@ -127,7 +134,7 @@ public JReJSON(String host, int port) { public JReJSON(Pool jedis) { this.client = jedis; } - + public JReJSON(Jedis jedis) { this.jedis = jedis; } @@ -394,6 +401,8 @@ public Class type(String key, Path path) { } } + private static final Gson staticGson = new Gson(); + /** * Deletes a path * @param conn the Jedis connection @@ -441,7 +450,7 @@ public static Object get(Jedis conn, String key, Path... paths) { String rep = conn.getClient().getBulkReply(); conn.close(); - return gson.fromJson(rep, Object.class); + return staticGson.fromJson(rep, Object.class); } /** @@ -460,7 +469,7 @@ public static void set(Jedis conn, String key, Object object, ExistenceModifier args.add(SafeEncoder.encode(key)); args.add(SafeEncoder.encode(getSingleOptionalPath(path).toString())); - args.add(SafeEncoder.encode(gson.toJson(object))); + args.add(SafeEncoder.encode(staticGson.toJson(object))); if (ExistenceModifier.DEFAULT != flag) { args.add(flag.getRaw()); } From e39cad5fa0c9b725e10dd500ca17ba46fd833865 Mon Sep 17 00:00:00 2001 From: Brian Sam-Bodden Date: Sat, 30 Oct 2021 11:36:37 -0700 Subject: [PATCH 3/3] test: constructor test with Jedis instance, test for custom GsonBuilder --- .../redislabs/modules/rejson/ClientTest.java | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/src/test/java/com/redislabs/modules/rejson/ClientTest.java b/src/test/java/com/redislabs/modules/rejson/ClientTest.java index 877847c..6c1ee89 100644 --- a/src/test/java/com/redislabs/modules/rejson/ClientTest.java +++ b/src/test/java/com/redislabs/modules/rejson/ClientTest.java @@ -46,6 +46,7 @@ import com.google.gson.Gson; import com.google.gson.JsonArray; import com.google.gson.JsonObject; +import com.google.gson.GsonBuilder; import redis.clients.jedis.Jedis; import redis.clients.jedis.exceptions.JedisDataException; @@ -156,6 +157,16 @@ public void noArgsConstructorReturnsClientToLocalMachine() { defaultClient.set("null", null, Path.ROOT_PATH); assertNull(explicitLocalClient.get("null", String.class, Path.ROOT_PATH)); } + + @Test + public void testJedisConstructor() { + final JReJSON defaultClient = new JReJSON(); + final JReJSON withJedis = new JReJSON(jedis); + + // naive set with a path + defaultClient.set("null", null, Path.ROOT_PATH); + assertNull(withJedis.get("null", String.class, Path.ROOT_PATH)); + } @Test public void basicSetGetShouldSucceed() { @@ -568,4 +579,17 @@ public void testStringLen() { client.set( "str", "foo", Path.ROOT_PATH); assertEquals(Long.valueOf(3L), client.strLen( "str", Path.ROOT_PATH)); } + + @Test + public void testPassingCustomGsonBuilder() { + final JReJSON defaultClient = new JReJSON(); + final JReJSON customizedClient = new JReJSON(); + final GsonBuilder builder = new GsonBuilder(); + + customizedClient.setGsonBuilder(builder); + + // naive set with a path + defaultClient.set("null", null, Path.ROOT_PATH); + assertNull(customizedClient.get("null", String.class, Path.ROOT_PATH)); + } }