From f896beaf27b6fe740a0ffb93fb0955cb75552826 Mon Sep 17 00:00:00 2001 From: Philipp Binder Date: Wed, 25 Sep 2024 00:45:22 +0200 Subject: [PATCH] rename EnvVarSnapshot to ActualValuesSnapshot; move direct usages from Env inside Parsers; --- src/DotNetEnv/Env.cs | 7 +++---- src/DotNetEnv/IValue.cs | 2 +- src/DotNetEnv/Parsers.cs | 14 +++++++------- test/DotNetEnv.Tests/ParserTests.cs | 18 +++++++----------- 4 files changed, 18 insertions(+), 23 deletions(-) diff --git a/src/DotNetEnv/Env.cs b/src/DotNetEnv/Env.cs index 6b00e6e..29d89d9 100755 --- a/src/DotNetEnv/Env.cs +++ b/src/DotNetEnv/Env.cs @@ -91,11 +91,10 @@ private static IEnumerable> LoadContents(string con ? CreateDictionaryOption.TakeLast : CreateDictionaryOption.TakeFirst; - Parsers.EnvVarSnapshot = - new ConcurrentDictionary(envVarSnapshot.Concat(previousValues) - .ToDotEnvDictionary(dictionaryOption)); + var actualValues = new ConcurrentDictionary(envVarSnapshot.Concat(previousValues) + .ToDotEnvDictionary(dictionaryOption)); - var pairs = Parsers.ParseDotenvFile(contents, options.ClobberExistingVars); + var pairs = Parsers.ParseDotenvFile(contents, options.ClobberExistingVars, actualValues); // for NoClobber, remove pairs which are exactly contained in previousValues or present in EnvironmentVariables var unClobberedPairs = (options.ClobberExistingVars diff --git a/src/DotNetEnv/IValue.cs b/src/DotNetEnv/IValue.cs index 259ad6c..1df46a7 100644 --- a/src/DotNetEnv/IValue.cs +++ b/src/DotNetEnv/IValue.cs @@ -19,7 +19,7 @@ public ValueInterpolated (string id) public string GetValue () { - return Parsers.EnvVarSnapshot.TryGetValue(_id, out var val) ? val : string.Empty; + return Parsers.ActualValuesSnapshot.TryGetValue(_id, out var val) ? val : string.Empty; } } diff --git a/src/DotNetEnv/Parsers.cs b/src/DotNetEnv/Parsers.cs index 2fe6ab7..5717f6c 100644 --- a/src/DotNetEnv/Parsers.cs +++ b/src/DotNetEnv/Parsers.cs @@ -12,7 +12,7 @@ namespace DotNetEnv { class Parsers { - public static ConcurrentDictionary EnvVarSnapshot = new ConcurrentDictionary(); + public static ConcurrentDictionary ActualValuesSnapshot = new ConcurrentDictionary(); // helpful blog I discovered only after digging through all the Sprache source myself: // https://justinpealing.me.uk/post/2020-03-11-sprache1-chars/ @@ -260,11 +260,11 @@ from _c in Comment.OptionalOrDefault() from _lt in LineTerminator select new KeyValuePair(null, null)); - public static IEnumerable> ParseDotenvFile ( - string contents, - bool clobberExistingVariables = true - ) + public static IEnumerable> ParseDotenvFile(string contents, + bool clobberExistingVariables = true, IDictionary actualValues = null) { + ActualValuesSnapshot = new ConcurrentDictionary(actualValues ?? new Dictionary()); + return Assignment.Select(UpdateEnvVarSnapshot).Or(Empty) .Many() .AtEnd() @@ -273,8 +273,8 @@ public static IEnumerable> ParseDotenvFile ( KeyValuePair UpdateEnvVarSnapshot(KeyValuePair pair) { - if (clobberExistingVariables || !EnvVarSnapshot.ContainsKey(pair.Key)) - EnvVarSnapshot.AddOrUpdate(pair.Key, pair.Value, (key, oldValue) => pair.Value); + if (clobberExistingVariables || !ActualValuesSnapshot.ContainsKey(pair.Key)) + ActualValuesSnapshot.AddOrUpdate(pair.Key, pair.Value, (key, oldValue) => pair.Value); return pair; } diff --git a/test/DotNetEnv.Tests/ParserTests.cs b/test/DotNetEnv.Tests/ParserTests.cs index 6fc6d10..7eb0c42 100644 --- a/test/DotNetEnv.Tests/ParserTests.cs +++ b/test/DotNetEnv.Tests/ParserTests.cs @@ -10,7 +10,7 @@ namespace DotNetEnv.Tests { - public class ParserTests : IDisposable + public class ParserTests { // C# wow that you can't handle 32 bit unicode as chars. wow. strings for 4 byte chars. private static readonly string RocketChar = char.ConvertFromUtf32(0x1F680); // 🚀 @@ -18,18 +18,14 @@ public class ParserTests : IDisposable private const string EXCEPT_CHARS = "'\"$"; private const string EV_TEST = "ENVVAR_TEST"; - - public ParserTests () + private readonly IDictionary _actualValuesDictionary = new Dictionary() { - Parsers.EnvVarSnapshot = new ConcurrentDictionary() - { - [EV_TEST] = "ENV value" - }; - } + [EV_TEST] = "ENV value" + }; - public void Dispose () + public ParserTests() { - Parsers.EnvVarSnapshot.Clear(); + Parsers.ActualValuesSnapshot = new ConcurrentDictionary(_actualValuesDictionary); } [Fact] @@ -441,7 +437,7 @@ public void ParseDotenvFile () { void TestParse(KeyValuePair[] expecteds, string input) { - var outputs = Parsers.ParseDotenvFile(input).ToArray(); + var outputs = Parsers.ParseDotenvFile(input, actualValues: _actualValuesDictionary).ToArray(); Assert.Equal(expecteds.Length, outputs.Length); for (var i = 0; i < outputs.Length; i++)