Skip to content
This repository has been archived by the owner on Dec 7, 2023. It is now read-only.

Commit

Permalink
add - doc - Added support for gender types
Browse files Browse the repository at this point in the history
We've added support for gendered name generator

---

Please note that the list of the female and male names used doesn't represent the full list of all the names, which is a unified list.

---

Type: add
Breaking: False
Doc Required: True
Part: 1/1
  • Loading branch information
AptiviCEO committed Oct 14, 2023
1 parent cde63cf commit 4ac1fad
Show file tree
Hide file tree
Showing 3 changed files with 125 additions and 49 deletions.
47 changes: 27 additions & 20 deletions Namer.Demo/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -31,30 +31,37 @@ internal class Program
{
static void Main()
{
// Generate 10 names
Console.WriteLine("Generate 10 names\n");
var names = NameGenerator.GenerateNames();
Console.WriteLine("- {0}\n\n", string.Join(", ", names));
foreach (string genderName in Enum.GetNames(typeof(NameGenderType)))
{
// Get gender
var genderType = (NameGenderType)Enum.Parse(typeof(NameGenderType), genderName);
Console.WriteLine($"{genderName}\n");

// Generate 20 names
Console.WriteLine("Generate 20 names\n");
var names20 = NameGenerator.GenerateNames(20);
Console.WriteLine("- {0}\n\n", string.Join(", ", names20));
// Generate 10 names
Console.WriteLine("Generate 10 names\n");
var names = NameGenerator.GenerateNames(genderType);
Console.WriteLine("- {0}\n", string.Join(", ", names));

// Generate 5 names with custom name prefix
Console.WriteLine("Generate 5 names with custom name prefix\n");
var names5nameprefix = NameGenerator.GenerateNames(5, "J", "m", "", "");
Console.WriteLine("- {0}\n\n", string.Join(", ", names5nameprefix));
// Generate 20 names
Console.WriteLine("Generate 5 names\n");
var names5 = NameGenerator.GenerateNames(5, genderType);
Console.WriteLine("- {0}\n", string.Join(", ", names5));

// Generate 5 names with custom surname prefix
Console.WriteLine("Generate 5 names with custom surname prefix\n");
var names5surnameprefix = NameGenerator.GenerateNames(5, "", "", "B", "g");
Console.WriteLine("- {0}\n\n", string.Join(", ", names5surnameprefix));
// Generate 5 names with custom name prefix
Console.WriteLine("Generate 5 names with custom name prefix\n");
var names5nameprefix = NameGenerator.GenerateNames(5, "J", "m", "", "", genderType);
Console.WriteLine("- {0}\n", string.Join(", ", names5nameprefix));

// Generate 5 names with custom name and surname prefix
Console.WriteLine("Generate 5 names with custom name and surname prefix\n");
var namescomplete = NameGenerator.GenerateNames(5, "Ev", "n", "Na", "lo");
Console.WriteLine("- {0}\n\n", string.Join(", ", namescomplete));
// Generate 5 names with custom surname prefix
Console.WriteLine("Generate 5 names with custom surname prefix\n");
var names5surnameprefix = NameGenerator.GenerateNames(5, "", "", "B", "g", genderType);
Console.WriteLine("- {0}\n", string.Join(", ", names5surnameprefix));

// Generate 5 names with custom name and surname prefix
Console.WriteLine("Generate 5 names with custom name and surname prefix\n");
var namescomplete = NameGenerator.GenerateNames(5, "Ev", "n", "Na", "lo", genderType);
Console.WriteLine("- {0}\n", string.Join(", ", namescomplete));
}
}
}
}
45 changes: 45 additions & 0 deletions Namer/NameGenderType.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
/*
* MIT License
*
* Copyright (c) 2022 Aptivi
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*
*/

namespace Namer
{
/// <summary>
/// Name gender type
/// </summary>
public enum NameGenderType
{
/// <summary>
/// Uses the list of both male and female names
/// </summary>
Unified,
/// <summary>
/// Uses the list of female names
/// </summary>
Female,
/// <summary>s list
/// </summary>
Male,
}
}
82 changes: 53 additions & 29 deletions Namer/NameGenerator.cs
Original file line number Diff line number Diff line change
Expand Up @@ -40,22 +40,34 @@ public static class NameGenerator
internal static string[] Names = Array.Empty<string>();
internal static string[] Surnames = Array.Empty<string>();
private static readonly HttpClient NameClient = new();
private static readonly string nameAddress = "https://cdn.jsdelivr.net/gh/Aptivi/NamesList@latest/Processed/FirstNames.txt";
private static readonly string surnameAddress = "https://cdn.jsdelivr.net/gh/Aptivi/NamesList@latest/Processed/Surnames.txt";
private static readonly string nameAddressPart = "https://cdn.jsdelivr.net/gh/Aptivi/NamesList@latest/Processed/";
private static readonly string unifiedNameListFileName = "FirstNames.txt";
private static readonly string femaleNameListFileName = "FirstNames_Female.txt";
private static readonly string maleNameListFileName = "FirstNames_Male.txt";
private static readonly string surnameListFileName = "Surnames.txt";

/// <summary>
/// Populates the names and the surnames for the purpose of initialization
/// </summary>
public static void PopulateNames() =>
PopulateNamesAsync().Wait();
/// <param name="genderType">Gender type to use when generating names</param>
public static void PopulateNames(NameGenderType genderType = NameGenderType.Unified) =>
PopulateNamesAsync(genderType).Wait();

/// <summary>
/// [Async] Populates the names and the surnames for the purpose of initialization
/// </summary>
public static async Task PopulateNamesAsync()
/// <param name="genderType">Gender type to use when generating names</param>
public static async Task PopulateNamesAsync(NameGenderType genderType = NameGenderType.Unified)
{
try
{
string surnameAddress = $"{nameAddressPart}{surnameListFileName}";
string namesFileName =
genderType == NameGenderType.Female ? femaleNameListFileName :
genderType == NameGenderType.Male ? maleNameListFileName :
unifiedNameListFileName;
string nameAddress = $"{nameAddressPart}{namesFileName}";

if (Names.Length == 0)
Names = await PopulateInternalAsync(nameAddress);
if (Surnames.Length == 0)
Expand All @@ -70,17 +82,19 @@ public static async Task PopulateNamesAsync()
/// <summary>
/// Generates the names
/// </summary>
/// <param name="genderType">Gender type to use when generating names</param>
/// <returns>List of generated names</returns>
public static string[] GenerateNames() =>
GenerateNames(10, "", "", "", "");
public static string[] GenerateNames(NameGenderType genderType = NameGenderType.Unified) =>
GenerateNames(10, "", "", "", "", genderType);

/// <summary>
/// Generates the names
/// </summary>
/// <param name="Count">How many names to generate?</param>
/// <param name="genderType">Gender type to use when generating names</param>
/// <returns>List of generated names</returns>
public static string[] GenerateNames(int Count) =>
GenerateNames(Count, "", "", "", "");
public static string[] GenerateNames(int Count, NameGenderType genderType = NameGenderType.Unified) =>
GenerateNames(Count, "", "", "", "", genderType);

/// <summary>
/// Generates the names
Expand All @@ -90,28 +104,31 @@ public static string[] GenerateNames(int Count) =>
/// <param name="NameSuffix">What should the name end with?</param>
/// <param name="SurnamePrefix">What should the surname start with?</param>
/// <param name="SurnameSuffix">What should the surname end with?</param>
/// <param name="genderType">Gender type to use when generating names</param>
/// <returns>List of generated names</returns>
public static string[] GenerateNames(int Count, string NamePrefix, string NameSuffix, string SurnamePrefix, string SurnameSuffix)
public static string[] GenerateNames(int Count, string NamePrefix, string NameSuffix, string SurnamePrefix, string SurnameSuffix, NameGenderType genderType = NameGenderType.Unified)
{
// Initialize names
PopulateNames();
PopulateNames(genderType);
return GenerateNameArray(Count, NamePrefix, NameSuffix, SurnamePrefix, SurnameSuffix);
}

/// <summary>
/// [Async] Generates the names
/// </summary>
/// <param name="genderType">Gender type to use when generating names</param>
/// <returns>List of generated names</returns>
public static async Task<string[]> GenerateNamesAsync() =>
await GenerateNamesAsync(10, "", "", "", "");
public static async Task<string[]> GenerateNamesAsync(NameGenderType genderType = NameGenderType.Unified) =>
await GenerateNamesAsync(10, "", "", "", "", genderType);

/// <summary>
/// [Async] Generates the names
/// </summary>
/// <param name="Count">How many names to generate?</param>
/// <param name="genderType">Gender type to use when generating names</param>
/// <returns>List of generated names</returns>
public static async Task<string[]> GenerateNamesAsync(int Count) =>
await GenerateNamesAsync(Count, "", "", "", "");
public static async Task<string[]> GenerateNamesAsync(int Count, NameGenderType genderType = NameGenderType.Unified) =>
await GenerateNamesAsync(Count, "", "", "", "", genderType);

/// <summary>
/// [Async] Generates the names
Expand All @@ -121,69 +138,76 @@ public static async Task<string[]> GenerateNamesAsync(int Count) =>
/// <param name="NameSuffix">What should the name end with?</param>
/// <param name="SurnamePrefix">What should the surname start with?</param>
/// <param name="SurnameSuffix">What should the surname end with?</param>
/// <param name="genderType">Gender type to use when generating names</param>
/// <returns>List of generated names</returns>
public static async Task<string[]> GenerateNamesAsync(int Count, string NamePrefix, string NameSuffix, string SurnamePrefix, string SurnameSuffix)
public static async Task<string[]> GenerateNamesAsync(int Count, string NamePrefix, string NameSuffix, string SurnamePrefix, string SurnameSuffix, NameGenderType genderType = NameGenderType.Unified)
{
// Initialize names
await PopulateNamesAsync();
await PopulateNamesAsync(genderType);
return GenerateNameArray(Count, NamePrefix, NameSuffix, SurnamePrefix, SurnameSuffix);
}

/// <summary>
/// Generates the first names
/// </summary>
/// <param name="genderType">Gender type to use when generating names</param>
/// <returns>List of generated names</returns>
public static string[] GenerateFirstNames() =>
GenerateFirstNames(10, "", "");
public static string[] GenerateFirstNames(NameGenderType genderType = NameGenderType.Unified) =>
GenerateFirstNames(10, "", "", genderType);

/// <summary>
/// Generates the first names
/// </summary>
/// <param name="Count">How many names to generate?</param>
/// <param name="genderType">Gender type to use when generating names</param>
/// <returns>List of generated names</returns>
public static string[] GenerateFirstNames(int Count) =>
GenerateFirstNames(Count, "", "");
public static string[] GenerateFirstNames(int Count, NameGenderType genderType = NameGenderType.Unified) =>
GenerateFirstNames(Count, "", "", genderType);

/// <summary>
/// Generates the first names
/// </summary>
/// <param name="Count">How many names to generate?</param>
/// <param name="NamePrefix">What should the name start with?</param>
/// <param name="NameSuffix">What should the name end with?</param>
/// <param name="genderType">Gender type to use when generating names</param>
/// <returns>List of generated names</returns>
public static string[] GenerateFirstNames(int Count, string NamePrefix, string NameSuffix)
public static string[] GenerateFirstNames(int Count, string NamePrefix, string NameSuffix, NameGenderType genderType = NameGenderType.Unified)
{
// Initialize names
PopulateNames();
PopulateNames(genderType);
return GenerateFirstNameArray(Count, NamePrefix, NameSuffix);
}

/// <summary>
/// [Async] Generates the first names
/// </summary>
/// <param name="genderType">Gender type to use when generating names</param>
/// <returns>List of generated names</returns>
public static async Task<string[]> GenerateFirstNamesAsync() =>
await GenerateFirstNamesAsync(10, "", "");
public static async Task<string[]> GenerateFirstNamesAsync(NameGenderType genderType = NameGenderType.Unified) =>
await GenerateFirstNamesAsync(10, "", "", genderType);

/// <summary>
/// [Async] Generates the first names
/// </summary>
/// <param name="Count">How many names to generate?</param>
/// <param name="genderType">Gender type to use when generating names</param>
/// <returns>List of generated names</returns>
public static async Task<string[]> GenerateFirstNamesAsync(int Count) =>
await GenerateFirstNamesAsync(Count, "", "");
public static async Task<string[]> GenerateFirstNamesAsync(int Count, NameGenderType genderType = NameGenderType.Unified) =>
await GenerateFirstNamesAsync(Count, "", "", genderType);

/// <summary>
/// [Async] Generates the first names
/// </summary>
/// <param name="Count">How many names to generate?</param>
/// <param name="NamePrefix">What should the name start with?</param>
/// <param name="NameSuffix">What should the name end with?</param>
/// <param name="genderType">Gender type to use when generating names</param>
/// <returns>List of generated names</returns>
public static async Task<string[]> GenerateFirstNamesAsync(int Count, string NamePrefix, string NameSuffix)
public static async Task<string[]> GenerateFirstNamesAsync(int Count, string NamePrefix, string NameSuffix, NameGenderType genderType = NameGenderType.Unified)
{
// Initialize names
await PopulateNamesAsync();
await PopulateNamesAsync(genderType);
return GenerateFirstNameArray(Count, NamePrefix, NameSuffix);
}

Expand Down

0 comments on commit 4ac1fad

Please sign in to comment.