Compare commits
24 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
3f7ca24155 | ||
|
|
628f66b82a | ||
|
|
abb2c1d18b | ||
|
|
c67a34f993 | ||
|
|
697a745510 | ||
|
|
7e303fd08b | ||
|
|
737c647cbe | ||
|
|
730ee07822 | ||
|
|
ccf3a7a688 | ||
|
|
3f7df6e00e | ||
|
|
22f9a8e64b | ||
|
|
6c9a2904a6 | ||
|
|
d8bd1ce612 | ||
|
|
aa1e0600da | ||
|
|
819235eedb | ||
|
|
d3a9225930 | ||
|
|
638d077c03 | ||
|
|
b9e6ad6a8b | ||
|
|
542561d778 | ||
|
|
dc1b82f0ab | ||
|
|
8c036b0986 | ||
|
|
d5caf139e9 | ||
|
|
ccc3f229d0 | ||
|
|
4bf5ed64dc |
44
.github/workflows/pr.yml
vendored
Normal file
44
.github/workflows/pr.yml
vendored
Normal file
@@ -0,0 +1,44 @@
|
||||
name: PR Build
|
||||
on:
|
||||
pull_request:
|
||||
branches:
|
||||
- master
|
||||
jobs:
|
||||
# dotnet test
|
||||
build-test:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- name: Setup .NET Core
|
||||
uses: actions/setup-dotnet@v3
|
||||
with:
|
||||
dotnet-version: 7.x.x
|
||||
- name: Build
|
||||
run: make build
|
||||
- name: Test
|
||||
run: make test
|
||||
pack:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- name: Setup .NET Core
|
||||
uses: actions/setup-dotnet@v3
|
||||
with:
|
||||
dotnet-version: 7.x.x
|
||||
- name: Pack
|
||||
run: VERSION=0.0.1 make pack
|
||||
- name: Upload Build Artifacts
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: pr-build-${{ github.event.pull_request.number }}-${{ github.sha }}
|
||||
path: ./output/**
|
||||
check-format:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- name: Setup .NET Core
|
||||
uses: actions/setup-dotnet@v3
|
||||
with:
|
||||
dotnet-version: 7.x.x
|
||||
- name: Check Format
|
||||
run: make check-format
|
||||
73
.github/workflows/publish.yml
vendored
Normal file
73
.github/workflows/publish.yml
vendored
Normal file
@@ -0,0 +1,73 @@
|
||||
name: Publish
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
jobs:
|
||||
check-format:
|
||||
environment: master
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- name: Setup .NET Core
|
||||
uses: actions/setup-dotnet@v3
|
||||
with:
|
||||
dotnet-version: 7.x.x
|
||||
- name: Check Format
|
||||
run: make check-format
|
||||
test:
|
||||
environment: master
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: Setup .NET Core
|
||||
uses: actions/setup-dotnet@v3
|
||||
with:
|
||||
dotnet-version: 7.x.x
|
||||
- name: Build
|
||||
run: make build
|
||||
- name: Test
|
||||
run: make test
|
||||
- name: Upload Coveralls
|
||||
uses: coverallsapp/github-action@master
|
||||
with:
|
||||
github-token: ${{ secrets.GITHUB_TOKEN }}
|
||||
path-to-lcov: ./src/UriBuilder.Fluent.UnitTests/coverage.info
|
||||
tag:
|
||||
needs: [check-format, test]
|
||||
outputs:
|
||||
tagVersion: ${{ steps.tagVersion.outputs.new_tag }}
|
||||
runs-on: ubuntu-latest
|
||||
environment: master
|
||||
steps:
|
||||
- name: Checkout source code
|
||||
uses: actions/checkout@v3
|
||||
- name: Bump version and push tag
|
||||
uses: anothrNick/github-tag-action@v1
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
WITH_V: false
|
||||
DEFAULT_BUMP: minor
|
||||
id: tagVersion
|
||||
build:
|
||||
env:
|
||||
VERSION: ${{ needs.tag.outputs.tagVersion }}
|
||||
NUGET_API_KEY: ${{ secrets.NUGET_API_KEY }}
|
||||
runs-on: ubuntu-latest
|
||||
environment: master
|
||||
needs: [check-format, test, tag]
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: Setup .NET Core
|
||||
uses: actions/setup-dotnet@v3
|
||||
with:
|
||||
dotnet-version: 7.x.x
|
||||
- name: Build and Pack
|
||||
run: make pack
|
||||
- name: Upload Build Artifacts
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: release-build-${{ needs.tag.outputs.tagVersion }}
|
||||
path: ./output/**
|
||||
- name: Publish to NuGet
|
||||
run: make publish
|
||||
9
.gitignore
vendored
9
.gitignore
vendored
@@ -148,6 +148,7 @@ publish/
|
||||
|
||||
# NuGet Packages
|
||||
*.nupkg
|
||||
*.snupkg
|
||||
# The packages folder can be ignored because of Package Restore
|
||||
**/packages/*
|
||||
# except build/, which is used as an MSBuild target.
|
||||
@@ -242,4 +243,10 @@ ModelManifest.xml
|
||||
.paket/paket.exe
|
||||
|
||||
# FAKE - F# Make
|
||||
.fake/
|
||||
.fake/
|
||||
.idea
|
||||
coverage.opencover.xml
|
||||
coverage.json
|
||||
coverage.info
|
||||
.DS_Store
|
||||
output
|
||||
|
||||
3
.vscode/settings.json
vendored
Normal file
3
.vscode/settings.json
vendored
Normal file
@@ -0,0 +1,3 @@
|
||||
{
|
||||
"dotnet.defaultSolution": "UriBuilder.Fluent.sln"
|
||||
}
|
||||
11
Coverage.ps1
11
Coverage.ps1
@@ -1,11 +0,0 @@
|
||||
if($env:APPVEYOR_REPO_TAG -eq "true")
|
||||
{
|
||||
"do not publish coverall data on tag builds"
|
||||
return
|
||||
}
|
||||
nuget install OpenCover -Source https://api.nuget.org/v3/index.json -Version 4.6.519 -OutputDirectory tools
|
||||
nuget install coveralls.net -Source https://api.nuget.org/v3/index.json -Version 0.7.0 -OutputDirectory tools
|
||||
|
||||
.\tools\OpenCover.4.6.519\tools\OpenCover.Console.exe -oldStyle -target:"C:\Program Files\dotnet\dotnet.exe" -targetargs:" test "".\src\UriBuilder.Fluent.UnitTests\UriBuilder.Fluent.UnitTests.csproj"" -f net461 --no-build" -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
|
||||
21
Makefile
Normal file
21
Makefile
Normal file
@@ -0,0 +1,21 @@
|
||||
clean:
|
||||
dotnet clean && rm -rf ./**/bin ./**/obj && rm -rf output
|
||||
build: clean restore
|
||||
dotnet build --no-restore
|
||||
restore: clean
|
||||
dotnet restore
|
||||
test:
|
||||
dotnet test /p:CollectCoverage=true
|
||||
release-build: clean restore
|
||||
dotnet build -c Release --no-restore
|
||||
pack: release-build
|
||||
dotnet pack src/UriBuilder.Fluent/UriBuilder.Fluent.csproj --configuration Release --output output
|
||||
publish:
|
||||
dotnet nuget push output/*.nupkg --source https://api.nuget.org/v3/index.json --skip-duplicate --api-key $(NUGET_API_KEY)
|
||||
dotnet nuget push output/*.snupkg --source https://api.nuget.org/v3/index.json --skip-duplicate --api-key $(NUGET_API_KEY)
|
||||
coveralls-push:
|
||||
dotnet tool install -g coveralls.net
|
||||
coverallsnet --opencover -i UriBuilder.Fluent.UnitTests/coverage.opencover.xml --useRelativePaths
|
||||
check-format:
|
||||
dotnet format --verify-no-changes
|
||||
default: clean build
|
||||
@@ -19,6 +19,7 @@ new UriBuilder()
|
||||
.WithHost("awesome.com")
|
||||
.WithPathSegment("seg")
|
||||
.UseHttps()
|
||||
.Uri
|
||||
.ToString()
|
||||
|
||||
```
|
||||
@@ -30,6 +31,7 @@ or
|
||||
|
||||
new UriBuilder("https://awesome.com/yo)
|
||||
.WithParameter("id", "5")
|
||||
.Uri
|
||||
.ToString();
|
||||
|
||||
```
|
||||
@@ -78,4 +80,5 @@ var uri = new UriBuilder("https://awesome.com")
|
||||
|
||||
```
|
||||
|
||||
result: `http%3A%2F%2Fawesome.com%2F%3Fyo%3Ddawg%3C`
|
||||
result: `http%3A%2F%2Fawesome.com%2F%3Fyo%3Ddawg%3C`
|
||||
|
||||
|
||||
@@ -1,40 +1,34 @@
|
||||
|
||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio 15
|
||||
VisualStudioVersion = 15.0.26430.14
|
||||
# Visual Studio Version 17
|
||||
VisualStudioVersion = 17.0.31903.59
|
||||
MinimumVisualStudioVersion = 10.0.40219.1
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{B4EB6F69-0F56-4875-95AD-E4DEB5D18A74}"
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{BE84C3E5-BA06-4A89-A786-62423FF4A87F}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{AC680F4D-C1B2-4F06-8464-CC987B1F0008}"
|
||||
ProjectSection(SolutionItems) = preProject
|
||||
appveyor.yml = appveyor.yml
|
||||
Readme.md = Readme.md
|
||||
EndProjectSection
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UriBuilder.Fluent", "src\UriBuilder.Fluent\UriBuilder.Fluent.csproj", "{81D561B6-AB75-4A65-B770-20EEF16E6AF7}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "UriBuilder.Fluent", "src\UriBuilder.Fluent\UriBuilder.Fluent.csproj", "{B8458F59-DEBD-4844-AA29-EE3B4388AA7A}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "UriBuilder.Fluent.UnitTests", "src\UriBuilder.Fluent.UnitTests\UriBuilder.Fluent.UnitTests.csproj", "{F421A9EE-180C-413E-A0CD-665295825646}"
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UriBuilder.Fluent.UnitTests", "src\UriBuilder.Fluent.UnitTests\UriBuilder.Fluent.UnitTests.csproj", "{87BEA737-87E0-4114-986F-6080FA58B187}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Any CPU = Debug|Any CPU
|
||||
Release|Any CPU = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{B8458F59-DEBD-4844-AA29-EE3B4388AA7A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{B8458F59-DEBD-4844-AA29-EE3B4388AA7A}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{B8458F59-DEBD-4844-AA29-EE3B4388AA7A}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{B8458F59-DEBD-4844-AA29-EE3B4388AA7A}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{F421A9EE-180C-413E-A0CD-665295825646}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{F421A9EE-180C-413E-A0CD-665295825646}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{F421A9EE-180C-413E-A0CD-665295825646}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{F421A9EE-180C-413E-A0CD-665295825646}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{81D561B6-AB75-4A65-B770-20EEF16E6AF7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{81D561B6-AB75-4A65-B770-20EEF16E6AF7}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{81D561B6-AB75-4A65-B770-20EEF16E6AF7}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{81D561B6-AB75-4A65-B770-20EEF16E6AF7}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{87BEA737-87E0-4114-986F-6080FA58B187}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{87BEA737-87E0-4114-986F-6080FA58B187}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{87BEA737-87E0-4114-986F-6080FA58B187}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{87BEA737-87E0-4114-986F-6080FA58B187}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(NestedProjects) = preSolution
|
||||
{B8458F59-DEBD-4844-AA29-EE3B4388AA7A} = {B4EB6F69-0F56-4875-95AD-E4DEB5D18A74}
|
||||
{F421A9EE-180C-413E-A0CD-665295825646} = {B4EB6F69-0F56-4875-95AD-E4DEB5D18A74}
|
||||
{81D561B6-AB75-4A65-B770-20EEF16E6AF7} = {BE84C3E5-BA06-4A89-A786-62423FF4A87F}
|
||||
{87BEA737-87E0-4114-986F-6080FA58B187} = {BE84C3E5-BA06-4A89-A786-62423FF4A87F}
|
||||
EndGlobalSection
|
||||
EndGlobal
|
||||
|
||||
BIN
UriBulider.Fluent.png
Normal file
BIN
UriBulider.Fluent.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 12 KiB |
28
appveyor.yml
28
appveyor.yml
@@ -1,28 +0,0 @@
|
||||
image: Visual Studio 2017
|
||||
configuration: Release
|
||||
version: 1.0.{build}
|
||||
artifacts:
|
||||
- path: output\**.nupkg
|
||||
|
||||
init:
|
||||
- git config --global core.autocrlf true
|
||||
|
||||
build_script:
|
||||
- ps: >-
|
||||
dotnet restore UriBuilder.Fluent.sln --source https://api.nuget.org/v3/index.json
|
||||
dotnet build UriBuilder.Fluent.sln --configuration Release
|
||||
if($env:APPVEYOR_REPO_TAG -eq "true")
|
||||
{
|
||||
dotnet pack src\UriBuilder.Fluent\UriBuilder.Fluent.csproj --configuration Release --output ..\..\output /p:Version=$env:APPVEYOR_REPO_TAG_NAME
|
||||
}
|
||||
|
||||
|
||||
test_script:
|
||||
- ps: dotnet test -c Release .\src\UriBuilder.Fluent.UnitTests\UriBuilder.Fluent.UnitTests.csproj
|
||||
|
||||
deploy:
|
||||
- provider: NuGet
|
||||
api_key:
|
||||
secure: bGn7M6dHOJ3QjwYIv7e34tcY/n9cCUZmL1MnM6jRfmnJOOfwlrS+cdRj2n8Wf31n
|
||||
on:
|
||||
appveyor_repo_tag: true
|
||||
7
global.json
Normal file
7
global.json
Normal file
@@ -0,0 +1,7 @@
|
||||
{
|
||||
"sdk": {
|
||||
"version": "7.0.0",
|
||||
"rollForward": "latestMajor",
|
||||
"allowPrerelease": false
|
||||
}
|
||||
}
|
||||
@@ -16,7 +16,7 @@ namespace FluentUriBuilder.Tests
|
||||
{
|
||||
var url = new UriBuilder("http://awesome.com")
|
||||
.WithPathSegment(pathWithSlashes);
|
||||
Assert.Equal("http://awesome.com/" + expectedPath, url.Uri.ToString());
|
||||
Assert.Equal("http://awesome.com/" + expectedPath, url.ToUriString());
|
||||
}
|
||||
|
||||
[Fact]
|
||||
@@ -25,7 +25,7 @@ namespace FluentUriBuilder.Tests
|
||||
var url = new UriBuilder("http://awesome.com")
|
||||
.WithPathSegment("yodawg")
|
||||
.WithPathSegment("/immahslash/");
|
||||
Assert.Equal("http://awesome.com/yodawg/immahslash/", url.Uri.ToString());
|
||||
Assert.Equal("http://awesome.com/yodawg/immahslash/", url.ToUriString());
|
||||
}
|
||||
|
||||
[Fact]
|
||||
@@ -33,9 +33,19 @@ namespace FluentUriBuilder.Tests
|
||||
{
|
||||
var url = new UriBuilder("http://awesome.com")
|
||||
.WithParameter("awesome", "yodawg");
|
||||
Assert.Equal("http://awesome.com/?awesome=yodawg", url.Uri.ToString());
|
||||
Assert.Equal("http://awesome.com/?awesome=yodawg", url.ToUriString());
|
||||
}
|
||||
|
||||
[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.ToUriString());
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void PathAndQuery()
|
||||
{
|
||||
@@ -52,7 +62,7 @@ namespace FluentUriBuilder.Tests
|
||||
{
|
||||
var url = new UriBuilder("http://awesome.com")
|
||||
.WithParameter("awesome", "cool", "dawg");
|
||||
Assert.Equal("http://awesome.com/?awesome=cool,dawg", url.Uri.ToString());
|
||||
Assert.Equal("http://awesome.com/?awesome=cool,dawg", url.ToUriString());
|
||||
}
|
||||
|
||||
[Fact]
|
||||
@@ -60,7 +70,7 @@ namespace FluentUriBuilder.Tests
|
||||
{
|
||||
var url = new UriBuilder("http://awesome.com")
|
||||
.WithParameter("awesome", new List<int>() { 1, 2 }.Cast<object>());
|
||||
Assert.Equal("http://awesome.com/?awesome=1,2", url.Uri.ToString());
|
||||
Assert.Equal("http://awesome.com/?awesome=1,2", url.ToUriString());
|
||||
}
|
||||
|
||||
[Fact]
|
||||
@@ -68,14 +78,38 @@ namespace FluentUriBuilder.Tests
|
||||
{
|
||||
var url = new UriBuilder("http://awesome.com")
|
||||
.WithParameter("awesome");
|
||||
Assert.Equal("http://awesome.com/?awesome", url.Uri.ToString());
|
||||
Assert.Equal("http://awesome.com/?awesome", url.ToUriString());
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void TestAddFragmentArray()
|
||||
{
|
||||
var url = new UriBuilder("http://awesome.com")
|
||||
.WithFragment("awesome", "cool", "dawg");
|
||||
Assert.Equal("http://awesome.com/#awesome=cool,dawg", url.ToUriString());
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void TestAddFragmentArrayint()
|
||||
{
|
||||
var url = new UriBuilder("http://awesome.com")
|
||||
.WithFragment("awesome", new List<int>() { 1, 2 }.Cast<object>());
|
||||
Assert.Equal("http://awesome.com/#awesome=1,2", url.ToUriString());
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void TestAddFragmentNoValue()
|
||||
{
|
||||
var url = new UriBuilder("http://awesome.com")
|
||||
.WithFragment("awesome");
|
||||
Assert.Equal("http://awesome.com/#awesome", url.ToUriString());
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void WithPort()
|
||||
{
|
||||
var url = new UriBuilder().WithPort(22);
|
||||
Assert.Equal(url.Port, 22);
|
||||
Assert.Equal(22, url.Port);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
@@ -83,29 +117,29 @@ namespace FluentUriBuilder.Tests
|
||||
{
|
||||
var url = new UriBuilder("http://awesome.com:80")
|
||||
.WithoutDefaultPort();
|
||||
Assert.Equal("http://awesome.com/", url.Uri.ToString());
|
||||
Assert.Equal("http://awesome.com/", url.ToUriString());
|
||||
|
||||
url = new UriBuilder("http://awesome.com:443")
|
||||
.WithoutDefaultPort();
|
||||
Assert.Equal("http://awesome.com:443/", url.Uri.ToString());
|
||||
Assert.Equal("http://awesome.com:443/", url.ToUriString());
|
||||
|
||||
url = new UriBuilder("https://awesome.com:443")
|
||||
.WithoutDefaultPort();
|
||||
Assert.Equal("https://awesome.com/", url.Uri.ToString());
|
||||
Assert.Equal("https://awesome.com/", url.ToUriString());
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void WithHttps()
|
||||
{
|
||||
var url = new UriBuilder().UseHttps(true);
|
||||
Assert.Equal(url.Scheme, "https");
|
||||
Assert.Equal("https", url.Scheme);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void WithHttp()
|
||||
{
|
||||
var url = new UriBuilder().UseHttps(false);
|
||||
Assert.Equal(url.Scheme, "http");
|
||||
Assert.Equal("http", url.Scheme);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
@@ -113,7 +147,7 @@ namespace FluentUriBuilder.Tests
|
||||
{
|
||||
//the jesus scheme?
|
||||
var url = new UriBuilder().WithScheme("jesus");
|
||||
Assert.Equal(url.Scheme, "jesus");
|
||||
Assert.Equal("jesus", url.Scheme);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
@@ -121,7 +155,7 @@ namespace FluentUriBuilder.Tests
|
||||
{
|
||||
//the jesus scheme?
|
||||
var url = new UriBuilder().WithHost("yodawg.com");
|
||||
Assert.Equal(url.Host, "yodawg.com");
|
||||
Assert.Equal("yodawg.com", url.Host);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
@@ -131,7 +165,7 @@ namespace FluentUriBuilder.Tests
|
||||
.WithParameter("awesome", "yodawg")
|
||||
.WithParameter("fun", null)
|
||||
.WithParameter("cool", string.Empty);
|
||||
Assert.Equal("http://awesome.com/?awesome=yodawg&fun&cool", url.Uri.ToString());
|
||||
Assert.Equal("http://awesome.com/?awesome=yodawg&fun&cool", url.ToUriString());
|
||||
}
|
||||
|
||||
[Fact]
|
||||
@@ -141,7 +175,7 @@ namespace FluentUriBuilder.Tests
|
||||
.WithParameter("awesome", "yodawg")
|
||||
.WithParameter("supg", "no2")
|
||||
.WithParameter("supgf", "no22");
|
||||
Assert.Equal("http://awesome.com/?awesome=yodawg&supg=no2&supgf=no22", url.Uri.ToString());
|
||||
Assert.Equal("http://awesome.com/?awesome=yodawg&supg=no2&supgf=no22", url.ToUriString());
|
||||
}
|
||||
|
||||
[Fact]
|
||||
@@ -155,23 +189,50 @@ namespace FluentUriBuilder.Tests
|
||||
};
|
||||
var url = new UriBuilder("http://awesome.com")
|
||||
.WithParameter(dictionary);
|
||||
Assert.Equal("http://awesome.com/?yo=dawg&troll=toll&hammer", url.Uri.ToString());
|
||||
Assert.Equal("http://awesome.com/?yo=dawg&troll=toll&hammer", url.ToUriString());
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void AddFragmentWithNoValue()
|
||||
{
|
||||
var url = new UriBuilder("http://awesome.com")
|
||||
.WithFragment("awesome", "yodawg")
|
||||
.WithFragment("fun", null)
|
||||
.WithFragment("cool", string.Empty);
|
||||
Assert.Equal("http://awesome.com/#awesome=yodawg&fun&cool", url.ToUriString());
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void TestAddTwoUrlFragments()
|
||||
{
|
||||
var url = new UriBuilder("http://awesome.com")
|
||||
.WithFragment("awesome", "yodawg")
|
||||
.WithFragment("supg", "no2")
|
||||
.WithFragment("supgf", "no22");
|
||||
Assert.Equal("http://awesome.com/#awesome=yodawg&supg=no2&supgf=no22", url.ToUriString());
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void AddDictOfFragments()
|
||||
{
|
||||
var dictionary = new Dictionary<string, string>()
|
||||
{
|
||||
["yo"] = "dawg",
|
||||
["troll"] = "toll",
|
||||
["hammer"] = string.Empty
|
||||
};
|
||||
var url = new UriBuilder("http://awesome.com")
|
||||
.WithFragment(dictionary);
|
||||
Assert.Equal("http://awesome.com/#yo=dawg&troll=toll&hammer", url.ToUriString());
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void TestToEscapedString()
|
||||
{
|
||||
var url = new UriBuilder("http://awesome.com")
|
||||
.WithParameter("yo","dawg<");
|
||||
Assert.Equal("http://awesome.com/?yo=dawg%3C", url.ToEscapeString());
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void TestToEscapedDataString()
|
||||
{
|
||||
var url = new UriBuilder("http://awesome.com")
|
||||
.WithParameter("yo","dawg<");
|
||||
Assert.Equal("http%3A%2F%2Fawesome.com%2F%3Fyo%3Ddawg%3C", url.ToEscapeDataString());
|
||||
.WithParameter("yo", "dawg<");
|
||||
Assert.Equal("http://awesome.com/?yo=dawg<", url.ToUriString());
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -1,16 +0,0 @@
|
||||
using System.Reflection;
|
||||
using System.Runtime.CompilerServices;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
// General Information about an assembly is controlled through the following
|
||||
// set of attributes. Change these attribute values to modify the information
|
||||
// associated with an assembly.
|
||||
|
||||
|
||||
// Setting ComVisible to false makes the types in this assembly not visible
|
||||
// to COM components. If you need to access a type in this assembly from
|
||||
// COM, set the ComVisible attribute to true on that type.
|
||||
[assembly: ComVisible(false)]
|
||||
|
||||
// The following GUID is for the ID of the typelib if this project is exposed to COM
|
||||
[assembly: Guid("f421a9ee-180c-413e-a0cd-665295825646")]
|
||||
@@ -13,11 +13,27 @@ namespace FluentUriBuilder.Tests
|
||||
{
|
||||
var tstObj = new UriBuilder();
|
||||
Assert.Throws<ArgumentNullException>(() => tstObj.WithParameter(string.Empty, string.Empty));
|
||||
Assert.Throws<ArgumentNullException>(() => tstObj.WithFragment(string.Empty, string.Empty));
|
||||
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<ArgumentNullException>(() => tstObj.WithParameter((IEnumerable<KeyValuePair<string, string>>)null));
|
||||
Assert.Throws<ArgumentNullException>(() => tstObj.WithParameter((IEnumerable<(string, string)>)null));
|
||||
Assert.Throws<ArgumentNullException>(() => tstObj.WithFragment(fragmentDictionary: null));
|
||||
Assert.Throws<ArgumentOutOfRangeException>(() => tstObj.WithPort(-1));
|
||||
UriBuilder nullPtr = null;
|
||||
Assert.Throws<ArgumentNullException>(() => nullPtr.WithFragment("yo", "dawg"));
|
||||
Assert.Throws<ArgumentNullException>(() => nullPtr.WithFragment(new Dictionary<string, string>()));
|
||||
Assert.Throws<ArgumentNullException>(() => nullPtr.WithParameter("yo", "dawg"));
|
||||
Assert.Throws<ArgumentNullException>(() => nullPtr.WithPathSegment("yo"));
|
||||
Assert.Throws<ArgumentNullException>(() => nullPtr.WithScheme("yo"));
|
||||
Assert.Throws<ArgumentNullException>(() => nullPtr.WithFragment("yo"));
|
||||
Assert.Throws<ArgumentNullException>(() => nullPtr.WithoutDefaultPort());
|
||||
Assert.Throws<ArgumentNullException>(() => nullPtr.WithoutDefaultPort());
|
||||
Assert.Throws<ArgumentNullException>(() => nullPtr.WithPort(1));
|
||||
Assert.Throws<ArgumentNullException>(() => nullPtr.WithHost("yo"));
|
||||
Assert.Throws<ArgumentNullException>(() => nullPtr.UseHttps());
|
||||
Assert.Throws<ArgumentNullException>(() => nullPtr.WithParameter((IEnumerable<(string, string)>)null));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,14 +1,33 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFrameworks>netcoreapp1.1;net461</TargetFrameworks>
|
||||
<DebugType>full</DebugType>
|
||||
<TargetFramework>net7.0</TargetFramework>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<Nullable>disable</Nullable>
|
||||
|
||||
<IsPackable>false</IsPackable>
|
||||
<CoverletOutputFormat>lcov</CoverletOutputFormat>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.0.0" />
|
||||
<PackageReference Include="xunit" Version="2.2.0" />
|
||||
<PackageReference Include="xunit.runner.visualstudio" Version="2.2.0" />
|
||||
<PackageReference Include="coverlet.msbuild" Version="6.0.0">
|
||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||
<PrivateAssets>all</PrivateAssets>
|
||||
</PackageReference>
|
||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.3.2" />
|
||||
<PackageReference Include="xunit" Version="2.4.2" />
|
||||
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.5">
|
||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||
<PrivateAssets>all</PrivateAssets>
|
||||
</PackageReference>
|
||||
<PackageReference Include="coverlet.collector" Version="3.1.2">
|
||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||
<PrivateAssets>all</PrivateAssets>
|
||||
</PackageReference>
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\UriBuilder.Fluent\UriBuilder.Fluent.csproj" />
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
|
||||
</Project>
|
||||
|
||||
1
src/UriBuilder.Fluent.UnitTests/Usings.cs
Normal file
1
src/UriBuilder.Fluent.UnitTests/Usings.cs
Normal file
@@ -0,0 +1 @@
|
||||
global using Xunit;
|
||||
@@ -1,12 +1,12 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.Generic;
|
||||
using System.Data.SqlTypes;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace System
|
||||
{
|
||||
public static class TerribleDevUriExtensions
|
||||
public static partial 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.
|
||||
@@ -14,20 +14,28 @@ namespace System
|
||||
/// <param name="bld"></param>
|
||||
/// <param name="key"></param>
|
||||
/// <param name="values"></param>
|
||||
/// <exception cref="ArgumentNullException"></exception>
|
||||
/// <returns></returns>
|
||||
public static UriBuilder WithParameter(this UriBuilder bld, string key, params string[] values) => bld.WithParameter(key, valuesEnum: values);
|
||||
|
||||
/// <summary>
|
||||
/// Appends query strings from dictionary
|
||||
/// Appends query strings from a list of key-value pairs (usually a 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)
|
||||
public static UriBuilder WithParameter(this UriBuilder bld, IEnumerable<KeyValuePair<string, string>> parameterDictionary)
|
||||
{
|
||||
if(parameterDictionary == null) throw new ArgumentNullException(nameof(parameterDictionary));
|
||||
foreach(var item in 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.Key, item.Value);
|
||||
}
|
||||
@@ -40,30 +48,85 @@ namespace System
|
||||
/// <param name="bld"></param>
|
||||
/// <param name="key"></param>
|
||||
/// <param name="valuesEnum"></param>
|
||||
/// <exception cref="ArgumentNullException"></exception>
|
||||
/// <returns></returns>
|
||||
public static UriBuilder WithParameter(this UriBuilder bld, string key, IEnumerable<object> valuesEnum)
|
||||
{
|
||||
if(string.IsNullOrWhiteSpace(key))
|
||||
if (bld == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(bld));
|
||||
}
|
||||
if (string.IsNullOrWhiteSpace(key))
|
||||
{
|
||||
throw new ArgumentNullException(nameof(key));
|
||||
}
|
||||
if(valuesEnum == null)
|
||||
if (valuesEnum == null)
|
||||
{
|
||||
valuesEnum = new string[0];
|
||||
}
|
||||
var intitialValue = string.IsNullOrWhiteSpace(bld.Query) ? "" : $"{bld.Query.TrimStart('?')}&";
|
||||
var sb = new StringBuilder($"{intitialValue}{key}");
|
||||
var validValueHit = false;
|
||||
foreach(var value in valuesEnum)
|
||||
bld.Query = intitialValue.AppendKeyValue(key, valuesEnum);
|
||||
return bld;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Appends a fragments 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 fragment.
|
||||
/// </summary>
|
||||
/// <param name="bld"></param>
|
||||
/// <param name="key"></param>
|
||||
/// <param name="values"></param>
|
||||
/// <exception cref="ArgumentNullException"></exception>
|
||||
/// <returns></returns>
|
||||
public static UriBuilder WithFragment(this UriBuilder bld, string key, params string[] values) => bld.WithFragment(key, valuesEnum: values);
|
||||
|
||||
/// <summary>
|
||||
/// Appends fragments from dictionary
|
||||
/// </summary>
|
||||
/// <param name="bld"></param>
|
||||
/// <param name="fragmentDictionary"></param>
|
||||
/// <exception cref="ArgumentNullException"></exception>
|
||||
/// <returns></returns>
|
||||
public static UriBuilder WithFragment(this UriBuilder bld, IDictionary<string, string> fragmentDictionary)
|
||||
{
|
||||
if (bld == null)
|
||||
{
|
||||
var toSValue = value?.ToString();
|
||||
if(string.IsNullOrWhiteSpace(toSValue)) continue;
|
||||
// we can't just have an = sign since its valid to have query string paramters with no value;
|
||||
if(!validValueHit) toSValue = "=" + value;
|
||||
validValueHit = true;
|
||||
sb.Append($"{toSValue},");
|
||||
throw new ArgumentNullException(nameof(bld));
|
||||
}
|
||||
bld.Query = sb.ToString().TrimEnd(',');
|
||||
if (fragmentDictionary == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(fragmentDictionary));
|
||||
}
|
||||
foreach (var item in fragmentDictionary)
|
||||
{
|
||||
bld.WithFragment(item.Key, item.Value);
|
||||
}
|
||||
return bld;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Appends a fragments 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 fragment.
|
||||
/// </summary>
|
||||
/// <param name="bld"></param>
|
||||
/// <param name="key"></param>
|
||||
/// <param name="valuesEnum"></param>
|
||||
/// <exception cref="ArgumentNullException"></exception>
|
||||
/// <returns></returns>
|
||||
public static UriBuilder WithFragment(this UriBuilder bld, string key, IEnumerable<object> valuesEnum)
|
||||
{
|
||||
if (bld == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(bld));
|
||||
}
|
||||
if (string.IsNullOrWhiteSpace(key))
|
||||
{
|
||||
throw new ArgumentNullException(nameof(key));
|
||||
}
|
||||
if (valuesEnum == null)
|
||||
{
|
||||
valuesEnum = new string[0];
|
||||
}
|
||||
var intitialValue = string.IsNullOrWhiteSpace(bld.Fragment) ? "" : $"{bld.Fragment.TrimStart('#')}&";
|
||||
bld.Fragment = intitialValue.AppendKeyValue(key, valuesEnum);
|
||||
return bld;
|
||||
}
|
||||
|
||||
@@ -73,10 +136,18 @@ namespace System
|
||||
/// <param name="bld"></param>
|
||||
/// <param name="port"></param>
|
||||
/// <exception cref="ArgumentOutOfRangeException">Throws if port is less than one</exception>
|
||||
/// <exception cref="ArgumentNullException"></exception>
|
||||
/// <returns></returns>
|
||||
public static UriBuilder WithPort(this UriBuilder bld, int port)
|
||||
{
|
||||
if(port < 1) throw new ArgumentOutOfRangeException(nameof(port));
|
||||
if (bld == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(bld));
|
||||
}
|
||||
if (port < 1)
|
||||
{
|
||||
throw new ArgumentOutOfRangeException(nameof(port));
|
||||
}
|
||||
bld.Port = port;
|
||||
return bld;
|
||||
}
|
||||
@@ -88,7 +159,14 @@ namespace System
|
||||
/// <returns></returns>
|
||||
public static UriBuilder WithoutDefaultPort(this UriBuilder bld)
|
||||
{
|
||||
if (bld.Uri.IsDefaultPort) bld.Port = -1;
|
||||
if (bld == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(bld));
|
||||
}
|
||||
if (bld.Uri.IsDefaultPort)
|
||||
{
|
||||
bld.Port = -1;
|
||||
}
|
||||
return bld;
|
||||
}
|
||||
|
||||
@@ -101,7 +179,11 @@ namespace System
|
||||
/// <returns></returns>
|
||||
public static UriBuilder WithPathSegment(this UriBuilder bld, string pathSegment)
|
||||
{
|
||||
if(string.IsNullOrWhiteSpace(pathSegment))
|
||||
if (bld == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(bld));
|
||||
}
|
||||
if (string.IsNullOrWhiteSpace(pathSegment))
|
||||
{
|
||||
throw new ArgumentNullException(nameof(pathSegment));
|
||||
}
|
||||
@@ -119,7 +201,14 @@ namespace System
|
||||
/// <returns></returns>
|
||||
public static UriBuilder WithScheme(this UriBuilder bld, string scheme)
|
||||
{
|
||||
if(string.IsNullOrWhiteSpace(scheme)) throw new ArgumentNullException(nameof(scheme));
|
||||
if (bld == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(bld));
|
||||
}
|
||||
if (string.IsNullOrWhiteSpace(scheme))
|
||||
{
|
||||
throw new ArgumentNullException(nameof(scheme));
|
||||
}
|
||||
bld.Scheme = scheme;
|
||||
return bld;
|
||||
}
|
||||
@@ -133,7 +222,14 @@ namespace System
|
||||
/// <returns></returns>
|
||||
public static UriBuilder WithHost(this UriBuilder bld, string host)
|
||||
{
|
||||
if(string.IsNullOrWhiteSpace(host)) throw new ArgumentNullException(nameof(host));
|
||||
if (bld == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(bld));
|
||||
}
|
||||
if (string.IsNullOrWhiteSpace(host))
|
||||
{
|
||||
throw new ArgumentNullException(nameof(host));
|
||||
}
|
||||
bld.Host = host;
|
||||
return bld;
|
||||
}
|
||||
@@ -145,9 +241,14 @@ namespace System
|
||||
/// </summary>
|
||||
/// <param name="bld"></param>
|
||||
/// <param name="predicate">default true, if false sets scheme to http</param>
|
||||
/// <exception cref="ArgumentNullException"></exception>
|
||||
/// <returns></returns>
|
||||
public static UriBuilder UseHttps(this UriBuilder bld, bool predicate = true)
|
||||
{
|
||||
if (bld == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(bld));
|
||||
}
|
||||
bld.Scheme = predicate ? "https" : "http";
|
||||
return bld;
|
||||
}
|
||||
@@ -156,6 +257,7 @@ namespace System
|
||||
/// Escape Url query string
|
||||
/// </summary>
|
||||
/// <param name="bld"></param>
|
||||
/// <exception cref="ArgumentNullException"></exception>
|
||||
/// <returns></returns>
|
||||
public static string ToEscapeString(this UriBuilder bld) => Uri.EscapeUriString(bld.Uri.ToString());
|
||||
|
||||
@@ -163,8 +265,42 @@ namespace System
|
||||
/// Escape the whole Url string
|
||||
/// </summary>
|
||||
/// <param name="bld"></param>
|
||||
/// <exception cref="ArgumentNullException"></exception>
|
||||
/// <returns></returns>
|
||||
public static string ToEscapeDataString(this UriBuilder bld) => Uri.EscapeDataString(bld.Uri.ToString());
|
||||
|
||||
/// <summary>
|
||||
/// Returns the Uri string
|
||||
/// </summary>
|
||||
/// <param name="bld"></param>
|
||||
/// <exception cref="ArgumentNullException"></exception>
|
||||
/// <returns></returns>
|
||||
public static string ToUriString(this UriBuilder bld) => bld.Uri.ToString();
|
||||
|
||||
/// <summary>
|
||||
/// Appends x-www-form-urlencoded key and valuesEnum into initialValue.
|
||||
/// </summary>
|
||||
/// <exception cref="ArgumentNullException"></exception>
|
||||
private static string AppendKeyValue(this string intitialValue, string key, IEnumerable<object> valuesEnum)
|
||||
{
|
||||
var encodedKey = Uri.EscapeDataString(key);
|
||||
|
||||
var sb = new StringBuilder($"{intitialValue}{encodedKey}");
|
||||
|
||||
var Values = (
|
||||
from x in valuesEnum
|
||||
let v = x?.ToString()
|
||||
where !string.IsNullOrWhiteSpace(v)
|
||||
select Uri.EscapeDataString(v)
|
||||
).ToArray();
|
||||
|
||||
if (Values.Length > 0)
|
||||
{
|
||||
sb.Append("=");
|
||||
sb.Append(string.Join(",", Values));
|
||||
}
|
||||
|
||||
return sb.ToString();
|
||||
}
|
||||
}
|
||||
}
|
||||
32
src/UriBuilder.Fluent/TerribleDevUriExtensionsTuple.cs
Normal file
32
src/UriBuilder.Fluent/TerribleDevUriExtensionsTuple.cs
Normal file
@@ -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
|
||||
{
|
||||
/// <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, 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;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -2,22 +2,30 @@
|
||||
|
||||
<PropertyGroup>
|
||||
<Authors>Tommy Parnell</Authors>
|
||||
<TargetFrameworks>netstandard1.1;net40;net45</TargetFrameworks>
|
||||
<AssemblyName>UriBuilder.Fluent</AssemblyName>
|
||||
<PackageId>UriBuilder.Fluent</PackageId>
|
||||
<PackageTags>Url building;Uri;Uri building;fluent;extension</PackageTags>
|
||||
<PackageProjectUrl>https://github.com/TerribleDev/UriBuilder.Fluent</PackageProjectUrl>
|
||||
<DebugType>full</DebugType>
|
||||
|
||||
<PackageIcon>UriBulider.Fluent.png</PackageIcon>
|
||||
<PackageIconUrl />
|
||||
<TargetFramework>netstandard2.0</TargetFramework>
|
||||
<PublishRepositoryUrl>true</PublishRepositoryUrl>
|
||||
<EmbedUntrackedSources>true</EmbedUntrackedSources>
|
||||
<IncludeSymbols>true</IncludeSymbols>
|
||||
<SymbolPackageFormat>snupkg</SymbolPackageFormat>
|
||||
<PackageReleaseNotes>
|
||||
This package adds extension methods over System.UriBuilder to help deal with query string parameters and create more of a fluent interface.
|
||||
Unlike other projects, this NetStandardLibrary compliant package builds ontop of trusty UriBuilder, does not use custom Uri generators, and has no outside dependencies!
|
||||
</PackageReleaseNotes>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup Condition=" '$(TargetFramework)' == 'net40' ">
|
||||
<Reference Include="System" />
|
||||
<Reference Include="Microsoft.CSharp" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup Condition=" '$(TargetFramework)' == 'net45' ">
|
||||
<Reference Include="System" />
|
||||
<Reference Include="Microsoft.CSharp" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="..\..\Readme.md" Pack="true" PackagePath="\" />
|
||||
<None Include="..\..\UriBulider.Fluent.png" Pack="true" PackagePath="\" />
|
||||
<PackageReference Include="Microsoft.SourceLink.GitHub" Version="1.1.1" PrivateAssets="All" />
|
||||
</ItemGroup>
|
||||
|
||||
|
||||
</Project>
|
||||
|
||||
Reference in New Issue
Block a user