Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
33 changes: 21 additions & 12 deletions lib/src/random_name_generator_base.dart
Original file line number Diff line number Diff line change
Expand Up @@ -5,16 +5,19 @@ import 'zone.dart';
/// Base class for random name generators
class RandomNames {
final Zone _zone;
final Random? _random;
final Random _random;

/// Creates a new instance of RandomNames that accepts a [Random] instance
/// to be used for generating random names allowing to generate names in a
/// reproducible way.
RandomNames.seeded({
Zone? zone,
Random? random,
}) : _random = random,
_zone = zone ?? ([...Zone.all]..shuffle(random)).first;
}) : _random = random ?? Random(),
_zone = zone ?? ([...Zone.all]..shuffle(random)).first {
if (_zone.surnamesW.isEmpty)
_zone.surnamesW = _zone.surnames;
}

factory RandomNames([Zone? zone]) => RandomNames.seeded(zone: zone);

Expand All @@ -35,32 +38,38 @@ class RandomNames {

/// Returns a random surname
String surname() {
return ([..._zone.surnames, ..._zone.surnamesW]..shuffle(_random)).first;
}

/// Returns a random surname for a woman
String womanSurname() {
return ([..._zone.surnamesW]..shuffle(_random)).first;
}

/// Returns a random surname for a man
String manSurname() {
return ([..._zone.surnames]..shuffle(_random)).first;
}

/// Returns a random full name
String fullName() {
return _zone.fullNameStructure
.replaceFirst("_S_", surname())
.replaceFirst("_S_", surname())
.replaceFirst("_N_", name())
.replaceFirst("_N_", name());
return _random.nextBool() ? womanFullName() : manFullName();
}

/// Returns a random full name for a woman
String womanFullName() {
return _zone.fullNameStructure
.replaceFirst("_S_", surname())
.replaceFirst("_S_", surname())
.replaceFirst("_S_", womanSurname())
.replaceFirst("_S_", womanSurname())
.replaceFirst("_N_", womanName())
.replaceFirst("_N_", womanName());
}

/// Returns a random full name for a man
String manFullName() {
return _zone.fullNameStructure
.replaceFirst("_S_", surname())
.replaceFirst("_S_", surname())
.replaceFirst("_S_", manSurname())
.replaceFirst("_S_", manSurname())
.replaceFirst("_N_", manName())
.replaceFirst("_N_", manName());
}
Expand Down
6 changes: 6 additions & 0 deletions lib/src/zone.dart
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,9 @@ abstract class Zone {
/// List of surnames
List<String> surnames = [];

/// List of surnames in their female variation (which is often the same as the male surname)
List<String> surnamesW = [];

/// List of male first names
List<String> namesM = [];

Expand All @@ -48,9 +51,12 @@ abstract class Zone {
String get fullNameStructure => "_N_ _S_";

static Zone catalonia = Catalonia();
static Zone catalonia_long = Catalonia(twoSurnames: true);
static Zone france = France();
static Zone spain = Spain();
static Zone spain_long = Spain(twoSurnames: true);
static Zone us = US();
static Zone us_long = US(useMiddleNames: true);
static Zone uk = UK();
static Zone turkey = Turkey();
static Zone germany = Germany();
Expand Down
42 changes: 17 additions & 25 deletions lib/src/zones/russia.dart
Original file line number Diff line number Diff line change
Expand Up @@ -52,11 +52,26 @@ class Russia extends Zone {
"Belyaev",
"Titov",
"Lazarev",
"Morozova",
"Nikitina",
];

surnamesW = [
"Ivanova",
"Smirnova",
"Kuznetsova",
"Popova",
"Vasilieva",
"Petrova",
"Sokolova",
"Mikhailova",
"Novikova",
"Fedorova",
"Morozova",
"Volkova",
"Alekseeva",
"Lebedeva",
"Semenova",
"Egorova",
"Pavlova",
"Kozlova",
"Stepanova",
"Nikitina",
Expand Down Expand Up @@ -85,29 +100,6 @@ class Russia extends Zone {
"Belyaeva",
"Titova",
"Lazareva",
"Pavlova",
"Kotova",
"Golubeva",
"Volkova",
"Kuzmina",
"Mironova",
"Konovalova",
"Zaytseva",
"Solovieva",
"Bogdanova",
"Vorobeva",
"Simonova",
"Konstantinova",
"Kharitonova",
"Belyakova",
"Shirokova",
"Sokolnikova",
"Andreeva",
"Yakovleva",
"Gavrilova",
"Belyaeva",
"Titova",
"Lazareva"
];

namesM = [
Expand Down
103 changes: 102 additions & 1 deletion lib/src/zones/ukraine.dart
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,6 @@ class Ukraine extends Zone {
"Rudenko",
"Vasylev",
"Polishchuk",
"Sokolova",
"Mykytenko",
"Frolov",
"Melnichenko",
Expand All @@ -108,6 +107,108 @@ class Ukraine extends Zone {
"Humeniuk"
];

surnamesW = [
"Ivanenko",
"Petrovych",
"Kovalenko",
"Tkachenko",
"Morozova",
"Savchenko",
"Kozlova",
"Shevchenko",
"Stepanova",
"Kovalchuk",
"Oliynyk",
"Kravchenko",
"Melnik",
"Bondarenko",
"Tymoshenko",
"Kozak",
"Yakovych",
"Zaytseva",
"Romanenko",
"Lysenko",
"Fedorova",
"Andriyenko",
"Zakharova",
"Goncharova",
"Dmytruk",
"Chernyshova",
"Prokhorova",
"Semenova",
"Bilyk",
"Makarenko",
"Kononenko",
"Bogdanova",
"Fomin",
"Gavrylova",
"Nikolenko",
"Rusnak",
"Mykhailenko",
"Shapovalova",
"Holovko",
"Shved",
"Doroshenko",
"Kushnir",
"Popovych",
"Kucherenko",
"Karpenko",
"Kucher",
"Zaitseva",
"Klymenko",
"Yurchenko",
"Osipova",
"Boyko",
"Pavlenko",
"Mykolenko",
"Vasylchenko",
"Korol",
"Mosiychuk",
"Lytvynenko",
"Korzh",
"Solovyova",
"Kryvtsova",
"Antonova",
"Danylo",
"Ostapenko",
"Sokolova",
"Oleksyuk",
"Martynenko",
"Kovalenko",
"Ishchenko",
"Zadorozhna",
"Shcherbakova",
"Khomenko",
"Korol",
"Mazur",
"Sereda",
"Kovalchuk",
"Rudenko",
"Vasyleva",
"Polishchuk",
"Mykytenko",
"Frolova",
"Melnichenko",
"Shulga",
"Mazurenko",
"Sydorovych",
"Skrypnyk",
"Ovcharenko",
"Drozd",
"Yemets",
"Panfilova",
"Shcherbak",
"Bykova",
"Kryvda",
"Kurylo",
"Sydorenko",
"Ostapovych",
"Kuznetsova",
"Shevchuk",
"Kupchak",
"Humeniuk"
];

namesM = [
"Oleksandr",
"Andriy",
Expand Down
8 changes: 7 additions & 1 deletion lib/src/zones/us.dart
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,10 @@ import '../zone.dart';
class US extends Zone {
@override
String id = "us";
US() {
bool _useMiddleNames = false;

US({bool useMiddleNames = false}) {
_useMiddleNames = useMiddleNames;
surnames = [
"Smith",
"Johnson",
Expand Down Expand Up @@ -314,4 +317,7 @@ class US extends Zone {
"Lori",
];
}

@override
String get fullNameStructure => _useMiddleNames ? "_N_ _N_ _S_" : "_N_ _S_";
}