From 730ee078224fa82bbe9813bc935defc0e320efcf Mon Sep 17 00:00:00 2001 From: Tommy Parnell Date: Wed, 12 Jul 2023 15:51:23 -0400 Subject: [PATCH] add tuple api back that was accidentally removed (#21) --- .../ExtensionTests.cs | 10 ++++++ .../ThrowsTests.cs | 2 ++ .../TerribleDevUriExtensions.cs | 2 +- .../TerribleDevUriExtensionsTuple.cs | 32 +++++++++++++++++++ .../UriBuilder.Fluent.csproj | 2 +- 5 files changed, 46 insertions(+), 2 deletions(-) create mode 100644 src/UriBuilder.Fluent/TerribleDevUriExtensionsTuple.cs diff --git a/src/UriBuilder.Fluent.UnitTests/ExtensionTests.cs b/src/UriBuilder.Fluent.UnitTests/ExtensionTests.cs index 90d9cd1..7bcaa86 100644 --- a/src/UriBuilder.Fluent.UnitTests/ExtensionTests.cs +++ b/src/UriBuilder.Fluent.UnitTests/ExtensionTests.cs @@ -35,6 +35,16 @@ namespace FluentUriBuilder.Tests .WithParameter("awesome", "yodawg"); Assert.Equal("http://awesome.com/?awesome=yodawg", url.Uri.ToString()); } + [Fact] + public void TestAddUrlParameterAsTupleList() + { + var url = new UriBuilder("http://awesome.com") + .WithParameter(new List<(string, string)>() + { + ("awesome", "yodawg") + }); + Assert.Equal("http://awesome.com/?awesome=yodawg", url.Uri.ToString()); + } [Fact] public void PathAndQuery() diff --git a/src/UriBuilder.Fluent.UnitTests/ThrowsTests.cs b/src/UriBuilder.Fluent.UnitTests/ThrowsTests.cs index 5321475..b382172 100644 --- a/src/UriBuilder.Fluent.UnitTests/ThrowsTests.cs +++ b/src/UriBuilder.Fluent.UnitTests/ThrowsTests.cs @@ -18,6 +18,7 @@ namespace FluentUriBuilder.Tests Assert.Throws(() => tstObj.WithScheme(null)); Assert.Throws(() => tstObj.WithHost(null)); Assert.Throws(() => tstObj.WithParameter((IEnumerable>)null)); + Assert.Throws(() => tstObj.WithParameter((IEnumerable<(string, string)>)null)); Assert.Throws(() => tstObj.WithFragment(fragmentDictionary: null)); Assert.Throws(() => tstObj.WithPort(-1)); UriBuilder nullPtr = null; @@ -32,6 +33,7 @@ namespace FluentUriBuilder.Tests Assert.Throws(() => nullPtr.WithPort(1)); Assert.Throws(() => nullPtr.WithHost("yo")); Assert.Throws(() => nullPtr.UseHttps()); + Assert.Throws(() => nullPtr.WithParameter((IEnumerable<(string, string)>)null)); } } } \ No newline at end of file diff --git a/src/UriBuilder.Fluent/TerribleDevUriExtensions.cs b/src/UriBuilder.Fluent/TerribleDevUriExtensions.cs index 83dabce..f7e65d9 100644 --- a/src/UriBuilder.Fluent/TerribleDevUriExtensions.cs +++ b/src/UriBuilder.Fluent/TerribleDevUriExtensions.cs @@ -3,7 +3,7 @@ using System.Text; namespace System { - public static class TerribleDevUriExtensions + public static partial class TerribleDevUriExtensions { /// /// Appends a query string parameter with a key, and many values. Multiple values will be comma seperated. If only 1 value is passed and its null or value, the key will be added to the QS. diff --git a/src/UriBuilder.Fluent/TerribleDevUriExtensionsTuple.cs b/src/UriBuilder.Fluent/TerribleDevUriExtensionsTuple.cs new file mode 100644 index 0000000..630c236 --- /dev/null +++ b/src/UriBuilder.Fluent/TerribleDevUriExtensionsTuple.cs @@ -0,0 +1,32 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace System +{ + public static partial class TerribleDevUriExtensions + { + /// + /// Appends query strings from dictionary + /// + /// + /// + /// + /// + public static UriBuilder WithParameter(this UriBuilder bld, IEnumerable<(string, string)> parameterDictionary) + { + if (bld == null) + { + throw new ArgumentNullException(nameof(bld)); + } + if (parameterDictionary == null) throw new ArgumentNullException(nameof(parameterDictionary)); + foreach (var item in parameterDictionary) + { + bld.WithParameter(item.Item1, item.Item2); + } + return bld; + } + } +} \ No newline at end of file diff --git a/src/UriBuilder.Fluent/UriBuilder.Fluent.csproj b/src/UriBuilder.Fluent/UriBuilder.Fluent.csproj index 648a092..eb3215f 100644 --- a/src/UriBuilder.Fluent/UriBuilder.Fluent.csproj +++ b/src/UriBuilder.Fluent/UriBuilder.Fluent.csproj @@ -24,7 +24,7 @@ - +