Skip to content

Commit c247f2d

Browse files
committed
Refactor generator extensions and improve code organization
- Consolidated methods into extensions for better grouping and readability. - Reintroduced `Get(int count)` method into `Faker` base class. - Adjusted username data file loading to simplify format. - Added `ToString` override for `Generator` to provide readable outputs. - Minor visibility updates to `Token` records.
1 parent 252442d commit c247f2d

6 files changed

Lines changed: 41 additions & 41 deletions

File tree

Forged.Core/Core/TemplateCompiler.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,6 @@ public static string Render(List<Token> tokens, Dictionary<string, Func<string>>
7373
}
7474

7575
internal abstract record Token;
76-
internal sealed record Literal(string Value) : Token;
77-
internal sealed record Placeholder(string Key) : Token;
76+
private sealed record Literal(string Value) : Token;
77+
private sealed record Placeholder(string Key) : Token;
7878
}

Forged.Core/Faker.cs

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,14 @@ public abstract class Faker<TModel>(Random? random = null, CultureInfo? locale =
2525
/// </summary>
2626
/// <param name="count">The number of instances to generate.</param>
2727
/// <returns>An enumerable of fake model instances.</returns>
28-
public abstract IEnumerable<TModel> Get(int count);
29-
30-
28+
public IEnumerable<TModel> Get(int count)
29+
{
30+
for (var i = 0; i < count; i++)
31+
{
32+
yield return Get();
33+
}
34+
}
35+
3136
/// <summary>
3237
/// Generates a random number of fake model instances within a specified range.
3338
/// </summary>

Forged.Core/Generators/Generator.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,4 +131,10 @@ public Generator<HashSet<T>> HashSet(int length)
131131
/// <returns>A generator that produces hash sets of generated values.</returns>
132132
public Generator<HashSet<T>> HashSet(int minLength, int maxLength)
133133
=> new EnumerableGenerator<T>(this, minLength, maxLength, Forge).Refine<HashSet<T>>(static e => e.ToHashSet());
134+
135+
/// <summary>
136+
/// Returns a string representation of the generated value.
137+
/// </summary>
138+
/// <returns>A string representation of the value generated by this generator, or null if the generated value is null.</returns>
139+
public override string? ToString() => Generate()?.ToString();
134140
}

Forged.Core/Generators/GeneratorExtensions.cs

Lines changed: 24 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -157,32 +157,24 @@ public static Generator<string> ToString<T>(this Generator<T> generator, string
157157
public static Generator<List<T>> AsList<T>(this Generator<IEnumerable<T>> generator)
158158
=> new RefineGenerator<IEnumerable<T>, List<T>>(generator, static e => e.ToList(), generator.Forge);
159159

160-
/// <summary>
161-
/// Converts collections from a generator to lists.
162-
/// </summary>
163-
/// <typeparam name="T">The type of items in the collection.</typeparam>
164160
/// <param name="generator">The generator to convert.</param>
165-
/// <returns>A generator that produces lists.</returns>
166-
public static Generator<List<T>> AsList<T>(this Generator<ICollection<T>> generator)
167-
=> new RefineGenerator<ICollection<T>, List<T>>(generator, static c => c.ToList(), generator.Forge);
168-
169-
/// <summary>
170-
/// Converts enumerables from a generator to hash sets.
171-
/// </summary>
172-
/// <typeparam name="T">The type of items in the enumerable.</typeparam>
173-
/// <param name="generator">The generator to convert.</param>
174-
/// <returns>A generator that produces hash sets.</returns>
175-
public static Generator<HashSet<T>> AsHashSet<T>(this Generator<IEnumerable<T>> generator)
176-
=> new RefineGenerator<IEnumerable<T>, HashSet<T>>(generator, static e => e.ToHashSet(), generator.Forge);
177-
178-
/// <summary>
179-
/// Converts collections from a generator to hash sets.
180-
/// </summary>
181161
/// <typeparam name="T">The type of items in the collection.</typeparam>
182-
/// <param name="generator">The generator to convert.</param>
183-
/// <returns>A generator that produces hash sets.</returns>
184-
public static Generator<HashSet<T>> AsHashSet<T>(this Generator<ICollection<T>> generator)
185-
=> new RefineGenerator<ICollection<T>, HashSet<T>>(generator, static c => c.ToHashSet(), generator.Forge);
162+
extension<T>(Generator<ICollection<T>> generator)
163+
{
164+
/// <summary>
165+
/// Converts collections from a generator to lists.
166+
/// </summary>
167+
/// <returns>A generator that produces lists.</returns>
168+
public Generator<List<T>> AsList()
169+
=> new RefineGenerator<ICollection<T>, List<T>>(generator, static c => c.ToList(), generator.Forge);
170+
171+
/// <summary>
172+
/// Converts collections from a generator to hash sets.
173+
/// </summary>
174+
/// <returns>A generator that produces hash sets.</returns>
175+
public Generator<HashSet<T>> AsHashSet()
176+
=> new RefineGenerator<ICollection<T>, HashSet<T>>(generator, static c => c.ToHashSet(), generator.Forge);
177+
}
186178

187179
/// <param name="generator">The generator to convert.</param>
188180
/// <typeparam name="T">The type of items in the enumerable.</typeparam>
@@ -200,15 +192,21 @@ public Generator<Dictionary<TKey, TValue>> AsDictionary<TKey, TValue>(Func<T, TK
200192
Func<T, TValue> valueSelector
201193
) where TKey : notnull
202194
=> generator.Refine(e => e.ToDictionary(keySelector, valueSelector));
203-
204-
195+
205196
/// <summary>
206197
/// Creates a generator that produces shuffled versions of the enumerable generated by the given generator.
207198
/// </summary>
208199
/// <typeparam name="T">The type of elements in the enumerable being shuffled.</typeparam>
209200
/// <returns>A generator that produces shuffled enumerables.</returns>
210201
public Generator<IEnumerable<T>> Shuffle()
211202
=> new ShuffleGenerator<T>(generator, generator.Forge);
203+
204+
/// <summary>
205+
/// Converts enumerables from a generator to hash sets.
206+
/// </summary>
207+
/// <returns>A generator that produces hash sets.</returns>
208+
public Generator<HashSet<T>> AsHashSet()
209+
=> new RefineGenerator<IEnumerable<T>, HashSet<T>>(generator, static e => e.ToHashSet(), generator.Forge);
212210
}
213211

214212
}

Forged.Core/Generators/Person/UsernameGenerator.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ public sealed class UsernameGenerator(float prefixChance, float suffixChance, fl
5050
/// <returns>A randomly generated username that may include a prefix, suffix, and leet-speak substitutions based on the configured probabilities.</returns>
5151
public override string Generate()
5252
{
53-
var data = FileLoader.LoadData(Locale.Name, "username.json5", UserDataContext.Default.UserData);
53+
var data = FileLoader.LoadData(Locale.Name, "username", UserDataContext.Default.UserData);
5454

5555
var usePrefix = Rng.NextSingle() < prefixChance;
5656
var useSuffix = Rng.NextSingle() < suffixChance;

Forged.Generator/ForgedGenerator.cs

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -125,15 +125,6 @@ private static void Execute(SourceProductionContext context, TypeToGenerate? typ
125125

126126
sb.AppendLine(" };");
127127
sb.AppendLine(" }");
128-
129-
sb.AppendLine();
130-
sb.AppendLine($" public override IEnumerable<{typeToGenerate.Name}> Get(int count)");
131-
sb.AppendLine(" {");
132-
sb.AppendLine(" for (var i = 0; i < count; i++)");
133-
sb.AppendLine(" {");
134-
sb.AppendLine(" yield return Get();");
135-
sb.AppendLine(" }");
136-
sb.AppendLine(" }");
137128
sb.AppendLine("}");
138129

139130
context.AddSource($"{typeToGenerate.Name}Faker.g.cs", SourceText.From(sb.ToString(), Encoding.UTF8));

0 commit comments

Comments
 (0)