From 8aaf0d8859fa6b7f4e00753cf3ef0c422ad4a04f Mon Sep 17 00:00:00 2001 From: "Josh S." <8768403+SuuBro@users.noreply.github.com> Date: Thu, 14 May 2026 23:15:28 +0100 Subject: [PATCH 1/3] Document features in README and add .gitignore - Fill in the Features section of the README with the actual capabilities of Paramulate (typed interfaces, defaults, pluggable value providers, command-line + aliases, nested trees with overrides, source tracking, pretty-printed output, built-in help, unrecognised-arg detection, supported types). - Add a .gitignore that excludes .bobbit/state. Co-authored-by: bobbit-ai --- .gitignore | 1 + README.md | 11 ++++++++++- 2 files changed, 11 insertions(+), 1 deletion(-) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..7203bfd --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +.bobbit/state diff --git a/README.md b/README.md index f391fd2..2551da6 100644 --- a/README.md +++ b/README.md @@ -99,4 +99,13 @@ App: ``` ## Features -TODO +- __Strongly-typed parameters:__ define your parameter tree as plain C# interfaces and let Paramulate generate the implementation for you +- __Sensible defaults:__ specify defaults inline with `[Default("...")]` so your component is usable out-of-the-box +- __Command line support out of the box:__ the built-in `CommandLineValueProvider` maps fully-qualified paths (e.g. `--App.UserDb.ConnectionString`) to your tree, with short (`-o`) and long (`--output-language`) aliases via `[Alias]` +- __Pluggable value providers:__ implement `IValueProvider` to pull values from config files, environment variables, databases, secret stores or anything else, and chain providers together in priority order +- __Nested parameter trees:__ compose reusable parameter interfaces and tweak nested values per-use with `[Override("PropertyName", "value")]` +- __Source tracking:__ every value remembers where it came from (`Default`, `Override`, `Command Line`, custom provider, ...) so you can pinpoint exactly where a setting was set +- __Self-documenting output:__ `WriteParams` pretty-prints the resolved parameter tree (values + sources) to any `TextWriter` -- ideal for startup logs +- __Built-in help:__ `-h` / `--help` is wired up automatically and prints the aliases and help text declared on your interfaces +- __Unrecognised argument detection:__ unknown command-line keys are surfaced as an `UnrecognisedParameterException` rather than silently ignored +- __Rich type support:__ primitives, `string`, `enum` (by name or numeric value), `DateTime`, `TimeSpan`, `Nullable` and any JSON-deserialisable type are supported out of the box From c1c8850d4e9bd68e3fd0d2b2770e05d7ab72cc6a Mon Sep 17 00:00:00 2001 From: "Josh S." <8768403+SuuBro@users.noreply.github.com> Date: Thu, 14 May 2026 23:31:25 +0100 Subject: [PATCH 2/3] Upgrade to .NET 10 LTS - Target net10.0 + netstandard2.0 (library), net10.0 (tests) - Drop obsolete net461 and netcoreapp2.0 targets - Bump NUnit 3.10 -> 4.3.2, NUnit3TestAdapter 3.10 -> 5.0.0, Microsoft.NET.Test.Sdk 15.8 -> 17.12 - Bump ImpromptuInterface 7.0.1 -> 8.0.4, Newtonsoft.Json 13.0.1 -> 13.0.3 - Add NUnit.Analyzers 4.7.0 - Replace NUnit.Framework.Internal.TextMessageWriter with System.IO.StringWriter - Update .travis.yml for .NET 10 Co-authored-by: bobbit-ai --- .travis.yml | 10 ++++------ Paramulate.Test/Paramulate.Test.csproj | 18 ++++++++++++------ Paramulate.Test/TestPrinting.cs | 4 ++-- Paramulate/Paramulate.csproj | 12 +++++++----- 4 files changed, 25 insertions(+), 19 deletions(-) diff --git a/.travis.yml b/.travis.yml index 7431032..1e5e6d6 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,12 +1,10 @@ language: csharp -dotnet: 2.0.0 +mono: none +dotnet: 10.0 install: - dotnet restore - # workaround for missing .net 4.5 targing pack - - export FrameworkPathOverride=$(dirname $(which mono))/../lib/mono/4.5/ - script: - - dotnet build - - dotnet test Paramulate.Test/Paramulate.Test.csproj + - dotnet build --configuration Release + - dotnet test Paramulate.Test/Paramulate.Test.csproj --configuration Release diff --git a/Paramulate.Test/Paramulate.Test.csproj b/Paramulate.Test/Paramulate.Test.csproj index 7e0a1f9..29395b8 100644 --- a/Paramulate.Test/Paramulate.Test.csproj +++ b/Paramulate.Test/Paramulate.Test.csproj @@ -1,13 +1,19 @@ - + - netcoreapp2.0 + net10.0 + latest + false - - - + + + + + runtime; build; native; contentfiles; analyzers; buildtransitive + all + - \ No newline at end of file + diff --git a/Paramulate.Test/TestPrinting.cs b/Paramulate.Test/TestPrinting.cs index 28b4acd..92d26e0 100644 --- a/Paramulate.Test/TestPrinting.cs +++ b/Paramulate.Test/TestPrinting.cs @@ -1,6 +1,6 @@ using System; +using System.IO; using NUnit.Framework; -using NUnit.Framework.Internal; using Paramulate.Attributes; namespace Paramulate.Test @@ -55,7 +55,7 @@ public void TestPrintingObject() { var builder = ParamsBuilder.New("PrintParent"); var testObject = builder.Build(); - var testStream = new TextMessageWriter(); + var testStream = new StringWriter(); builder.WriteParams(testObject, testStream); Console.WriteLine(testStream.ToString()); diff --git a/Paramulate/Paramulate.csproj b/Paramulate/Paramulate.csproj index 07dc001..3574139 100644 --- a/Paramulate/Paramulate.csproj +++ b/Paramulate/Paramulate.csproj @@ -1,6 +1,8 @@ - + - netstandard2.0;net461 + netstandard2.0;net10.0 + latest + disable 1.0.0-beta3 SuuBro @@ -12,7 +14,7 @@ true - - + + - \ No newline at end of file + From bc2b05c9187eaa03d4ea8a1640d9085b6f123328 Mon Sep 17 00:00:00 2001 From: "Josh S." <8768403+SuuBro@users.noreply.github.com> Date: Thu, 14 May 2026 23:32:01 +0100 Subject: [PATCH 3/3] Add .gitignore for build artifacts and IDE files Co-authored-by: bobbit-ai --- .gitignore | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/.gitignore b/.gitignore index 7203bfd..cdc05fb 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,33 @@ .bobbit/state + +# Build results +[Dd]ebug/ +[Rr]elease/ +x64/ +x86/ +bld/ +[Bb]in/ +[Oo]bj/ +[Ll]og/ + +# NuGet +*.nupkg +*.snupkg +.nuget/ +**/packages/ + +# Visual Studio +.vs/ +*.user +*.suo +*.userosscache +*.sln.docstates + +# Rider +.idea/ + +# OS files +Thumbs.db +ehthumbs.db +Desktop.ini +.DS_Store