Skip to content

Commit 4b64612

Browse files
authored
Merge pull request #123 from Drawaes/SingleKey
Single key
2 parents a9028ea + d10dcb2 commit 4b64612

8 files changed

Lines changed: 50 additions & 10 deletions

File tree

releasenotes/5.1.0.props

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
<Project>
2+
<PropertyGroup>
3+
<PackageReleaseNotes>
4+
* Added ability to request a single key
5+
</PackageReleaseNotes>
6+
</PropertyGroup>
7+
</Project>

src/CondenserDotNet.Configuration/Consul/ConsulConfigSource.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,9 +44,9 @@ private class WatchConsul
4444
ConsulIndex = "0"
4545
};
4646

47-
public string FormValidKey(string keyPath)
47+
public string FormValidKey(string keyPath, bool dontPreifxStart)
4848
{
49-
if (!keyPath.EndsWith(ConsulPath))
49+
if (!keyPath.EndsWith(ConsulPath) && !dontPreifxStart)
5050
{
5151
keyPath += ConsulPath;
5252
}

src/CondenserDotNet.Configuration/Consul/ConsulRegistry.cs

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -57,14 +57,25 @@ public IEnumerable<string> AllKeys
5757
/// </summary>
5858
/// <param name="keyPath"></param>
5959
/// <returns></returns>
60-
public async Task<bool> AddStaticKeyPathAsync(string keyPath)
60+
public Task<bool> AddStaticKeyPathAsync(string keyPath) => AddStaticKeyPathAsync(keyPath, singleKey: false);
61+
62+
public async Task<bool> AddStaticKeyPathAsync(string keyPath, bool singleKey)
6163
{
62-
keyPath = _source.FormValidKey(keyPath);
63-
return (await AddInitialKeyPathAsync(keyPath)) > -1;
64+
keyPath = _source.FormValidKey(keyPath, dontPreifxStart: singleKey);
65+
return (await AddInitialKeyPathAsync(keyPath, singleKey)) > -1;
6466
}
6567

66-
private async Task<int> AddInitialKeyPathAsync(string keyPath)
68+
private async Task<int> AddInitialKeyPathAsync(string keyPath, bool singleKey)
6769
{
70+
if (singleKey)
71+
{
72+
var key = await _source.GetKeyAsync(keyPath);
73+
var keyNameSplit = keyPath.Split('/');
74+
var keyName = keyNameSplit[keyNameSplit.Length - 1];
75+
var keyValue = System.Text.Encoding.UTF8.GetString(Convert.FromBase64String(key.value));
76+
AddNewDictionaryToList(new Dictionary<string, string>() { [keyName] = keyValue });
77+
}
78+
6879
var response = await _source.GetKeysAsync(keyPath);
6980

7081
if (!response.Success)
@@ -83,7 +94,7 @@ private async Task<int> AddInitialKeyPathAsync(string keyPath)
8394
public async Task AddUpdatingPathAsync(string keyPath)
8495
{
8596
keyPath = _source.FormValidKey(keyPath);
86-
var initialDictionary = await AddInitialKeyPathAsync(keyPath);
97+
var initialDictionary = await AddInitialKeyPathAsync(keyPath, singleKey: false);
8798
if (initialDictionary == -1)
8899
{
89100
var newDictionary = new Dictionary<string, string>();

src/CondenserDotNet.Configuration/Consul/IConfigSource.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ namespace CondenserDotNet.Configuration.Consul
66
public interface IConfigSource
77
{
88
object CreateWatchState();
9-
string FormValidKey(string keyPath);
9+
string FormValidKey(string keyPath, bool dontPreifxStart = false);
1010
Task<KeyOperationResult> GetKeysAsync(string keyPath);
1111
Task<KeyOperationResult> TryWatchKeysAsync(string keyPath, object state);
1212
Task<(bool found, string value)> GetKeyAsync(string keyPath);

src/CondenserDotNet.Configuration/IConfigurationRegistry.cs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
using System;
1+
using System;
22
using System.Collections.Generic;
33
using System.Text;
44
using System.Threading.Tasks;
@@ -10,6 +10,9 @@ public interface IConfigurationRegistry : IDisposable
1010
{
1111
string this[string key] { get; }
1212
Task<bool> AddStaticKeyPathAsync(string keyPath);
13+
14+
Task<bool> AddStaticKeyPathAsync(string keyPath, bool singleKey = false);
15+
1316
Task AddUpdatingPathAsync(string keyPath);
1417
void AddWatchOnEntireConfig(Action callback);
1518
void AddWatchOnSingleKey(string keyToWatch, Action<string> callback);

test/Condenser.Tests.Integration/ConfigFacts.cs

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,23 @@ public async Task TestRegister()
3636
}
3737
}
3838

39+
[Fact]
40+
public async Task TestSingleKey()
41+
{
42+
var keyname = Guid.NewGuid().ToString();
43+
using(var configRegistry = new ConsulRegistry())
44+
{
45+
await configRegistry.SetKeyAsync($"org/{keyname}/test1", _value1);
46+
47+
var result = await configRegistry.AddStaticKeyPathAsync($"org/{keyname}/test1", true);
48+
Assert.True(result);
49+
50+
var value = configRegistry["test1"];
51+
52+
Assert.Equal(_value1, value);
53+
}
54+
}
55+
3956
[Fact]
4057
public async Task TestKeyHandlesFrontSlash()
4158
{

test/CondenserTests/Fakes/FakeConfigurationRegistry.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,5 +50,7 @@ public void Dispose()
5050
{
5151

5252
}
53+
54+
public Task<bool> AddStaticKeyPathAsync(string keyPath, bool singleKey = false) => throw new NotImplementedException();
5355
}
5456
}

version.props

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<Project>
22
<PropertyGroup>
3-
<VersionPrefix>5.0.0</VersionPrefix>
3+
<VersionPrefix>5.1.0</VersionPrefix>
44
<VersionSuffix>beta</VersionSuffix>
55
</PropertyGroup>
66
</Project>

0 commit comments

Comments
 (0)