Skip to content

Add UnitsNet.NumberExtensions nuget #742

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 23 commits into from
Feb 6, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
7ea06e0
Merge pull request #1 from angularsen/master
ArdentLogician Jan 7, 2020
3b7a098
Upgrade nugets in UnitsNet.Benchmark
angularsen Jan 7, 2020
f992e9d
JsonNet/4.1.0
angularsen Jan 7, 2020
c302e33
JsonNet/4.1.1
angularsen Jan 7, 2020
4dda46e
Add VolumePerLength yd3 / ft and ftUS (#734)
gojanpaolo Jan 11, 2020
a5ffe0b
UnitsNet: 4.43.0
angularsen Jan 11, 2020
34ef5c9
Resolve conflicts.
luli0401 Jan 22, 2020
b308895
Add NumberTo extensions back to UnitsNET.
Jan 9, 2020
a601a8a
Add the UnitsNet.Extensions project
Jan 15, 2020
cc947f8
Change the build process, include the UnitsNet.Extensions project and…
Jan 15, 2020
970a9a6
Create UnitsNet.Extensions.Tests project.
luli0401 Jan 22, 2020
554cad5
Merge pull request #3 from wgvdn/Add_NumberToExtenisons_Back
luli0401 Jan 22, 2020
ebecf7f
Resolve the build error from rebase.
luli0401 Jan 22, 2020
0b8b975
Fix the wrong directory.
luli0401 Jan 22, 2020
66a2706
Merge pull request #5 from angularsen/master
luli0401 Feb 3, 2020
23972ff
Sync the Extension project version number with the main library, add …
luli0401 Feb 3, 2020
fbef3d5
Get latest version
luli0401 Feb 3, 2020
d3c173d
Update the verion number for NumberExtensions project,
luli0401 Feb 3, 2020
525953d
Merge pull request #6 from wgvdn/Add_NumberToExtenisons_Back
luli0401 Feb 3, 2020
15e4d8d
Fix the NuGet package name, and add new test project to the build pro…
luli0401 Feb 3, 2020
214d2c9
Merge pull request #7 from wgvdn/Add_NumberToExtenisons_Back
luli0401 Feb 3, 2020
bb198af
Merge pull request #8 from angularsen/master
luli0401 Feb 6, 2020
862a84f
Add more Authors to the NumberExtensions project.
luli0401 Feb 6, 2020
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion Build/build-functions.psm1
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,7 @@ function Start-Build([boolean] $IncludeWindowsRuntimeComponent = $false) {
function Start-Tests {
$projectPaths = @(
"UnitsNet.Tests\UnitsNet.Tests.csproj",
"UnitsNet.NumberExtensions.Tests\UnitsNet.NumberExtensions.Tests.csproj",
"UnitsNet.Serialization.JsonNet.Tests\UnitsNet.Serialization.JsonNet.Tests.csproj",
"UnitsNet.Serialization.JsonNet.CompatibilityTests\UnitsNet.Serialization.JsonNet.CompatibilityTests.csproj"
)
Expand Down Expand Up @@ -97,7 +98,8 @@ function Start-Tests {
function Start-PackNugets {
$projectPaths = @(
"UnitsNet\UnitsNet.csproj",
"UnitsNet.Serialization.JsonNet\UnitsNet.Serialization.JsonNet.csproj"
"UnitsNet.Serialization.JsonNet\UnitsNet.Serialization.JsonNet.csproj",
"UnitsNet.NumberExtensions\UnitsNet.NumberExtensions.csproj"
)

write-host -foreground blue "Pack nugets...`n---"
Expand Down
1 change: 1 addition & 0 deletions Build/bump-version-UnitsNet-major.bat
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
@echo off
SET scriptdir=%~dp0
call powershell -NoProfile %scriptdir%\set-version-UnitsNet.ps1 -bump major
call powershell -NoProfile %scriptdir%\set-version-UnitsNet.NumberExtensions.ps1 -bump major
if %errorlevel% neq 0 exit /b %errorlevel%
1 change: 1 addition & 0 deletions Build/bump-version-UnitsNet-minor.bat
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
@echo off
SET scriptdir=%~dp0
call powershell -NoProfile %scriptdir%\set-version-UnitsNet.ps1 -bump minor
call powershell -NoProfile %scriptdir%\set-version-UnitsNet.NumberExtensions.ps1 -bump minor
if %errorlevel% neq 0 exit /b %errorlevel%
1 change: 1 addition & 0 deletions Build/bump-version-UnitsNet-patch.bat
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
@echo off
SET scriptdir=%~dp0
call powershell -NoProfile %scriptdir%\set-version-UnitsNet.ps1 -bump patch
call powershell -NoProfile %scriptdir%\set-version-UnitsNet.NumberExtensions.ps1 -bump patch
if %errorlevel% neq 0 exit /b %errorlevel%
1 change: 1 addition & 0 deletions Build/bump-version-UnitsNet-suffix.bat
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
@echo off
SET scriptdir=%~dp0
call powershell -NoProfile %scriptdir%\set-version-UnitsNet.ps1 -bump suffix
call powershell -NoProfile %scriptdir%\set-version-UnitsNet.NumberExtensions.ps1 -bump suffix
if %errorlevel% neq 0 exit /b %errorlevel%
4 changes: 4 additions & 0 deletions Build/bump-version-UnitsNet.NumberExtensions-major.bat
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
@echo off
SET scriptdir=%~dp0
call powershell -NoProfile %scriptdir%\set-version-UnitsNet.NumberExtensions.ps1 -bump major
if %errorlevel% neq 0 exit /b %errorlevel%
4 changes: 4 additions & 0 deletions Build/bump-version-UnitsNet.NumberExtensions-minor.bat
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
@echo off
SET scriptdir=%~dp0
call powershell -NoProfile %scriptdir%\set-version-UnitsNet.NumberExtensions.ps1 -bump minor
if %errorlevel% neq 0 exit /b %errorlevel%
4 changes: 4 additions & 0 deletions Build/bump-version-UnitsNet.NumberExtensions-patch.bat
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
@echo off
SET scriptdir=%~dp0
call powershell -NoProfile %scriptdir%\set-version-UnitsNet.NumberExtensions.ps1 -bump patch
if %errorlevel% neq 0 exit /b %errorlevel%
4 changes: 4 additions & 0 deletions Build/bump-version-UnitsNet.NumberExtensions-suffix.bat
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
@echo off
SET scriptdir=%~dp0
call powershell -NoProfile %scriptdir%\set-version-UnitsNet.NumberExtensions.ps1 -bump suffix
if %errorlevel% neq 0 exit /b %errorlevel%
59 changes: 59 additions & 0 deletions Build/set-version-UnitsNet.NumberExtensions.ps1
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
<# .SYNOPSIS
Updates the version of all UnitsNet.Extensions projects.
.DESCRIPTION
Updates the <Version> property of the .csproj project files.
.PARAMETER set
Set new version
.PARAMETER bump
Bump major, minor, patch or semver suffix number. Only one can be specified at a time, and bumping one part will reset all the lesser parts.
.EXAMPLE
Set new version.
-v 2.3.4-beta3: 1.0.0 => 2.3.4-beta3
.EXAMPLE
Bump the major, minor, patch or suffix part of the version.
-b major: 1.2.3-alpha1 => 2.0.0
-b minor: 1.2.3-alpha1 => 1.3.0
-b patch: 1.2.3-alpha1 => 1.2.4
-b suffix: 1.2.3-alpha => 1.2.3-alpha2
-b suffix: 1.2.3-alpha2 => 1.2.3-alpha3
-b suffix: 1.2.3-beta2 => 1.2.3-beta3
-b suffix: 1.2.3-rc2 => 1.2.3-rc3

.NOTES
Author: Lu Li
Date: Jan 15, 2020
Based on original work by Luis Rocha from: http://www.luisrocha.net/2009/11/setting-assembly-version-with-windows.html
#>
[CmdletBinding()]
Param(
[Parameter(Mandatory=$true, Position=0, ParameterSetName="set", HelpMessage="Set version string")]
[Alias("version")]
[string]$setVersion,

[Parameter(Mandatory=$true, Position=0, ParameterSetName="bump", HelpMessage="Bump one or more version parts")]
[Alias("bump")]
[ValidateSet('major','minor','patch','suffix')]
[string]$bumpVersion
)

function Help {
"Sets the AssemblyVersion and AssemblyFileVersion of AssemblyInfo.cs files`n"
".\SetVersion.ps1 [VersionNumber]`n"
" [VersionNumber] The version number to set, for example: 1.1.9301.0"
" If not provided, a version number will be generated.`n"
}

# Import functions: Get-NewProjectVersion, Set-ProjectVersion, Invoke-CommitAndTagVersion
Import-Module "$PSScriptRoot\set-version.psm1"

$root = Resolve-Path "$PSScriptRoot\.."
$paramSet = $PsCmdlet.ParameterSetName
$projFile = "$root\UnitsNet.NumberExtensions\UnitsNet.NumberExtensions.csproj"
$versionFiles = @($projFile)
$projectName = "UnitsNet.NumberExtensions"

# Use UnitsNet.Common.props version as base if bumping major/minor/patch
$newVersion = Get-NewProjectVersion $projFile $paramSet $setVersion $bumpVersion

Set-ProjectVersion $projFile $newVersion
Invoke-CommitAndTagVersion $projectName $versionFiles $newVersion
58 changes: 58 additions & 0 deletions CodeGen/Generators/UnitsNetGen/NumberExtensionsGenerator.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
using System;
using CodeGen.JsonTypes;

namespace CodeGen.Generators.UnitsNetGen
{
internal class NumberExtensionsGenerator : GeneratorBase
{
private readonly Unit[] _units;
private readonly string _quantityName;

public NumberExtensionsGenerator(Quantity quantity)
{
if (quantity is null)
throw new ArgumentNullException(nameof(quantity));

_units = quantity.Units;
_quantityName = quantity.Name;
}

public override string Generate()
{
Writer.WL(GeneratedFileHeader);

Writer.WL(
$@"
using System;

namespace UnitsNet.NumberExtensions.NumberTo{_quantityName}
{{
/// <summary>
/// A number to {_quantityName} Extensions
/// </summary>
public static class NumberTo{_quantityName}Extensions
{{");

foreach (var unit in _units)
{
Writer.WL(2, $@"
/// <inheritdoc cref=""{_quantityName}.From{unit.PluralName}(UnitsNet.QuantityValue)"" />");

Writer.WLIfText(2, GetObsoleteAttributeOrNull(unit.ObsoleteText));

Writer.WL(2, $@"public static {_quantityName} {unit.PluralName}<T>(this T value) =>
{_quantityName}.From{unit.PluralName}(Convert.ToDouble(value));
");
}

Writer.WL(1, @"}
}");
return Writer.ToString();
}

private string GetObsoleteAttributeOrNull(string obsoleteText) =>
string.IsNullOrWhiteSpace(obsoleteText) ?
null :
$"[System.Obsolete({obsoleteText})]";
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
using System;
using CodeGen.JsonTypes;

namespace CodeGen.Generators.UnitsNetGen
{
internal class NumberExtensionsTestClassGenerator : GeneratorBase
{
private readonly Unit[] _units;
private readonly string _quantityName;

public NumberExtensionsTestClassGenerator(Quantity quantity)
{
if (quantity is null)
throw new ArgumentNullException(nameof(quantity));

_units = quantity.Units;
_quantityName = quantity.Name;
}


public override string Generate()
{
Writer.WL(GeneratedFileHeader);

Writer.WL(
$@"
using UnitsNet.NumberExtensions.NumberTo{_quantityName};
using Xunit;

namespace UnitsNet.Tests
{{
public class NumberTo{_quantityName}ExtensionsTests
{{");

foreach (var unit in _units)
{
Writer.WL(2, $@"
[Fact]");

Writer.WLIfText(2, GetObsoleteAttributeOrNull(unit.ObsoleteText));

Writer.WL(2, $@"public void NumberTo{unit.PluralName}Test() =>
Assert.Equal({_quantityName}.From{unit.PluralName}(2), 2.{unit.PluralName}());
");
}

Writer.WL(1, @"}
}");
return Writer.ToString();
}

private string GetObsoleteAttributeOrNull(string obsoleteText) =>
string.IsNullOrWhiteSpace(obsoleteText) ?
null :
$"[System.Obsolete({obsoleteText})]";
}
}
22 changes: 21 additions & 1 deletion CodeGen/Generators/UnitsNetGenerator.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
// Licensed under MIT No Attribution, see LICENSE file at the root.
// Licensed under MIT No Attribution, see LICENSE file at the root.
// Copyright 2013 Andreas Gullberg Larsen (andreas.larsen84@gmail.com). Maintained at https://github.com/angularsen/UnitsNet.

using System.IO;
Expand Down Expand Up @@ -37,11 +37,15 @@ internal static class UnitsNetGenerator
public static void Generate(string rootDir, Quantity[] quantities)
{
var outputDir = $"{rootDir}/UnitsNet/GeneratedCode";
var extensionsOutputDir = $"{rootDir}/UnitsNet.NumberExtensions/GeneratedCode";
var extensionsTestOutputDir = $"{rootDir}/UnitsNet.NumberExtensions.Tests/GeneratedCode";
var testProjectDir = $"{rootDir}/UnitsNet.Tests";

// Ensure output directories exist
Directory.CreateDirectory($"{outputDir}/Quantities");
Directory.CreateDirectory($"{outputDir}/Units");
Directory.CreateDirectory($"{extensionsOutputDir}");
Directory.CreateDirectory($"{extensionsTestOutputDir}");
Directory.CreateDirectory($"{testProjectDir}/GeneratedCode");
Directory.CreateDirectory($"{testProjectDir}/GeneratedCode/TestsBase");
Directory.CreateDirectory($"{testProjectDir}/GeneratedCode/QuantityTests");
Expand All @@ -51,6 +55,8 @@ public static void Generate(string rootDir, Quantity[] quantities)
var sb = new StringBuilder($"{quantity.Name}:".PadRight(AlignPad));
GenerateQuantity(sb, quantity, $"{outputDir}/Quantities/{quantity.Name}.g.cs");
GenerateUnitType(sb, quantity, $"{outputDir}/Units/{quantity.Name}Unit.g.cs");
GenerateNumberToExtensions(sb, quantity, $"{extensionsOutputDir}/NumberTo{quantity.Name}Extensions.g.cs");
GenerateNumberToExtensionsTestClass(sb, quantity, $"{extensionsTestOutputDir}/NumberTo{quantity.Name}ExtensionsTest.g.cs");

// Example: CustomCode/Quantities/LengthTests inherits GeneratedCode/TestsBase/LengthTestsBase
// This way when new units are added to the quantity JSON definition, we auto-generate the new
Expand Down Expand Up @@ -96,6 +102,20 @@ private static void GenerateQuantity(StringBuilder sb, Quantity quantity, string
sb.Append("quantity(OK) ");
}

private static void GenerateNumberToExtensions(StringBuilder sb, Quantity quantity, string filePath)
{
var content = new NumberExtensionsGenerator(quantity).Generate();
File.WriteAllText(filePath, content, Encoding.UTF8);
sb.Append("number extensions(OK) ");
}

private static void GenerateNumberToExtensionsTestClass(StringBuilder sb, Quantity quantity, string filePath)
{
var content = new NumberExtensionsTestClassGenerator(quantity).Generate();
File.WriteAllText(filePath, content, Encoding.UTF8);
sb.Append("number extensions tests(OK) ");
}

private static void GenerateUnitType(StringBuilder sb, Quantity quantity, string filePath)
{
var content = new UnitTypeGenerator(quantity).Generate();
Expand Down

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading