From 4cde5cdf904e70260798767d876f6f057efd8c84 Mon Sep 17 00:00:00 2001 From: Naveen Date: Wed, 16 Sep 2015 11:18:19 -0400 Subject: [PATCH 1/3] Fix for Upload to Github releases stopped working #894 Fix for Upload to Github releases stopped working #894. The ExpandUriTemplate could handle only one parameter which is the bug. --- Octokit.Tests/Helpers/StringExtensionsTests.cs | 4 +++- Octokit/Helpers/StringExtensions.cs | 18 ++++++++++++------ 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/Octokit.Tests/Helpers/StringExtensionsTests.cs b/Octokit.Tests/Helpers/StringExtensionsTests.cs index 0d363272..0b7171db 100644 --- a/Octokit.Tests/Helpers/StringExtensionsTests.cs +++ b/Octokit.Tests/Helpers/StringExtensionsTests.cs @@ -57,9 +57,11 @@ namespace Octokit.Tests.Helpers [InlineData("https://host.com/path?name=other", "https://host.com/path?name=other")] [InlineData("https://host.com/path?name=example name.txt", "https://host.com/path{?name}")] [InlineData("https://host.com/path", "https://host.com/path{?other}")] + [InlineData("https://host.com/path?name=example name.txt,label=labeltext", "https://host.com/path{?name,label}")] + [InlineData("https://host.com/path?name=example name.txt,label=labeltext", "https://host.com/path{?name,label,other}")] public void ExpandsUriTemplates(string expected, string template) { - Assert.Equal(expected, template.ExpandUriTemplate(new { name = "example name.txt" }).ToString()); + Assert.Equal(expected, template.ExpandUriTemplate(new { name = "example name.txt",label="labeltext" }).ToString()); } } } diff --git a/Octokit/Helpers/StringExtensions.cs b/Octokit/Helpers/StringExtensions.cs index 670eddf2..199d2dd5 100644 --- a/Octokit/Helpers/StringExtensions.cs +++ b/Octokit/Helpers/StringExtensions.cs @@ -48,14 +48,20 @@ namespace Octokit public static Uri ExpandUriTemplate(this string template, object values) { var optionalQueryStringMatch = _optionalQueryStringRegex.Match(template); - if(optionalQueryStringMatch.Success) + if (optionalQueryStringMatch.Success) { - var expansion = ""; - var parameterName = optionalQueryStringMatch.Groups[1].Value; - var parameterProperty = values.GetType().GetProperty(parameterName); - if(parameterProperty != null) + var expansion = string.Empty; + var parameters = optionalQueryStringMatch.Groups[1].Value.Split(new char[] { ',' }); + + foreach (var parameter in parameters) { - expansion = "?" + parameterName + "=" + Uri.EscapeDataString("" + parameterProperty.GetValue(values, new object[0])); + var parameterProperty = values.GetType().GetProperty(parameter); + if (parameterProperty != null) + { + expansion += string.IsNullOrWhiteSpace(expansion) ? "?" : ","; + expansion += parameter + "=" + + Uri.EscapeDataString("" + parameterProperty.GetValue(values, new object[0])); + } } template = _optionalQueryStringRegex.Replace(template, expansion); } From 07752696de86d36340bc740a98880a1d3c51e238 Mon Sep 17 00:00:00 2001 From: Naveen Date: Wed, 16 Sep 2015 19:26:53 -0400 Subject: [PATCH 2/3] It should have been "&" instead of "," for the URL It should have been "&" instead of "," for the URL for the issue #844 --- Octokit/Helpers/StringExtensions.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Octokit/Helpers/StringExtensions.cs b/Octokit/Helpers/StringExtensions.cs index 199d2dd5..f347b33c 100644 --- a/Octokit/Helpers/StringExtensions.cs +++ b/Octokit/Helpers/StringExtensions.cs @@ -58,7 +58,7 @@ namespace Octokit var parameterProperty = values.GetType().GetProperty(parameter); if (parameterProperty != null) { - expansion += string.IsNullOrWhiteSpace(expansion) ? "?" : ","; + expansion += string.IsNullOrWhiteSpace(expansion) ? "?" : "&"; expansion += parameter + "=" + Uri.EscapeDataString("" + parameterProperty.GetValue(values, new object[0])); } From f000980b8dec17aab3442daa30a319680268c349 Mon Sep 17 00:00:00 2001 From: Naveen Date: Wed, 16 Sep 2015 19:29:56 -0400 Subject: [PATCH 3/3] Update StringExtensionsTests.cs Update StringExtensionsTests.cs for the URL expansion. The initial fix was incorrect. --- Octokit.Tests/Helpers/StringExtensionsTests.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Octokit.Tests/Helpers/StringExtensionsTests.cs b/Octokit.Tests/Helpers/StringExtensionsTests.cs index 0b7171db..51068460 100644 --- a/Octokit.Tests/Helpers/StringExtensionsTests.cs +++ b/Octokit.Tests/Helpers/StringExtensionsTests.cs @@ -57,8 +57,8 @@ namespace Octokit.Tests.Helpers [InlineData("https://host.com/path?name=other", "https://host.com/path?name=other")] [InlineData("https://host.com/path?name=example name.txt", "https://host.com/path{?name}")] [InlineData("https://host.com/path", "https://host.com/path{?other}")] - [InlineData("https://host.com/path?name=example name.txt,label=labeltext", "https://host.com/path{?name,label}")] - [InlineData("https://host.com/path?name=example name.txt,label=labeltext", "https://host.com/path{?name,label,other}")] + [InlineData("https://host.com/path?name=example name.txt&label=labeltext", "https://host.com/path{?name,label}")] + [InlineData("https://host.com/path?name=example name.txt&label=labeltext", "https://host.com/path{?name,label,other}")] public void ExpandsUriTemplates(string expected, string template) { Assert.Equal(expected, template.ExpandUriTemplate(new { name = "example name.txt",label="labeltext" }).ToString());