Compare commits
14 Commits
1.0.4
...
objectSeri
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a80ec08760 | ||
|
|
b4c3914e73 | ||
|
|
8b053f0f77 | ||
|
|
b68af327ab | ||
|
|
68bf719c27 | ||
|
|
3ff3165a42 | ||
|
|
16f96b9b27 | ||
|
|
04e2090a95 | ||
|
|
176659d0cb | ||
|
|
ad60fd47d9 | ||
|
|
3c3641a4f5 | ||
|
|
d7fc6865c1 | ||
|
|
1911b4a3e7 | ||
|
|
6e3e23061a |
@@ -6,6 +6,6 @@ if($env:APPVEYOR_REPO_TAG -eq "true")
|
||||
nuget install OpenCover -Version 4.6.519 -OutputDirectory tools
|
||||
nuget install coveralls.net -Version 0.7.0 -OutputDirectory tools
|
||||
|
||||
.\tools\OpenCover.4.6.519\tools\OpenCover.Console.exe -target:"C:\Program Files\dotnet\dotnet.exe" -targetargs:" test "".\src\UriBuilder.Fluent.UnitTests"" -f net461" -register:user -filter:"+[UriBuilder*]* -[*Tests]*" -returntargetcode -output:opencover_results.xml
|
||||
.\tools\OpenCover.4.6.519\tools\OpenCover.Console.exe -target:"C:\Program Files\dotnet\dotnet.exe" -targetargs:" test "".\src\UriBuilder.Fluent.UnitTests"" -f net462" -register:user -filter:"+[UriBuilder*]* -[*Tests]*" -returntargetcode -output:opencover_results.xml
|
||||
|
||||
.\tools\coveralls.net.0.7.0\tools\csmacnz.Coveralls.exe --opencover -i .\opencover_results.xml
|
||||
13
Readme.md
13
Readme.md
@@ -32,6 +32,19 @@ new UriBuilder("https://awesome.com/yo)
|
||||
```
|
||||
result: `https://awesome.com/yo?id=5`
|
||||
|
||||
you can even pass a dictionary of parameters
|
||||
|
||||
```csharp
|
||||
var dictionary = new Dictionary<string, string>()
|
||||
{
|
||||
["yo"] = "dawg"
|
||||
};
|
||||
new UriBuilder("http://awesome.com")
|
||||
.WithParameter(dictionary);
|
||||
http://awesome.com/?yo=dawg
|
||||
|
||||
```
|
||||
|
||||
## Getting started
|
||||
|
||||
Just install the nuget package `install-package UriBuilder.Fluent` and thats it. The extension methods should be available to you!
|
||||
@@ -12,15 +12,16 @@ init:
|
||||
before_build:
|
||||
- ps: invoke-webrequest https://go.microsoft.com/fwlink/?LinkID=827524 -OutFile core.exe
|
||||
- ps: .\core.exe /install /quiet /norestart
|
||||
- ps: iwr -Uri https://download.microsoft.com/download/E/F/D/EFD52638-B804-4865-BB57-47F4B9C80269/NDP462-DevPack-KB3151934-ENU.exe -OutFile net452.exe
|
||||
- ps: start-process .\net452.exe -Wait '/install /quiet /norestart'
|
||||
|
||||
build_script:
|
||||
- ps: dotnet restore
|
||||
- ps: dotnet build -c Release .\src\UriBuilder.Fluent
|
||||
- ps: dotnet build -c Release .\src\UriBuilder.Fluent.UnitTests
|
||||
- ps: dotnet publish -c Release .\src\UriBuilder.Fluent.UnitTests
|
||||
|
||||
|
||||
test_script:
|
||||
- ps: dotnet test -c Release .\src\UriBuilder.Fluent.UnitTests
|
||||
- ps: .\Coverage.ps1
|
||||
- ps: .\update-projectjson.ps1
|
||||
- ps: dotnet restore
|
||||
|
||||
@@ -116,5 +116,29 @@ namespace FluentUriBuilder.Tests
|
||||
.WithParameter("supgf", "no22");
|
||||
Assert.Equal("http://awesome.com/?awesome=yodawg&supg=no2&supgf=no22", url.Uri.ToString());
|
||||
}
|
||||
[Fact]
|
||||
public void TestSerializedParameters()
|
||||
{
|
||||
var url = new UriBuilder("http://awesome.com")
|
||||
.WithSerializedObject(new {yo="dawg"});
|
||||
Assert.Equal("http://awesome.com/?yo=dawg", url.Uri.ToString());
|
||||
url = new UriBuilder("http://awesome.com")
|
||||
.WithSerializedObject(new {yo=""});
|
||||
Assert.Equal("http://awesome.com/?yo", url.Uri.ToString());
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void AddDictOfParams()
|
||||
{
|
||||
var dictionary = new Dictionary<string, string>()
|
||||
{
|
||||
["yo"] = "dawg",
|
||||
["troll"] = "toll",
|
||||
["hammer"] = string.Empty
|
||||
};
|
||||
var url = new UriBuilder("http://awesome.com")
|
||||
.WithParameter(dictionary);
|
||||
Assert.Equal("http://awesome.com/?yo=dawg&troll=toll&hammer", url.Uri.ToString());
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -16,6 +16,7 @@ namespace FluentUriBuilder.Tests
|
||||
Assert.Throws<ArgumentNullException>(() => tstObj.WithPathSegment(null));
|
||||
Assert.Throws<ArgumentNullException>(() => tstObj.WithScheme(null));
|
||||
Assert.Throws<ArgumentNullException>(() => tstObj.WithHost(null));
|
||||
Assert.Throws<ArgumentNullException>(() => tstObj.WithParameter(parameterDictionary: null));
|
||||
Assert.Throws<ArgumentOutOfRangeException>(() => tstObj.WithPort(-1));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -9,7 +9,8 @@
|
||||
},
|
||||
|
||||
"frameworks": {
|
||||
"net461": {},
|
||||
"net462": {
|
||||
},
|
||||
"netcoreapp1.0": {
|
||||
"dependencies": {
|
||||
"Microsoft.NETCore.App": {
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Reflection;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
@@ -8,8 +9,40 @@ namespace System
|
||||
{
|
||||
public static class TerribleDevUriExtensions
|
||||
{
|
||||
/// <summary>
|
||||
/// 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.
|
||||
/// </summary>
|
||||
/// <param name="bld"></param>
|
||||
/// <param name="key"></param>
|
||||
/// <param name="values"></param>
|
||||
/// <returns></returns>
|
||||
public static UriBuilder WithParameter(this UriBuilder bld, string key, params string[] values) => bld.WithParameter(key, valuesEnum: values);
|
||||
|
||||
public static UriBuilder WithParameter(this UriBuilder bld, string key, object value) => bld.WithParameter(key, new object[1] { value });
|
||||
/// <summary>
|
||||
/// Appends query strings from dictionary
|
||||
/// </summary>
|
||||
/// <param name="bld"></param>
|
||||
/// <param name="parameterDictionary"></param>
|
||||
/// <exception cref="ArgumentNullException"></exception>
|
||||
/// <returns></returns>
|
||||
public static UriBuilder WithParameter(this UriBuilder bld, IDictionary<string, string> parameterDictionary)
|
||||
{
|
||||
if(parameterDictionary == null) throw new ArgumentNullException(nameof(parameterDictionary));
|
||||
foreach(var item in parameterDictionary)
|
||||
{
|
||||
bld.WithParameter(item.Key, item.Value);
|
||||
}
|
||||
return bld;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 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.
|
||||
/// </summary>
|
||||
/// <param name="bld"></param>
|
||||
/// <param name="key"></param>
|
||||
/// <param name="valuesEnum"></param>
|
||||
/// <returns></returns>
|
||||
public static UriBuilder WithParameter(this UriBuilder bld, string key, IEnumerable<object> valuesEnum)
|
||||
{
|
||||
if(string.IsNullOrWhiteSpace(key))
|
||||
@@ -20,8 +53,7 @@ namespace System
|
||||
{
|
||||
valuesEnum = new string[0];
|
||||
}
|
||||
var isfirst = string.IsNullOrWhiteSpace(bld.Query);
|
||||
var intitialValue = isfirst ? "" : $"{bld.Query.TrimStart('?')}&";
|
||||
var intitialValue = string.IsNullOrWhiteSpace(bld.Query) ? "" : $"{bld.Query.TrimStart('?')}&";
|
||||
var sb = new StringBuilder($"{intitialValue}{key}");
|
||||
var validValueHit = false;
|
||||
foreach(var value in valuesEnum)
|
||||
@@ -37,6 +69,13 @@ namespace System
|
||||
return bld;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Sets the port to be the port number
|
||||
/// </summary>
|
||||
/// <param name="bld"></param>
|
||||
/// <param name="port"></param>
|
||||
/// <exception cref="ArgumentOutOfRangeException">Throws if port is less than one</exception>
|
||||
/// <returns></returns>
|
||||
public static UriBuilder WithPort(this UriBuilder bld, int port)
|
||||
{
|
||||
if(port < 1) throw new ArgumentOutOfRangeException(nameof(port));
|
||||
@@ -44,6 +83,13 @@ namespace System
|
||||
return bld;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// appends a path segment to the path. Can be called multiple times to append multiple segments
|
||||
/// </summary>
|
||||
/// <param name="bld"></param>
|
||||
/// <param name="pathSegment"></param>
|
||||
/// <exception cref="ArgumentNullException">You pass a string as a path segment</exception>
|
||||
/// <returns></returns>
|
||||
public static UriBuilder WithPathSegment(this UriBuilder bld, string pathSegment)
|
||||
{
|
||||
if(string.IsNullOrWhiteSpace(pathSegment))
|
||||
@@ -55,6 +101,13 @@ namespace System
|
||||
return bld;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Sets your Uri Scheme
|
||||
/// </summary>
|
||||
/// <param name="bld"></param>
|
||||
/// <param name="scheme"></param>
|
||||
/// <exception cref="ArgumentNullException">You must pass a scheme</exception>
|
||||
/// <returns></returns>
|
||||
public static UriBuilder WithScheme(this UriBuilder bld, string scheme)
|
||||
{
|
||||
if(string.IsNullOrWhiteSpace(scheme)) throw new ArgumentNullException(nameof(scheme));
|
||||
@@ -62,6 +115,13 @@ namespace System
|
||||
return bld;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="bld"></param>
|
||||
/// <param name="host"></param>
|
||||
/// <exception cref="ArgumentNullException">You must pass a ho0st</exception>
|
||||
/// <returns></returns>
|
||||
public static UriBuilder WithHost(this UriBuilder bld, string host)
|
||||
{
|
||||
if(string.IsNullOrWhiteSpace(host)) throw new ArgumentNullException(nameof(host));
|
||||
@@ -69,10 +129,31 @@ namespace System
|
||||
return bld;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Use Https?
|
||||
/// </summary>
|
||||
/// <param name="bld"></param>
|
||||
/// <param name="predicate">default true, if false sets scheme to http</param>
|
||||
/// <returns></returns>
|
||||
public static UriBuilder UseHttps(this UriBuilder bld, bool predicate = true)
|
||||
{
|
||||
bld.Scheme = predicate ? "https" : "http";
|
||||
return bld;
|
||||
}
|
||||
|
||||
#if (netstandard15)
|
||||
|
||||
public static UriBuilder WithSerializedObject(this UriBuilder bld, object serialize)
|
||||
{
|
||||
var types = serialize.GetType().GetTypeInfo().GetProperties(BindingFlags.Public | BindingFlags.Instance | BindingFlags.GetProperty);
|
||||
foreach(var type in types)
|
||||
{
|
||||
bld.WithParameter(type.Name, type.GetValue(serialize, null));
|
||||
}
|
||||
|
||||
return bld;
|
||||
}
|
||||
|
||||
#endif
|
||||
}
|
||||
}
|
||||
@@ -1,28 +1,48 @@
|
||||
{
|
||||
"version": "1.0.0-*",
|
||||
"packOptions": {
|
||||
"owners": [
|
||||
"Tommy Parnell"
|
||||
],
|
||||
"projectUrl": "https://github.com/TerribleDev/UriBuilder.Fluent",
|
||||
"summary": "Fluent extensions for UriBuilder",
|
||||
"tags": [
|
||||
"Url building",
|
||||
"Uri",
|
||||
"Uri building",
|
||||
"fluent",
|
||||
"extension"
|
||||
]
|
||||
},
|
||||
"dependencies": {
|
||||
"NETStandard.Library": "1.6.0"
|
||||
"owners": [
|
||||
"Tommy Parnell"
|
||||
],
|
||||
"repository": {
|
||||
"url": "https://github.com/TerribleDev/UriBuilder.Fluent"
|
||||
},
|
||||
"summary": "Fluent extensions for UriBuilder",
|
||||
"tags": [
|
||||
"Url building",
|
||||
"Uri",
|
||||
"Uri building",
|
||||
"fluent",
|
||||
"extension"
|
||||
]
|
||||
},
|
||||
"authors": [
|
||||
"Tommy Parnell"
|
||||
"Tommy Parnell"
|
||||
],
|
||||
"frameworks": {
|
||||
"netstandard1.1": {
|
||||
"imports": "dnxcore50"
|
||||
"buildOptions": {
|
||||
"define": [ "netstandard11" ]
|
||||
},
|
||||
"dependencies": {
|
||||
"NETStandard.Library": "1.6.0"
|
||||
}
|
||||
},
|
||||
"netstandard1.5": {
|
||||
"dependencies": {
|
||||
"NETStandard.Library": "1.6.0"
|
||||
},
|
||||
"buildOptions": {
|
||||
"define": [ "netstandard15" ]
|
||||
}
|
||||
},
|
||||
"net45":{
|
||||
"buildOptions": {
|
||||
"define": [ "netstandard15" ]
|
||||
},
|
||||
"frameworkAssemblies": {
|
||||
"System.Runtime":"4.0.0"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user