You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jclouds.apache.org by ga...@apache.org on 2016/05/20 23:06:19 UTC

jclouds git commit: Handle nested braces in UriTemplates.expand

Repository: jclouds
Updated Branches:
  refs/heads/master f46b38dd8 -> 981b882f5


Handle nested braces in UriTemplates.expand

This allows replacement of JSON-like payloads without using hacks like
percent-encoding braces.


Project: http://git-wip-us.apache.org/repos/asf/jclouds/repo
Commit: http://git-wip-us.apache.org/repos/asf/jclouds/commit/981b882f
Tree: http://git-wip-us.apache.org/repos/asf/jclouds/tree/981b882f
Diff: http://git-wip-us.apache.org/repos/asf/jclouds/diff/981b882f

Branch: refs/heads/master
Commit: 981b882f593a834b47d767c52d37b577404c0040
Parents: f46b38d
Author: Andrew Gaul <ga...@apache.org>
Authored: Fri May 20 09:24:02 2016 -0700
Committer: Andrew Gaul <ga...@apache.org>
Committed: Fri May 20 09:26:45 2016 -0700

----------------------------------------------------------------------
 .../main/java/org/jclouds/http/UriTemplates.java | 19 ++++++++++++++-----
 .../java/org/jclouds/http/UriTemplatesTest.java  |  4 ++++
 2 files changed, 18 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jclouds/blob/981b882f/core/src/main/java/org/jclouds/http/UriTemplates.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/jclouds/http/UriTemplates.java b/core/src/main/java/org/jclouds/http/UriTemplates.java
index db81dc7..77f6b80 100644
--- a/core/src/main/java/org/jclouds/http/UriTemplates.java
+++ b/core/src/main/java/org/jclouds/http/UriTemplates.java
@@ -44,17 +44,26 @@ public class UriTemplates {
       for (char c : Lists.charactersOf(template)) {
          switch (c) {
          case '{':
+            if (inVar) {
+                builder.append('{');
+                builder.append(var);
+                var.setLength(0);
+            }
             inVar = true;
             break;
          case '}':
-            inVar = false;
             String key = var.toString();
             Object value = variables.get(var.toString());
-            if (value != null)
-               builder.append(value);
-            else
-               builder.append('{').append(key).append('}');
+            if (inVar) {
+               if (value != null)
+                  builder.append(value);
+               else
+                  builder.append('{').append(key).append('}');
+            } else {
+               builder.append('}');
+            }
             var.setLength(0);
+            inVar = false;
             break;
          default:
             if (inVar)

http://git-wip-us.apache.org/repos/asf/jclouds/blob/981b882f/core/src/test/java/org/jclouds/http/UriTemplatesTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/jclouds/http/UriTemplatesTest.java b/core/src/test/java/org/jclouds/http/UriTemplatesTest.java
index fcaa38f..83c1f86 100644
--- a/core/src/test/java/org/jclouds/http/UriTemplatesTest.java
+++ b/core/src/test/java/org/jclouds/http/UriTemplatesTest.java
@@ -51,4 +51,8 @@ public class UriTemplatesTest {
    public void testMissingParamProceeds() {
       assertEquals(expand("/{user-dir}", ImmutableMap.of("user_dir", "foo")), "/{user-dir}");
    }
+
+   public void testJson() {
+      assertEquals(expand("{\"key\":\"{variable}\"}", ImmutableMap.of("variable", "value")), "{\"key\":\"value\"}");
+   }
 }