diff --git a/src/modules/location/Location.cpp b/src/modules/location/Location.cpp index 050016f93..9c15414ab 100644 --- a/src/modules/location/Location.cpp +++ b/src/modules/location/Location.cpp @@ -2,6 +2,7 @@ #include +#include "../../common/FormatHelper.h" #include "../../common/mappers/precisionMapper/PrecisionMapper.h" #include "../../common/StringHelper.h" #include "data/Countries.h" @@ -104,71 +105,29 @@ std::string Location::streetAddress(Country country) { const auto& addressFormat = countryToAddressFormatMapping.at(country); - const auto addressFormatElements = StringHelper::split(addressFormat, " "); + const auto dataGeneratorsMapping = std::map>{ + {"buildingNumber", [&country]() { return buildingNumber(country); }}, + {"street", [&country]() { return street(country); }}}; - std::vector addressElements; - - for (const auto& addressFormatElement : addressFormatElements) - { - if (addressFormatElement == "{buildingNumber}") - { - addressElements.push_back(buildingNumber(country)); - } - else if (addressFormatElement == "{street}") - { - addressElements.push_back(street(country)); - } - } - - return StringHelper::join(addressElements, " "); + return FormatHelper::fillTokenValues(addressFormat, dataGeneratorsMapping); } std::string Location::street(Country country) { - // TODO: add internalization - const auto& streetFormats = countryToStreetFormatsMapping.at(country); const auto streetFormat = Helper::arrayElement(streetFormats); - const auto streetFormatElements = StringHelper::split(streetFormat, " "); - - std::vector streetNameElements; - - for (const auto& streetFormatElement : streetFormatElements) - { - if (streetFormatElement == "{firstName}") - { - streetNameElements.push_back(Person::firstName()); - } - else if (streetFormatElement == "{lastName}") - { - streetNameElements.push_back(Person::lastName()); - } - else if (streetFormatElement == "{streetSuffix}") - { - const auto& streetSuffixes = countryToStreetSuffixesMapping.at(country); - - const auto streetSuffix = Helper::arrayElement(streetSuffixes); - - streetNameElements.push_back(streetSuffix); - } - else if (streetFormatElement == "{streetPrefix}") - { - const auto& streetPrefixes = countryToStreetPrefixesMapping.at(country); - - const auto streetPrefix = Helper::arrayElement(streetPrefixes); - - streetNameElements.push_back(streetPrefix); - } - else if (streetFormatElement == "{streetName}") - { - const auto& streets = countryToStreetsMapping.at(country); - streetNameElements.push_back(Helper::arrayElement(streets)); - } - } - - return StringHelper::join(streetNameElements, " "); + const auto dataGeneratorsMapping = std::map>{ + {"firstName", [&country]() { return Person::firstName(country); }}, + {"lastName", [&country]() { return Person::lastName(country); }}, + {"streetName", [&country]() { return Helper::arrayElement(countryToStreetsMapping.at(country)); }}, + {"streetPrefix", + [&country]() { return Helper::arrayElement(countryToStreetPrefixesMapping.at(country)); }}, + {"streetSuffix", + [&country]() { return Helper::arrayElement(countryToStreetSuffixesMapping.at(country)); }}}; + + return FormatHelper::fillTokenValues(streetFormat, dataGeneratorsMapping); } std::string Location::buildingNumber(Country country) diff --git a/src/modules/location/data/russia/RussiaStreetNames.h b/src/modules/location/data/russia/RussiaStreetNames.h index e69de29bb..726631fd6 100644 --- a/src/modules/location/data/russia/RussiaStreetNames.h +++ b/src/modules/location/data/russia/RussiaStreetNames.h @@ -0,0 +1,305 @@ +#pragma once + +#include +#include + +namespace faker +{ +const std::vector russiaStreets = {"Советская", + "Молодежная", + "Центральная", + "Школьная", + "Новая", + "Садовая", + "Лесная", + "Набережная", + "Октябрьская", + "Зеленая", + "Комсомольская", + "Заречная", + "Первомайская", + "Полевая", + "Луговая", + "Пионерская", + "Юбилейная", + "Северная", + "Пролетарская", + "Степная", + "Южная", + "Колхозная", + "Рабочая", + "Солнечная", + "Железнодорожная", + "Восточная", + "Заводская", + "Нагорная", + "Береговая", + "Кооперативная", + "Красноармейская", + "Совхозная", + "Речная", + "Спортивная", + "Озерная", + "Строительная", + "Парковая", + "Подгорная", + "Почтовая", + "Партизанская", + "Вокзальная", + "Дорожная", + "Дачная", + "Западная", + "Московская", + "Красная", + "Трудовая", + "Шоссейная", + "Коммунистическая", + "Сосновая", + "Клубная", + "Березовая", + "Больничная", + "Интернациональная", + "Цветочная", + "Трактовая", + "Горная", + "Весенняя", + "Коммунальная", + "Майская", + "Привокзальная", + "Таежная", + "Транспортная", + "Овражная", + "Светлая", + "Вишневая", + "Ключевая", + "Песчаная", + "Ленинградская", + "Профсоюзная", + "Верхняя", + "Ленинская", + "Кирпичная", + "Мостовая", + "Станционная", + "Уральская", + "Линейная", + "Фабричная", + "Магистральная", + "Сибирская", + "Крестьянская", + "Российская", + "Тихая", + "Широкая", + "Нижняя", + "Народная", + "Промышленная", + "Кольцевая", + "Дальняя", + "Базарная", + "Целинная", + "Родниковая", + "Революционная", + "Социалистическая", + "Звездная", + "Студенческая", + "Мирная", + "Кубанская", + "Гаражная", + "Фестивальная", + "Гражданская", + "Песочная", + "Сиреневая", + "Сельская", + "Кузнечная", + "Пушкинская", + "Крайняя", + "Гвардейская", + "Веселая", + "Загородная", + "Олимпийская", + "Приозерная", + "Рябиновая", + "Заозерная", + "Боровая", + "Урожайная", + "Торговая", + "Донская", + "Пограничная", + "Огородная", + "Пригородная", + "Стадионная", + "Виноградная", + "Киевская", + "Индустриальная", + "Красногвардейская", + "Волжская", + "Свободная", + "Кедровая", + "Подлесная", + "Полярная", + "Раздольная", + "Карьерная", + "Мельничная", + "Украинская", + "Шахтерская", + "Запрудная", + "Элеваторная", + "Театральная", + "Геологическая", + "Болотная", + "Придорожная", + "Кленовая", + "Казачья", + "Малая", + "Морская", + "Волгоградская", + "Средняя", + "Безымянная", + "Краснофлотская", + "Братская", + "Тенистая", + "Учительская", + "Кавказская", + "Короткая", + "Деповская", + "Амурская", + "Сенная", + "Поселковая", + "Прудовая", + "Депутатская", + "Авиационная", + "Аэродромная", + "Большая", + "Приморская", + "Алтайская", + "Тополиная", + "Ростовская", + "Тракторная", + "Мелиоративная", + "Ольховая", + "Славянская", + "Радужная", + "Краснодарская", + "Стахановская", + "Ярославская", + "Коллективная", + "Ангарская", + "Локомотивная", + "Ягодная", + "Смоленская", + "Тепличная", + "Водопроводная", + "Республиканская", + "Осенняя", + "Байкальская", + "Саратовская", + "Казанская", + "Воронежская", + "Брянская", + "Производственная", + "Техническая", + "Енисейская", + "Севастопольская", + "Окружная", + "Орловская", + "Хуторская", + "Тупиковая", + "Каштановая", + "Омская", + "Привольная", + "Курортная", + "Ивановская", + "Выгонная", + "Крымская", + "Путейская", + "Проезжая", + "Краснознаменная", + "Одесская", + "Логовая", + "Высокая", + "Ясная", + "Портовая", + "Снежная", + "Санаторная", + "Союзная", + "Ульяновская", + "Сахалинская", + "Горняцкая", + "Прибрежная", + "Рыбацкая", + "Полтавская", + "Тамбовская", + "Красноярская", + "Новосельская", + "Проточная", + "Черноморская", + "Минская", + "Главная", + "Вольная", + "Хвойная", + "Космическая", + "Моховая", + "Курская", + "Курганная", + "Угловая", + "Камская", + "Инженерная", + "Лесозаводская", + "Астраханская", + "Белорусская", + "Заовражная", + "Азовская", + "Ручейная", + "Волочаевская", + "Ставропольская", + "Слободская", + "Тульская", + "Харьковская", + "Петровская", + "Владимирская", + "Высоковольтная", + "Лазурная", + "Покровская", + "Новгородская", + "Ленская", + "Сплавная", + "Ударная", + "Калужская", + "Прудная", + "Краснопартизанская", + "Ореховая", + "Таманская", + "Иркутская", + "Отрадная", + "Большевистская", + "Троицкая", + "Лесхозная", + "Васильковая", + "Механическая", + "Путевая", + "Кузнецкая", + "Физкультурная", + "Черемуховая", + "Флотская", + "Угольная", + "Просторная", + "Поперечная", + "Городская", + "Абрикосовая", + "Бульварная", + "Прохладная", + "Томская", + "Энергетическая", + "Литейная", + "Медицинская", + "Заливная", + "Бригадная", + "Детская", + "Запорожская", + "Дальневосточная", + "Балтийская", + "Февральская", + "Лунная", + "Высотная", + "Рязанская", + "Малиновая"}; +} diff --git a/src/modules/person/Person.cpp b/src/modules/person/Person.cpp index 4067e6d07..093c27fe7 100644 --- a/src/modules/person/Person.cpp +++ b/src/modules/person/Person.cpp @@ -171,15 +171,13 @@ std::string Person::fullName(Country country, std::optional sex) const auto nameFormat = Helper::weightedArrayElement(weightedElements); const auto dataGeneratorsMapping = std::map>{ - {"firstName", [&country, &sex]() { return Person::firstName(country, sex); }}, + {"firstName", [&country, &sex]() { return firstName(country, sex); }}, {"middleName", [&country, &sex]() { return middleNameForCountry(country, sex); }}, - {"lastName", [&country, &sex]() { return Person::lastName(country, sex); }}, + {"lastName", [&country, &sex]() { return lastName(country, sex); }}, {"prefix", [&country, &sex]() { return prefixForCountry(country, sex); }}, {"suffix", [&country, &sex]() { return suffixForCountry(country, sex); }}}; - auto fullName = FormatHelper::fillTokenValues(nameFormat, dataGeneratorsMapping); - - return fullName; + return FormatHelper::fillTokenValues(nameFormat, dataGeneratorsMapping); } std::string Person::prefix(std::optional sex)