From fe53f53f3a14dc1aec39f41c925cd06f41d15665 Mon Sep 17 00:00:00 2001 From: Justin Yoo Date: Thu, 26 Oct 2017 23:59:16 +1100 Subject: [PATCH] Add projects for settigs and extensions --- AglCodingTest.sln | 14 +++++ .../AglCodingTest.Extensions.csproj | 52 ++++++++++++++++ .../GenericExtensions.cs | 38 ++++++++++++ .../Properties/AssemblyInfo.cs | 36 +++++++++++ .../AglCodingTest.Settings.csproj | 61 +++++++++++++++++++ src/AglCodingTest.Settings/AglSettings.cs | 17 ++++++ src/AglCodingTest.Settings/AppSettings.cs | 51 ++++++++++++++++ .../ConnectionStringSettings.cs | 13 ++++ .../Properties/AssemblyInfo.cs | 36 +++++++++++ .../StorageAccountSettings.cs | 15 +++++ 10 files changed, 333 insertions(+) create mode 100644 src/AglCodingTest.Extensions/AglCodingTest.Extensions.csproj create mode 100644 src/AglCodingTest.Extensions/GenericExtensions.cs create mode 100644 src/AglCodingTest.Extensions/Properties/AssemblyInfo.cs create mode 100644 src/AglCodingTest.Settings/AglCodingTest.Settings.csproj create mode 100644 src/AglCodingTest.Settings/AglSettings.cs create mode 100644 src/AglCodingTest.Settings/AppSettings.cs create mode 100644 src/AglCodingTest.Settings/ConnectionStringSettings.cs create mode 100644 src/AglCodingTest.Settings/Properties/AssemblyInfo.cs create mode 100644 src/AglCodingTest.Settings/StorageAccountSettings.cs diff --git a/AglCodingTest.sln b/AglCodingTest.sln index 1a69a1e..5d75435 100644 --- a/AglCodingTest.sln +++ b/AglCodingTest.sln @@ -28,6 +28,10 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AglCodingTest.Models.Tests" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AglCodingTest.Services.Tests", "test\AglCodingTest.Services.Tests\AglCodingTest.Services.Tests.csproj", "{9BB791C9-FC8A-47F9-817F-D15ACB5621A5}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AglCodingTest.Extensions", "src\AglCodingTest.Extensions\AglCodingTest.Extensions.csproj", "{B6BB1C52-6B75-4316-B50B-9A6A160B2252}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AglCodingTest.Settings", "src\AglCodingTest.Settings\AglCodingTest.Settings.csproj", "{074176DE-E0ED-455C-814B-C96C5C3E85DF}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -58,6 +62,14 @@ Global {9BB791C9-FC8A-47F9-817F-D15ACB5621A5}.Debug|Any CPU.Build.0 = Debug|Any CPU {9BB791C9-FC8A-47F9-817F-D15ACB5621A5}.Release|Any CPU.ActiveCfg = Release|Any CPU {9BB791C9-FC8A-47F9-817F-D15ACB5621A5}.Release|Any CPU.Build.0 = Release|Any CPU + {B6BB1C52-6B75-4316-B50B-9A6A160B2252}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B6BB1C52-6B75-4316-B50B-9A6A160B2252}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B6BB1C52-6B75-4316-B50B-9A6A160B2252}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B6BB1C52-6B75-4316-B50B-9A6A160B2252}.Release|Any CPU.Build.0 = Release|Any CPU + {074176DE-E0ED-455C-814B-C96C5C3E85DF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {074176DE-E0ED-455C-814B-C96C5C3E85DF}.Debug|Any CPU.Build.0 = Debug|Any CPU + {074176DE-E0ED-455C-814B-C96C5C3E85DF}.Release|Any CPU.ActiveCfg = Release|Any CPU + {074176DE-E0ED-455C-814B-C96C5C3E85DF}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -69,6 +81,8 @@ Global {C7D5BBB5-482D-49F6-9E0E-9F33F95A64CD} = {74F77911-DFA1-428E-9C09-71334FD246A4} {E8B18210-35FE-4DA5-8394-08C698AC8BE6} = {DFC84156-3B71-474C-A6AD-91D119C04EAF} {9BB791C9-FC8A-47F9-817F-D15ACB5621A5} = {DFC84156-3B71-474C-A6AD-91D119C04EAF} + {B6BB1C52-6B75-4316-B50B-9A6A160B2252} = {74F77911-DFA1-428E-9C09-71334FD246A4} + {074176DE-E0ED-455C-814B-C96C5C3E85DF} = {74F77911-DFA1-428E-9C09-71334FD246A4} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {938129C8-CBE0-4346-B677-9B44A7D7A0D9} diff --git a/src/AglCodingTest.Extensions/AglCodingTest.Extensions.csproj b/src/AglCodingTest.Extensions/AglCodingTest.Extensions.csproj new file mode 100644 index 0000000..78c4112 --- /dev/null +++ b/src/AglCodingTest.Extensions/AglCodingTest.Extensions.csproj @@ -0,0 +1,52 @@ + + + + + Debug + AnyCPU + {B6BB1C52-6B75-4316-B50B-9A6A160B2252} + Library + Properties + AglCodingTest.Extensions + AglCodingTest.Extensions + v4.6.1 + 512 + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + All + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/AglCodingTest.Extensions/GenericExtensions.cs b/src/AglCodingTest.Extensions/GenericExtensions.cs new file mode 100644 index 0000000..780559b --- /dev/null +++ b/src/AglCodingTest.Extensions/GenericExtensions.cs @@ -0,0 +1,38 @@ +using System; + +namespace AglCodingTest.Extensions +{ + /// + /// This represents the extension entity for generic. + /// + public static class GenericExtensions + { + /// + /// Checks whether the given instance is null or empty. + /// + /// Type of instance. + /// Instance to check. + /// Returns True, if the original instance is null or empty; otherwise returns False. + public static bool IsNullOrDefault(this T instance) + { + return instance == null || instance.Equals(default(T)); + } + + /// + /// Throws an if the given instance is null or empty. + /// + /// Type of instance. + /// Instance to check. + /// Returns the original instance, if the instance is NOT null; otherwise throws an . + /// is + public static T ThrowIfNullOrDefault(this T instance) + { + if (instance.IsNullOrDefault()) + { + throw new ArgumentNullException(nameof(instance)); + } + + return instance; + } + } +} \ No newline at end of file diff --git a/src/AglCodingTest.Extensions/Properties/AssemblyInfo.cs b/src/AglCodingTest.Extensions/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..6f77add --- /dev/null +++ b/src/AglCodingTest.Extensions/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("AglCodingTest.Extensions")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("AglCodingTest.Extensions")] +[assembly: AssemblyCopyright("Copyright © 2017")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("b6bb1c52-6b75-4316-b50b-9a6a160b2252")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/src/AglCodingTest.Settings/AglCodingTest.Settings.csproj b/src/AglCodingTest.Settings/AglCodingTest.Settings.csproj new file mode 100644 index 0000000..c42bc02 --- /dev/null +++ b/src/AglCodingTest.Settings/AglCodingTest.Settings.csproj @@ -0,0 +1,61 @@ + + + + + Debug + AnyCPU + {074176DE-E0ED-455C-814B-C96C5C3E85DF} + Library + Properties + AglCodingTest.Settings + AglCodingTest.Settings + v4.6.1 + 512 + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + All + + + 9.0.1 + + + + + + + ..\..\..\..\..\Users\Justin\.nuget\packages\microsoft.aspnet.webapi.client\5.2.3\lib\net45\System.Net.Http.Formatting.dll + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/AglCodingTest.Settings/AglSettings.cs b/src/AglCodingTest.Settings/AglSettings.cs new file mode 100644 index 0000000..4224d34 --- /dev/null +++ b/src/AglCodingTest.Settings/AglSettings.cs @@ -0,0 +1,17 @@ +using System; + +namespace AglCodingTest.Settings +{ + /// + /// This represents the settings entity for AGL coding test. + /// + public class AglSettings + { + private const string AglEndpoint = "Agl.Endpoint"; + + /// + /// Gets the endpoint URL. + /// + public virtual string Endpoint => Environment.GetEnvironmentVariable(AglEndpoint); + } +} \ No newline at end of file diff --git a/src/AglCodingTest.Settings/AppSettings.cs b/src/AglCodingTest.Settings/AppSettings.cs new file mode 100644 index 0000000..c64460a --- /dev/null +++ b/src/AglCodingTest.Settings/AppSettings.cs @@ -0,0 +1,51 @@ +using System.Net.Http.Formatting; + +using Newtonsoft.Json; +using Newtonsoft.Json.Converters; +using Newtonsoft.Json.Serialization; + +namespace AglCodingTest.Settings +{ + /// + /// This represents the app settings entity. + /// + public class AppSettings + { + /// + /// Initializes a new instance of the class. + /// + public AppSettings() + { + var serialiserSettings = new JsonSerializerSettings() + { + ContractResolver = new CamelCasePropertyNamesContractResolver(), + Converters = { new StringEnumConverter() }, + Formatting = Formatting.Indented, + NullValueHandling = NullValueHandling.Ignore, + MissingMemberHandling = MissingMemberHandling.Ignore + }; + this.SerialiserSettings = serialiserSettings; + this.Formatter = new JsonMediaTypeFormatter() { SerializerSettings = serialiserSettings }; + } + + /// + /// Gets the instance. + /// + public virtual StorageAccountSettings StorageAccount => new StorageAccountSettings(); + + /// + /// Gets the instance. + /// + public virtual AglSettings Agl => new AglSettings(); + + /// + /// Gets the instance. + /// + public virtual JsonSerializerSettings SerialiserSettings { get; } + + /// + /// Gets the instance. + /// + public virtual MediaTypeFormatter Formatter { get; } + } +} \ No newline at end of file diff --git a/src/AglCodingTest.Settings/ConnectionStringSettings.cs b/src/AglCodingTest.Settings/ConnectionStringSettings.cs new file mode 100644 index 0000000..d5d30f5 --- /dev/null +++ b/src/AglCodingTest.Settings/ConnectionStringSettings.cs @@ -0,0 +1,13 @@ +namespace AglCodingTest.Settings +{ + /// + /// This represents the base settings entity for connection strings. + /// + public abstract class ConnectionStringSettings + { + /// + /// Gets the connection string value. + /// + public virtual string ConnectionString => string.Empty; + } +} diff --git a/src/AglCodingTest.Settings/Properties/AssemblyInfo.cs b/src/AglCodingTest.Settings/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..e2db83e --- /dev/null +++ b/src/AglCodingTest.Settings/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("AglCodingTest.Settings")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("AglCodingTest.Settings")] +[assembly: AssemblyCopyright("Copyright © 2017")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("074176de-e0ed-455c-814b-c96c5c3e85df")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/src/AglCodingTest.Settings/StorageAccountSettings.cs b/src/AglCodingTest.Settings/StorageAccountSettings.cs new file mode 100644 index 0000000..7ce2b53 --- /dev/null +++ b/src/AglCodingTest.Settings/StorageAccountSettings.cs @@ -0,0 +1,15 @@ +using System; + +namespace AglCodingTest.Settings +{ + /// + /// This represents the settings entity for storage account. + /// + public class StorageAccountSettings : ConnectionStringSettings + { + private const string AzureWebJobsStorageKey = "AzureWebJobsStorage"; + + /// + public override string ConnectionString => Environment.GetEnvironmentVariable(AzureWebJobsStorageKey); + } +} \ No newline at end of file