Skip to content

Commit

Permalink
Update secrets configuration to allow selection of class and property…
Browse files Browse the repository at this point in the history
… accessibility
  • Loading branch information
chowarth committed Dec 20, 2020
1 parent dc88d45 commit ab91c56
Show file tree
Hide file tree
Showing 4 changed files with 61 additions and 28 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -195,7 +195,7 @@ internal CodeWriter GenerateClass(SecretsConfig secretsConfig, IDictionary<strin
using (writer.Block($"namespace {GetNamespace(secretsConfig.Namespace)}"))
{
writer.AppendAttribute(CompileGeneratedAttribute);
using(writer.Block($"static partial class {secretsConfig.ClassName}"))
using(writer.Block($"{secretsConfig.Accessibility.ToString().ToLower()} static partial class {secretsConfig.ClassName}"))
{
foreach (var secret in secrets)
{
Expand Down Expand Up @@ -227,9 +227,10 @@ private void ProcessSecret(KeyValuePair<string, string> secret, SecretsConfig se
}

var mapping = valueConfig.PropertyType.GetPropertyTypeMapping();
var accessibility = secretsConfig.Accessibility.ToString().ToLower();

var standardOutput = PropertyBuilder(secret, mapping.Type, mapping.Handler, valueConfig.IsArray, false);
var safeOutput = PropertyBuilder(secret, mapping.Type, mapping.Handler, valueConfig.IsArray, true);
var standardOutput = PropertyBuilder(secret, mapping.Type, mapping.Handler, valueConfig.IsArray, false, accessibility);
var safeOutput = PropertyBuilder(secret, mapping.Type, mapping.Handler, valueConfig.IsArray, true, accessibility);
writer.AppendAttribute(CompileGeneratedAttribute);
writer.AppendLine(standardOutput, safeOutput);
}
Expand All @@ -253,7 +254,9 @@ internal string ProcessSecret(KeyValuePair<string, string> secret, SecretsConfig
}

var mapping = valueConfig.PropertyType.GetPropertyTypeMapping();
return PropertyBuilder(secret, mapping.Type, mapping.Handler, valueConfig.IsArray, safeOutput);
var accessibility = secretsConfig.Accessibility.ToString().ToLower();

return PropertyBuilder(secret, mapping.Type, mapping.Handler, valueConfig.IsArray, safeOutput, accessibility);
}

internal ValueConfig GenerateValueConfig(KeyValuePair<string, string> secret, SecretsConfig config)
Expand Down Expand Up @@ -308,7 +311,7 @@ internal string GetNamespace(string relativeNamespace)
return $"{BaseNamespace}.{relativeNamespace}";
}

internal string PropertyBuilder(KeyValuePair<string, string> secret, Type type, IValueHandler valueHandler, bool isArray, bool safeOutput)
internal string PropertyBuilder(KeyValuePair<string, string> secret, Type type, IValueHandler valueHandler, bool isArray, bool safeOutput, string accessibility)
{
var output = string.Empty;
var typeDeclaration = type.GetStandardTypeName();
Expand All @@ -329,7 +332,7 @@ internal string PropertyBuilder(KeyValuePair<string, string> secret, Type type,
output = output.ToLower();
}

return $"internal {accessModifier} {typeDeclaration} {secret.Key} = {output};";
return $"{accessibility} {accessModifier} {typeDeclaration} {secret.Key} = {output};";
}

internal static IEnumerable<string> GetValueArray(JToken token) =>
Expand Down
9 changes: 9 additions & 0 deletions src/Mobile.BuildTools/Models/Secrets/Accessibility.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@

namespace Mobile.BuildTools.Models.Secrets
{
public enum Accessibility
{
Internal,
Public
}
}
13 changes: 11 additions & 2 deletions src/Mobile.BuildTools/Models/Secrets/SecretsConfig.cs
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,17 @@ public class SecretsConfig
public string Prefix { get; set; }

[JsonProperty("className")]
public string ClassName { get; set; }

public string ClassName { get; set; }

#if SCHEMAGENERATOR
[System.ComponentModel.DefaultValue("Internal")]
[System.ComponentModel.DataAnnotations.EnumDataType(typeof(Accessibility))]
public string Accessibility { get; set; }
#else
[JsonProperty("accessibility")]
public Accessibility Accessibility { get; set; }
#endif

[JsonProperty("namespace")]
public string Namespace { get; set; }

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -55,75 +55,87 @@ public void ProcessSecretHidesValueForSafeOutput(bool firstRun)
}

[Theory]
[InlineData(true)]
[InlineData(false)]
public void ProcessSecretGeneratesBooleanValue(bool firstRun)
[InlineData(Accessibility.Internal, true)]
[InlineData(Accessibility.Internal, false)]
[InlineData(Accessibility.Public, true)]
[InlineData(Accessibility.Public, false)]
public void ProcessSecretGeneratesBooleanValue(Accessibility accessibility, bool firstRun)
{
var key = "TestKey";
var value = bool.TrueString;
var pair = new KeyValuePair<string, string>(key, value);
var generator = GetGenerator();
var config = new SecretsConfig()
{
{
Accessibility = accessibility,
Properties = new List<ValueConfig> { new ValueConfig { Name = TestKey, PropertyType = PropertyType.Bool } }
};

var output = generator.ProcessSecret(pair, config, firstRun);
Assert.Contains($"const bool {key}", output);
Assert.Contains($"{accessibility.ToString().ToLower()} const bool {key}", output);
}

[Theory]
[InlineData(true)]
[InlineData(false)]
public void ProcessSecretGeneratesIntegerValue(bool firstRun)
[InlineData(Accessibility.Internal, true)]
[InlineData(Accessibility.Internal, false)]
[InlineData(Accessibility.Public, true)]
[InlineData(Accessibility.Public, false)]
public void ProcessSecretGeneratesIntegerValue(Accessibility accessibility, bool firstRun)
{
var key = "TestKey";
var value = "2";
var pair = new KeyValuePair<string, string>(key, value);
var generator = GetGenerator();
var config = new SecretsConfig()
{
{
Accessibility = accessibility,
Properties = new List<ValueConfig> { new ValueConfig { Name = TestKey, PropertyType = PropertyType.Int } }
};

var output = generator.ProcessSecret(pair, config, firstRun);
Assert.Contains($"const int {key}", output);
Assert.Contains($"{accessibility.ToString().ToLower()} const int {key}", output);
}

[Theory]
[InlineData(true)]
[InlineData(false)]
public void ProcessSecretGeneratesDoubleValue(bool firstRun)
[InlineData(Accessibility.Internal, true)]
[InlineData(Accessibility.Internal, false)]
[InlineData(Accessibility.Public, true)]
[InlineData(Accessibility.Public, false)]
public void ProcessSecretGeneratesDoubleValue(Accessibility accessibility, bool firstRun)
{
var key = "TestKey";
var value = "2.2";
var pair = new KeyValuePair<string, string>(key, value);
var generator = GetGenerator();
var config = new SecretsConfig()
{
{
Accessibility = accessibility,
Properties = new List<ValueConfig> { new ValueConfig { Name = TestKey, PropertyType = PropertyType.Double } }
};

var output = generator.ProcessSecret(pair, config, firstRun);
Assert.Contains($"const double {key}", output);
Assert.Contains($"{accessibility.ToString().ToLower()} const double {key}", output);
}

[Theory]
[InlineData(true)]
[InlineData(false)]
public void ProcessSecretGeneratesStringValue(bool firstRun)
[InlineData(Accessibility.Internal, true)]
[InlineData(Accessibility.Internal, false)]
[InlineData(Accessibility.Public, true)]
[InlineData(Accessibility.Public, false)]
public void ProcessSecretGeneratesStringValue(Accessibility accessibility, bool firstRun)
{
var key = "TestKey";
var value = "TestValue";
var pair = new KeyValuePair<string, string>(key, value);
var generator = GetGenerator();
var config = new SecretsConfig()
{
{
Accessibility = accessibility,
Properties = new List<ValueConfig> { new ValueConfig { Name = TestKey, PropertyType = PropertyType.String } }
};

var output = generator.ProcessSecret(pair, config, firstRun);
Assert.Contains($"const string {key}", output);
Assert.Contains($"{accessibility.ToString().ToLower()} const string {key}", output);
}

[Theory]
Expand Down

0 comments on commit ab91c56

Please sign in to comment.