diff --git a/.github/workflows/static-analysis.yml b/.github/workflows/static-analysis.yml index c822b1d..18c9302 100644 --- a/.github/workflows/static-analysis.yml +++ b/.github/workflows/static-analysis.yml @@ -88,4 +88,58 @@ jobs: - name: Run Psalm run: | - vendor/bin/psalm --no-progress --output-format=github + vendor/bin/psalm --no-progress --output-format=github --shepherd + + php-cs-fixer: + name: php-cs-fixer + + runs-on: ubuntu-latest + + strategy: + matrix: + php-version: + - 7.1 + + steps: + - name: Checkout code + uses: actions/checkout@v2 + + - name: Set up PHP + uses: shivammathur/setup-php@v2 + with: + coverage: none + extensions: intl + php-version: ${{ matrix.php-version }} + + - name: Determine composer cache directory + id: composer-cache + run: echo "::set-output name=directory::$(composer config cache-dir)" + + - name: Cache dependencies installed with composer + uses: actions/cache@v2 + with: + path: ${{ steps.composer-cache.outputs.directory }} + key: composer-${{ runner.os }}-${{ matrix.php-version }}-${{ hashFiles('composer.*') }} + restore-keys: | + composer-${{ runner.os }}-${{ matrix.php-version }}- + composer-${{ runner.os }}- + composer- + + - name: Download dependencies + run: | + composer update --no-interaction --no-progress --optimize-autoloader + composer bin php-cs-fixer install --no-interaction --no-progress --optimize-autoloader + + - name: Cache cache file for php-cs-fixer + uses: actions/cache@v2 + with: + path: .php_cs.cache + key: composer-${{ runner.os }}-${{ matrix.php-version }}-${{ hashFiles('composer.*') }} + restore-keys: | + composer-${{ runner.os }}-${{ matrix.php-version }}- + composer-${{ runner.os }}- + composer- + + - name: Run php-cs-fixer + run: | + vendor/bin/php-cs-fixer fix --diff --diff-format=udiff --dry-run --verbose diff --git a/.gitignore b/.gitignore index 4fbb073..3452648 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ /vendor/ -/composer.lock +composer.lock +.php_cs.cache diff --git a/.php_cs b/.php_cs new file mode 100644 index 0000000..1db492a --- /dev/null +++ b/.php_cs @@ -0,0 +1,14 @@ +in('src'); + +$config = new PhpCsFixer\Config('faker'); + +return $config + ->setFinder($finder) + ->setRiskyAllowed(true) + ->setRules([ + '@PSR2' => true, + '@Symfony' => true, + ]); diff --git a/README.md b/README.md index a138b71..b6c9572 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,6 @@ [![Packagist Downloads](https://img.shields.io/packagist/dm/FakerPHP/Swedish)](https://packagist.org/packages/fakerphp/swedish) [![GitHub Workflow Status](https://img.shields.io/github/workflow/status/FakerPHP/Swedish/Continuous%20Integration/main)](https://github.com/FakerPHP/Swedish/actions) -[![StyleCI](https://github.styleci.io/repos/307658860/shield?branch=main&style=flat)](https://github.styleci.io/repos/307658860?branch=main) Swedish specific extensions for Faker @@ -23,11 +22,11 @@ Full documentation can be found over on [fakerphp.github.io](https://fakerphp.gi Use `Faker\Swedish\Factory::sweden()` to create and initialize a faker generator with Swedish extensions. ```php -name(); // 'Åke Svensson'; ``` diff --git a/src/Address.php b/src/Address.php index 196bc59..e5bef89 100644 --- a/src/Address.php +++ b/src/Address.php @@ -2,27 +2,35 @@ namespace Faker\Swedish; -class Address +use Faker\Extension\AddressExtension; +use Faker\Extension\GeneratorAwareExtension; +use Faker\Extension\GeneratorAwareExtensionTrait; +use Faker\Extension\Helper; + +class Address implements AddressExtension, GeneratorAwareExtension { + use GeneratorAwareExtensionTrait; + private $buildingNumber = ['%###', '%##', '%#', '%#?', '%', '%?']; private $streetPrefix = [ - 'Stor', 'Små', 'Lill', 'Sjö', 'Kungs', 'Drottning', 'Hamn', 'Brunns', 'Linné', 'Vasa', 'Ring', 'Freds' + 'Stor', 'Små', 'Lill', 'Sjö', 'Kungs', 'Drottning', 'Hamn', 'Brunns', 'Linné', 'Vasa', 'Ring', 'Freds', ]; private $streetSuffix = [ - 'vägen', 'gatan', 'gränd', 'stigen', 'backen', 'liden' + 'vägen', 'gatan', 'gränd', 'stigen', 'backen', 'liden', ]; private $streetSuffixWord = [ - 'Allé', 'Gata', 'Väg', 'Backe' + 'Allé', 'Gata', 'Väg', 'Backe', ]; private $postcode = ['%####', '%## ##']; /** * @var array Swedish city names - * @link http://sv.wikipedia.org/wiki/Lista_%C3%B6ver_Sveriges_t%C3%A4torter + * + * @see http://sv.wikipedia.org/wiki/Lista_%C3%B6ver_Sveriges_t%C3%A4torter */ private $cityNames = [ 'Abbekås', 'Abborrberget', 'Agunnaryd', 'Alberga', 'Alby', 'Alfta', 'Algutsrum', 'Alingsås', 'Allerum', 'Almunge', 'Alsike', 'Alstad', 'Alster', 'Alsterbro', 'Alstermo', 'Alunda', 'Alvesta', 'Alvhem', 'Alvik', 'Alvik', 'Ambjörby', 'Ambjörnarp', 'Ammenäs', 'Andalen', 'Anderslöv', 'Anderstorp', 'Aneby', 'Angelstad', 'Angered', 'Ankarsrum', 'Ankarsvik', 'Anneberg', 'Anneberg', 'Annelund', 'Annelöv', 'Antnäs', 'Aplared', 'Arboga', 'Arbrå', 'Ardala', 'Arentorp', 'Arild', 'Arjeplog', 'Arkelstorp', 'Arnäsvall', 'Arnö', 'Arontorp', 'Arvidsjaur', 'Arvika', 'Aröd och Timmervik', 'Askeby', 'Askersby', 'Askersund', 'Asmundtorp', 'Asperö', 'Aspås', 'Avan', 'Avesta', 'Axvall', @@ -50,101 +58,88 @@ class Address 'Zinkgruvan', 'Åby', 'Åby', 'Åbyggeby', 'Åbytorp', 'Åhus', 'Åkarp', 'Åkers styckebruk', 'Åkersberga', 'Ålberga', 'Åled', 'Ålem', 'Åmmeberg', 'Åmot', 'Åmotfors', 'Åmsele', 'Åmynnet', 'Åmål', 'Ånge', 'Ånäset', 'Åre', 'Årjäng', 'Årstad', 'Årsunda', 'Åryd', 'Åryd', 'Ås', 'Ås', 'Åsa', 'Åsarne', 'Åsarp', 'Åsbro', 'Åsby', 'Åseda', 'Åsele', 'Åselstad', 'Åsen', 'Åsenhöga', 'Åsensbruk', 'Åshammar', 'Åsljunga', 'Åstol', 'Åstorp', 'Återvall', 'Åtorp', 'Åtvidaberg', 'Älandsbro', 'Älgarås', 'Älghult', 'Älmhult', 'Älmsta', 'Älta', 'Älvdalen', 'Älvkarleby', 'Älvnäs', 'Älvsbyn', 'Älvsered', 'Älvängen', 'Äng', 'Änge', 'Ängelholm', 'Ängsholmen', 'Ängsvik', 'Äppelbo', 'Ärla', 'Äsköping', 'Äspered', 'Äsperöd', 'Ätran', - 'Öbonäs', 'Öckerö', 'Ödeborg', 'Ödeshög', 'Ödsmål', 'Ödåkra', 'Öggestorp', 'Öjersjö', 'Ölmanäs', 'Ölmbrotorp', 'Ölme', 'Ölmstad', 'Ölsta', 'Önneköp', 'Önnestad', 'Örbyhus', 'Örebro', 'Öregrund', 'Örkelljunga', 'Örnsköldsvik', 'Örserum', 'Örsjö', 'Örslösa', 'Örsundsbro', 'Örtagården', 'Örtofta', 'Örviken', 'Ösmo', 'Östadkulle', 'Östansjö', 'Östavall', 'Österbybruk', 'Österbymo', 'Österforse', 'Österfärnebo', 'Österhagen och Bergliden', 'Österslöv', 'Österstad', 'Östersund', 'Östervåla', 'Östhammar', 'Östhamra', 'Östmark', 'Östnor', 'Östorp och Ådran', 'Östra Bispgården', 'Östra Frölunda', 'Östra Grevie', 'Östra Husby', 'Östra Kallfors', 'Östra Karup', 'Östra Ljungby', 'Östra Ryd', 'Östra Sönnarslöv', 'Östra Tommarp', 'Östra Ånneröd', 'Östraby', 'Överboda', 'Överhörnäs', 'Överkalix', 'Överlida', 'Övertorneå', 'Överum', 'Övre Soppero', 'Övre Svartlå', 'Öxabäck', 'Öxeryd' - ]; - - private $cityFormats = [ - '{{cityName}}' - ]; - - private $state = []; - - private $stateAbbr = []; - - private $country = [ - 'Afghanistan', 'Albanien', 'Algeriet', 'Amerikanska Jungfruöarna', 'Amerikanska Samoa', 'Andorra', 'Angola', 'Anguilla', 'Antarktis', 'Antigua och Barbuda', 'Argentina', 'Armenien', 'Aruba', 'Australien', 'Azerbajdzjan', - 'Bahamas', 'Bahrain', 'Bangladesh', 'Barbados', 'Belgien', 'Belize', 'Benin', 'Bermuda', 'Bhutan', 'Bolivia', 'Bosnien och Hercegovina', 'Botswana', 'Bouvetön', 'Brasilien', 'Brittiska Indiska oceanöarna', 'Brittiska Jungfruöarna', 'Brunei', 'Bulgarien', 'Burkina Faso', 'Burundi', - 'Caymanöarna', 'Centralafrikanska republiken', 'Chile', 'Colombia', 'Cooköarna', 'Costa Rica', 'Cypern', - 'Danmark', 'Djibouti', 'Dominica', 'Dominikanska republiken', - 'Ecuador', 'Egypten', 'Ekvatorialguinea', 'El Salvador', 'Elfenbenskusten', 'Eritrea', 'Estland', 'Etiopien', - 'Falklandsöarna', 'Fiji', 'Filippinerna', 'Finland', 'Frankrike', 'Franska Guyana', 'Franska Polynesien', 'Franska Sydterritorierna', 'Färöarna', 'Förenade Arabemiraten', - 'Gabon', 'Gambia', 'Georgien', 'Ghana', 'Gibraltar', 'Grekland', 'Grenada', 'Grönland', 'Guadeloupe', 'Guam', 'Guatemala', 'Guernsey', 'Guinea', 'Guinea-Bissau', 'Guyana', - 'Haiti', 'Heard- och McDonaldöarna', 'Honduras', 'Hongkong (S.A.R. Kina)', - 'Indien', 'Indonesien', 'Irak', 'Iran', 'Irland', 'Island', 'Isle of Man', 'Israel', 'Italien', - 'Jamaica', 'Japan', 'Jemen', 'Jersey', 'Jordanien', 'Julön', - 'Kambodja', 'Kamerun', 'Kanada', 'Kap Verde', 'Kazakstan', 'Kenya', 'Kina', 'Kirgizistan', 'Kiribati', 'Kokosöarna', 'Komorerna', 'Kongo-Brazzaville', 'Kongo-Kinshasa', 'Kroatien', 'Kuba', 'Kuwait', - 'Laos', 'Lesotho', 'Lettland', 'Libanon', 'Liberia', 'Libyen', 'Liechtenstein', 'Litauen', 'Luxemburg', - 'Macao (S.A.R. Kina)', 'Madagaskar', 'Makedonien', 'Malawi', 'Malaysia', 'Maldiverna', 'Mali', 'Malta', 'Marocko', 'Marshallöarna', 'Martinique', 'Mauretanien', 'Mauritius', 'Mayotte', 'Mexiko', 'Mikronesien', 'Moldavien', 'Monaco', 'Mongoliet', 'Montenegro', 'Montserrat', 'Moçambique', 'Myanmar', - 'Namibia', 'Nauru', 'Nederländerna', 'Nederländska Antillerna', 'Nepal', 'Nicaragua', 'Niger', 'Nigeria', 'Niue', 'Nordkorea', 'Nordmarianerna', 'Norfolkön', 'Norge', 'Nya Kaledonien', 'Nya Zeeland', - 'Oman', - 'Pakistan', 'Palau', 'Palestinska territoriet', 'Panama', 'Papua Nya Guinea', 'Paraguay', 'Peru', 'Pitcairn', 'Polen', 'Portugal', 'Puerto Rico', - 'Qatar', - 'Rumänien', 'Rwanda', 'Ryssland', 'Réunion', - 'S:t Barthélemy', 'S:t Helena', 'S:t Kitts och Nevis', 'S:t Lucia', 'S:t Martin', 'S:t Pierre och Miquelon', 'S:t Vincent och Grenadinerna', 'Salomonöarna', 'Samoa', 'San Marino', 'Saudiarabien', 'Schweiz', 'Senegal', 'Serbien', 'Serbien och Montenegro', 'Seychellerna', 'Sierra Leone', 'Singapore', 'Slovakien', 'Slovenien', 'Somalia', 'Spanien', 'Sri Lanka', 'Storbritannien', 'Sudan', 'Surinam', 'Svalbard och Jan Mayen', 'Sverige', 'Swaziland', 'Sydafrika', 'Sydgeorgien och Södra Sandwichöarna', 'Sydkorea', 'Syrien', 'São Tomé och Príncipe', - 'Tadzjikistan', 'Taiwan', 'Tanzania', 'Tchad', 'Thailand', 'Tjeckien', 'Togo', 'Tokelau', 'Tonga', 'Trinidad och Tobago', 'Tunisien', 'Turkiet', 'Turkmenistan', 'Turks- och Caicosöarna', 'Tuvalu', 'Tyskland', - 'USA', 'USA:s yttre öar', 'Uganda', 'Ukraina', 'Ungern', 'Uruguay', 'Uzbekistan', - 'Vanuatu', 'Vatikanstaten', 'Venezuela', 'Vietnam', 'Vitryssland', 'Västsahara', 'Wallis- och Futunaöarna', - 'Zambia', 'Zimbabwe', - 'Åland', - 'Österrike', 'Östtimor' + 'Öbonäs', 'Öckerö', 'Ödeborg', 'Ödeshög', 'Ödsmål', 'Ödåkra', 'Öggestorp', 'Öjersjö', 'Ölmanäs', 'Ölmbrotorp', 'Ölme', 'Ölmstad', 'Ölsta', 'Önneköp', 'Önnestad', 'Örbyhus', 'Örebro', 'Öregrund', 'Örkelljunga', 'Örnsköldsvik', 'Örserum', 'Örsjö', 'Örslösa', 'Örsundsbro', 'Örtagården', 'Örtofta', 'Örviken', 'Ösmo', 'Östadkulle', 'Östansjö', 'Östavall', 'Österbybruk', 'Österbymo', 'Österforse', 'Österfärnebo', 'Österhagen och Bergliden', 'Österslöv', 'Österstad', 'Östersund', 'Östervåla', 'Östhammar', 'Östhamra', 'Östmark', 'Östnor', 'Östorp och Ådran', 'Östra Bispgården', 'Östra Frölunda', 'Östra Grevie', 'Östra Husby', 'Östra Kallfors', 'Östra Karup', 'Östra Ljungby', 'Östra Ryd', 'Östra Sönnarslöv', 'Östra Tommarp', 'Östra Ånneröd', 'Östraby', 'Överboda', 'Överhörnäs', 'Överkalix', 'Överlida', 'Övertorneå', 'Överum', 'Övre Soppero', 'Övre Svartlå', 'Öxabäck', 'Öxeryd', ]; /** * @var array Swedish street name formats */ private $streetNameFormats = [ - '{{lastName}}{{streetSuffix}}', - '{{lastName}}{{streetSuffix}}', - '{{firstName}}{{streetSuffix}}', - '{{firstName}}{{streetSuffix}}', - '{{streetPrefix}}{{streetSuffix}}', - '{{streetPrefix}}{{streetSuffix}}', - '{{streetPrefix}}{{streetSuffix}}', - '{{streetPrefix}}{{streetSuffix}}', - '{{lastName}} {{streetSuffixWord}}' + '{{lastName}}{{Faker\Swedish\Address->streetSuffix}}', + '{{lastName}}{{Faker\Swedish\Address->streetSuffix}}', + '{{firstName}}{{Faker\Swedish\Address->streetSuffix}}', + '{{firstName}}{{Faker\Swedish\Address->streetSuffix}}', + '{{Faker\Swedish\Address->streetPrefix}}{{Faker\Swedish\Address->streetSuffix}}', + '{{Faker\Swedish\Address->streetPrefix}}{{Faker\Swedish\Address->streetSuffix}}', + '{{Faker\Swedish\Address->streetPrefix}}{{Faker\Swedish\Address->streetSuffix}}', + '{{Faker\Swedish\Address->streetPrefix}}{{Faker\Swedish\Address->streetSuffix}}', + '{{lastName}} {{Faker\Swedish\Address->streetSuffixWord}}', ]; /** * @var array Swedish street address formats */ private $streetAddressFormats = [ - '{{streetName}} {{buildingNumber}}' + '{{Faker\Swedish\Address->streetName}} {{Faker\Swedish\Address->buildingNumber}}', ]; /** * @var array Swedish address formats */ private $addressFormats = [ - "{{streetAddress}}\n{{postcode}} {{city}}" + "{{Faker\Swedish\Address->streetAddress}}\n{{Faker\Swedish\Address->postcode}} {{Faker\Swedish\Address->city}}", ]; - /** - * Randomly return a real city name - * - * @return string - */ - public function cityName() + public function buildingNumber(): string { - return $this->cityNames[array_rand($this->cityNames)]; + return strtoupper(Helper::bothify($this->buildingNumber[array_rand($this->buildingNumber)])); } - public function streetSuffixWord() + public function address(): string { - return $this->streetSuffixWord[array_rand($this->streetSuffixWord)]; + // TODO + $format = Helper::randomElement($this->addressFormats); + + return $this->generator->parse($format); } - public function streetPrefix() + public function city(): string { - return $this->streetPrefix[array_rand($this->streetPrefix)]; + return Helper::randomElement($this->cityNames); } - /** - * Randomly return a building number. - * - * @return string - */ - public function buildingNumber() + public function postcode(): string { - return strtoupper(Helper::bothify($this->buildingNumber[array_rand($this->buildingNumber)])); + return Helper::numerify(Helper::randomElement($this->postcode)); + } + + public function streetName(): string + { + $format = Helper::randomElement($this->streetNameFormats); + + return $this->generator->parse($format); + } + + public function streetAddress(): string + { + // TODO + $format = Helper::randomElement($this->streetAddressFormats); + + return $this->generator->parse($format); + } + + public function streetPrefix(): string + { + return Helper::randomElement($this->streetPrefix); + } + + public function streetSuffix(): string + { + return Helper::randomElement($this->streetSuffix); + } + + public function streetSuffixWord(): string + { + return Helper::randomElement($this->streetSuffixWord); } } diff --git a/src/Company.php b/src/Company.php index f931cb4..7c5d01e 100644 --- a/src/Company.php +++ b/src/Company.php @@ -2,12 +2,12 @@ namespace Faker\Swedish; -use Faker\Extension\Extension; +use Faker\Extension\CompanyExtension; use Faker\Extension\GeneratorAwareExtension; use Faker\Extension\GeneratorAwareExtensionTrait; use Faker\Extension\Helper; -class Company implements GeneratorAwareExtension +class Company implements GeneratorAwareExtension, CompanyExtension { use GeneratorAwareExtensionTrait; @@ -19,37 +19,32 @@ class Company implements GeneratorAwareExtension '{{lastName}} & {{lastName}} {{companySuffix}}', '{{lastName}} & {{lastName}}', '{{lastName}} och {{lastName}}', - '{{lastName}} och {{lastName}} {{companySuffix}}' + '{{lastName}} och {{lastName}} {{companySuffix}}', ]; private $companySuffix = ['AB', 'HB']; - private $jobTitles = ['Automationsingenjör', 'Bagare', 'Digital Designer', 'Ekonom', 'Ekonomichef', 'Elektronikingenjör', 'Försäljare', 'Försäljningschef', 'Innovationsdirektör', 'Investeringsdirektör', 'Journalist', 'Kock', 'Kulturstrateg', 'Läkare', 'Lokförare', 'Mäklare', 'Programmerare', 'Projektledare', 'Sjuksköterska', 'Utvecklare', 'UX Designer', 'Webbutvecklare']; + private $jobTitles = [ + 'Automationsingenjör', 'Bagare', 'Digital Designer', 'Ekonom', 'Ekonomichef', + 'Elektronikingenjör', 'Försäljare', 'Försäljningschef', 'Innovationsdirektör', + 'Investeringsdirektör', 'Journalist', 'Kock', 'Kulturstrateg', 'Läkare', + 'Lokförare', 'Mäklare', 'Programmerare', 'Projektledare', 'Sjuksköterska', + 'Utvecklare', 'UX Designer', 'Webbutvecklare', + ]; - /** - * @example 'Acme Ltd' - * - * @return string - */ - public function company() + public function company(): string { $format = Helper::randomElement($this->formats); return $this->generator->parse($format); } - /** - * @example 'Ltd' - * - * @return string - */ - public function companySuffix() + public function companySuffix(): string { return Helper::randomElement($this->companySuffix); } - - public function jobTitle() + public function jobTitle(): string { return Helper::randomElement($this->jobTitles); } diff --git a/src/Country.php b/src/Country.php new file mode 100644 index 0000000..32d02ad --- /dev/null +++ b/src/Country.php @@ -0,0 +1,42 @@ +country); + } +} diff --git a/src/Factory.php b/src/Factory.php index d1f0530..f7e1539 100644 --- a/src/Factory.php +++ b/src/Factory.php @@ -4,24 +4,34 @@ namespace Faker\Swedish; + +use Faker\Extension\ContainerBuilder; use Faker\Generator; -use Faker\Container\ContainerBuilder; +use Faker\Extension; -/** - * - * @author Tobias Nyholm - */ class Factory { public static function sweden(): Generator { - $builder = new ContainerBuilder(); - foreach (ContainerBuilder::defaultExtensions() as $id => $definition) { + $builder = new Extension\ContainerBuilder(); + + foreach (Extension\ContainerBuilder::defaultExtensions() as $id => $definition) { $builder->add($definition, $id); } // Add Swedish specific extension to replace some default ones - $builder->add(Person::class, PersonInterface::class); + $builder->add(Address::class, Extension\AddressExtension::class); + $builder->add(Company::class, Extension\CompanyExtension::class); + $builder->add(Country::class, Extension\CountryExtension::class); + $builder->add(Person::class, Extension\PersonExtension::class); + $builder->add(PhoneNumber::class, Extension\PhoneNumberExtension::class); + + $builder->add(Address::class); + $builder->add(Company::class); + $builder->add(Country::class); + $builder->add(Person::class); + $builder->add(PhoneNumber::class); + $builder->add(Municipality::class); return new Generator($builder->build()); } diff --git a/src/Municipality.php b/src/Municipality.php index e1a31e5..db36848 100644 --- a/src/Municipality.php +++ b/src/Municipality.php @@ -5,13 +5,80 @@ use Faker\Extension\Extension; /** - * Swedish municipalities - * - * @author Tobias Nyholm + * Swedish municipalities. */ class Municipality implements Extension { - private $municipalities = ['Ale kommun', 'Alingsås kommun', 'Alvesta kommun', 'Aneby kommun', 'Arboga kommun', 'Arjeplogs kommun', 'Arvidsjaurs kommun', 'Arvika kommun', 'Askersunds kommun', 'Avesta kommun', 'Bengtsfors kommun', 'Bergs kommun', 'Bjurholms kommun', 'Bjuvs kommun', 'Bodens kommun', 'Bollebygds kommun', 'Bollnäs kommun', 'Borgholms kommun', 'Borlänge kommun', 'Borås stad', 'Botkyrka kommun', 'Boxholms kommun', 'Bromölla kommun', 'Bräcke kommun', 'Burlövs kommun', 'Båstads kommun', 'Dals-Eds kommun', 'Danderyds kommun', 'Degerfors kommun', 'Dorotea kommun', 'Eda kommun', 'Ekerö kommun', 'Eksjö kommun', 'Emmaboda kommun', 'Enköpings kommun', 'Eskilstuna kommun', 'Eslövs kommun', 'Essunga kommun', 'Fagersta kommun', 'Falkenbergs kommun', 'Falköpings kommun', 'Falu kommun', 'Filipstads kommun', 'Finspångs kommun', 'Flens kommun', 'Forshaga kommun', 'Färgelanda kommun', 'Gagnefs kommun', 'Gislaveds kommun', 'Gnesta kommun', 'Gnosjö kommun', 'Region Gotland', 'Grums kommun', 'Grästorps kommun', 'Gullspångs kommun', 'Gällivare kommun', 'Gävle kommun', 'Göteborgs stad', 'Götene kommun', 'Habo kommun', 'Hagfors kommun', 'Hallsbergs kommun', 'Hallstahammars kommun', 'Halmstads kommun', 'Hammarö kommun', 'Haninge kommun', 'Haparanda stad', 'Heby kommun', 'Hedemora kommun', 'Helsingborgs stad', 'Herrljunga kommun', 'Hjo kommun', 'Hofors kommun', 'Huddinge kommun', 'Hudiksvalls kommun', 'Hultsfreds kommun', 'Hylte kommun', 'Håbo kommun', 'Hällefors kommun', 'Härjedalens kommun', 'Härnösands kommun', 'Härryda kommun', 'Hässleholms kommun', 'Höganäs kommun', 'Högsby kommun', 'Hörby kommun', 'Höörs kommun', 'Jokkmokks kommun', 'Järfälla kommun', 'Jönköpings kommun', 'Kalix kommun', 'Kalmar kommun', 'Karlsborgs kommun', 'Karlshamns kommun', 'Karlskoga kommun', 'Karlskrona kommun', 'Karlstads kommun', 'Katrineholms kommun', 'Kils kommun', 'Kinda kommun', 'Kiruna kommun', 'Klippans kommun', 'Knivsta kommun', 'Kramfors kommun', 'Kristianstads kommun', 'Kristinehamns kommun', 'Krokoms kommun', 'Kumla kommun', 'Kungsbacka kommun', 'Kungsörs kommun', 'Kungälvs kommun', 'Kävlinge kommun', 'Köpings kommun', 'Laholms kommun', 'Landskrona stad', 'Laxå kommun', 'Lekebergs kommun', 'Leksands kommun', 'Lerums kommun', 'Lessebo kommun', 'Lidingö stad', 'Lidköpings kommun', 'Lilla Edets kommun', 'Lindesbergs kommun', 'Linköpings kommun', 'Ljungby kommun', 'Ljusdals kommun', 'Ljusnarsbergs kommun', 'Lomma kommun', 'Ludvika kommun', 'Luleå kommun', 'Lunds kommun', 'Lycksele kommun', 'Lysekils kommun', 'Malmö stad', 'Malung-Sälens kommun', 'Malå kommun', 'Mariestads kommun', 'Markaryds kommun', 'Marks kommun', 'Melleruds kommun', 'Mjölby kommun', 'Mora kommun', 'Motala kommun', 'Mullsjö kommun', 'Munkedals kommun', 'Munkfors kommun', 'Mölndals stad', 'Mönsterås kommun', 'Mörbylånga kommun', 'Nacka kommun', 'Nora kommun', 'Norbergs kommun', 'Nordanstigs kommun', 'Nordmalings kommun', 'Norrköpings kommun', 'Norrtälje kommun', 'Norsjö kommun', 'Nybro kommun', 'Nykvarns kommun', 'Nyköpings kommun', 'Nynäshamns kommun', 'Nässjö kommun', 'Ockelbo kommun', 'Olofströms kommun', 'Orsa kommun', 'Orust kommun', 'Osby kommun', 'Oskarshamns kommun', 'Ovanåkers kommun', 'Oxelösunds kommun', 'Pajala kommun', 'Partille kommun', 'Perstorps kommun', 'Piteå kommun', 'Ragunda kommun', 'Robertsfors kommun', 'Ronneby kommun', 'Rättviks kommun', 'Sala kommun', 'Salems kommun', 'Sandvikens kommun', 'Sigtuna kommun', 'Simrishamns kommun', 'Sjöbo kommun', 'Skara kommun', 'Skellefteå kommun', 'Skinnskattebergs kommun', 'Skurups kommun', 'Skövde kommun', 'Smedjebackens kommun', 'Sollefteå kommun', 'Sollentuna kommun', 'Solna stad', 'Sorsele kommun', 'Sotenäs kommun', 'Staffanstorps kommun', 'Stenungsunds kommun', 'Stockholms stad', 'Storfors kommun', 'Storumans kommun', 'Strängnäs kommun', 'Strömstads kommun', 'Strömsunds kommun', 'Sundbybergs stad', 'Sundsvalls kommun', 'Sunne kommun', 'Surahammars kommun', 'Svalövs kommun', 'Svedala kommun', 'Svenljunga kommun', 'Säffle kommun', 'Säters kommun', 'Sävsjö kommun', 'Söderhamns kommun', 'Söderköpings kommun', 'Södertälje kommun', 'Sölvesborgs kommun', 'Tanums kommun', 'Tibro kommun', 'Tidaholms kommun', 'Tierps kommun', 'Timrå kommun', 'Tingsryds kommun', 'Tjörns kommun', 'Tomelilla kommun', 'Torsby kommun', 'Torsås kommun', 'Tranemo kommun', 'Tranås kommun', 'Trelleborgs kommun', 'Trollhättans stad', 'Trosa kommun', 'Tyresö kommun', 'Täby kommun', 'Töreboda kommun', 'Uddevalla kommun', 'Ulricehamns kommun', 'Umeå kommun', 'Upplands Väsby kommun', 'Upplands-Bro kommun', 'Uppsala kommun', 'Uppvidinge kommun', 'Vadstena kommun', 'Vaggeryds kommun', 'Valdemarsviks kommun', 'Vallentuna kommun', 'Vansbro kommun', 'Vara kommun', 'Varbergs kommun', 'Vaxholms stad', 'Vellinge kommun', 'Vetlanda kommun', 'Vilhelmina kommun', 'Vimmerby kommun', 'Vindelns kommun', 'Vingåkers kommun', 'Vårgårda kommun', 'Vänersborgs kommun', 'Vännäs kommun', 'Värmdö kommun', 'Värnamo kommun', 'Västerviks kommun', 'Västerås stad', 'Växjö kommun', 'Ydre kommun', 'Ystads kommun', 'Åmåls kommun', 'Ånge kommun', 'Åre kommun', 'Årjängs kommun', 'Åsele kommun', 'Åstorps kommun', 'Åtvidabergs kommun', 'Älmhults kommun', 'Älvdalens kommun', 'Älvkarleby kommun', 'Älvsbyns kommun', 'Ängelholms kommun', 'Öckerö kommun', 'Ödeshögs kommun', 'Örebro kommun', 'Örkelljunga kommun', 'Örnsköldsviks kommun', 'Östersunds kommun', 'Österåkers kommun', 'Östhammars kommun', 'Östra Göinge kommun', 'Överkalix kommun', 'Övertorneå kommun']; + private $municipalities = [ + 'Ale kommun', 'Alingsås kommun', 'Alvesta kommun', 'Aneby kommun', 'Arboga kommun', + 'Arjeplogs kommun', 'Arvidsjaurs kommun', 'Arvika kommun', 'Askersunds kommun', + 'Avesta kommun', 'Bengtsfors kommun', 'Bergs kommun', 'Bjurholms kommun', + 'Bjuvs kommun', 'Bodens kommun', 'Bollebygds kommun', 'Bollnäs kommun', + 'Borgholms kommun', 'Borlänge kommun', 'Borås stad', 'Botkyrka kommun', + 'Boxholms kommun', 'Bromölla kommun', 'Bräcke kommun', 'Burlövs kommun', + 'Båstads kommun', 'Dals-Eds kommun', 'Danderyds kommun', 'Degerfors kommun', + 'Dorotea kommun', 'Eda kommun', 'Ekerö kommun', 'Eksjö kommun', 'Emmaboda kommun', + 'Enköpings kommun', 'Eskilstuna kommun', 'Eslövs kommun', 'Essunga kommun', + 'Fagersta kommun', 'Falkenbergs kommun', 'Falköpings kommun', 'Falu kommun', + 'Filipstads kommun', 'Finspångs kommun', 'Flens kommun', 'Forshaga kommun', + 'Färgelanda kommun', 'Gagnefs kommun', 'Gislaveds kommun', 'Gnesta kommun', + 'Gnosjö kommun', 'Region Gotland', 'Grums kommun', 'Grästorps kommun', 'Gullspångs kommun', + 'Gällivare kommun', 'Gävle kommun', 'Göteborgs stad', 'Götene kommun', 'Habo kommun', + 'Hagfors kommun', 'Hallsbergs kommun', 'Hallstahammars kommun', 'Halmstads kommun', + 'Hammarö kommun', 'Haninge kommun', 'Haparanda stad', 'Heby kommun', 'Hedemora kommun', + 'Helsingborgs stad', 'Herrljunga kommun', 'Hjo kommun', 'Hofors kommun', + 'Huddinge kommun', 'Hudiksvalls kommun', 'Hultsfreds kommun', 'Hylte kommun', + 'Håbo kommun', 'Hällefors kommun', 'Härjedalens kommun', 'Härnösands kommun', + 'Härryda kommun', 'Hässleholms kommun', 'Höganäs kommun', 'Högsby kommun', + 'Hörby kommun', 'Höörs kommun', 'Jokkmokks kommun', 'Järfälla kommun', 'Jönköpings kommun', + 'Kalix kommun', 'Kalmar kommun', 'Karlsborgs kommun', 'Karlshamns kommun', + 'Karlskoga kommun', 'Karlskrona kommun', 'Karlstads kommun', 'Katrineholms kommun', + 'Kils kommun', 'Kinda kommun', 'Kiruna kommun', 'Klippans kommun', 'Knivsta kommun', + 'Kramfors kommun', 'Kristianstads kommun', 'Kristinehamns kommun', 'Krokoms kommun', + 'Kumla kommun', 'Kungsbacka kommun', 'Kungsörs kommun', 'Kungälvs kommun', + 'Kävlinge kommun', 'Köpings kommun', 'Laholms kommun', 'Landskrona stad', + 'Laxå kommun', 'Lekebergs kommun', 'Leksands kommun', 'Lerums kommun', 'Lessebo kommun', + 'Lidingö stad', 'Lidköpings kommun', 'Lilla Edets kommun', 'Lindesbergs kommun', + 'Linköpings kommun', 'Ljungby kommun', 'Ljusdals kommun', 'Ljusnarsbergs kommun', + 'Lomma kommun', 'Ludvika kommun', 'Luleå kommun', 'Lunds kommun', 'Lycksele kommun', + 'Lysekils kommun', 'Malmö stad', 'Malung-Sälens kommun', 'Malå kommun', + 'Mariestads kommun', 'Markaryds kommun', 'Marks kommun', 'Melleruds kommun', + 'Mjölby kommun', 'Mora kommun', 'Motala kommun', 'Mullsjö kommun', 'Munkedals kommun', + 'Munkfors kommun', 'Mölndals stad', 'Mönsterås kommun', 'Mörbylånga kommun', + 'Nacka kommun', 'Nora kommun', 'Norbergs kommun', 'Nordanstigs kommun', + 'Nordmalings kommun', 'Norrköpings kommun', 'Norrtälje kommun', 'Norsjö kommun', + 'Nybro kommun', 'Nykvarns kommun', 'Nyköpings kommun', 'Nynäshamns kommun', + 'Nässjö kommun', 'Ockelbo kommun', 'Olofströms kommun', 'Orsa kommun', 'Orust kommun', + 'Osby kommun', 'Oskarshamns kommun', 'Ovanåkers kommun', 'Oxelösunds kommun', + 'Pajala kommun', 'Partille kommun', 'Perstorps kommun', 'Piteå kommun', + 'Ragunda kommun', 'Robertsfors kommun', 'Ronneby kommun', 'Rättviks kommun', + 'Sala kommun', 'Salems kommun', 'Sandvikens kommun', 'Sigtuna kommun', 'Simrishamns kommun', + 'Sjöbo kommun', 'Skara kommun', 'Skellefteå kommun', 'Skinnskattebergs kommun', + 'Skurups kommun', 'Skövde kommun', 'Smedjebackens kommun', 'Sollefteå kommun', + 'Sollentuna kommun', 'Solna stad', 'Sorsele kommun', 'Sotenäs kommun', 'Staffanstorps kommun', + 'Stenungsunds kommun', 'Stockholms stad', 'Storfors kommun', 'Storumans kommun', + 'Strängnäs kommun', 'Strömstads kommun', 'Strömsunds kommun', 'Sundbybergs stad', + 'Sundsvalls kommun', 'Sunne kommun', 'Surahammars kommun', 'Svalövs kommun', + 'Svedala kommun', 'Svenljunga kommun', 'Säffle kommun', 'Säters kommun', + 'Sävsjö kommun', 'Söderhamns kommun', 'Söderköpings kommun', 'Södertälje kommun', + 'Sölvesborgs kommun', 'Tanums kommun', 'Tibro kommun', 'Tidaholms kommun', + 'Tierps kommun', 'Timrå kommun', 'Tingsryds kommun', 'Tjörns kommun', 'Tomelilla kommun', + 'Torsby kommun', 'Torsås kommun', 'Tranemo kommun', 'Tranås kommun', 'Trelleborgs kommun', + 'Trollhättans stad', 'Trosa kommun', 'Tyresö kommun', 'Täby kommun', 'Töreboda kommun', + 'Uddevalla kommun', 'Ulricehamns kommun', 'Umeå kommun', 'Upplands Väsby kommun', + 'Upplands-Bro kommun', 'Uppsala kommun', 'Uppvidinge kommun', 'Vadstena kommun', + 'Vaggeryds kommun', 'Valdemarsviks kommun', 'Vallentuna kommun', 'Vansbro kommun', + 'Vara kommun', 'Varbergs kommun', 'Vaxholms stad', 'Vellinge kommun', 'Vetlanda kommun', + 'Vilhelmina kommun', 'Vimmerby kommun', 'Vindelns kommun', 'Vingåkers kommun', + 'Vårgårda kommun', 'Vänersborgs kommun', 'Vännäs kommun', 'Värmdö kommun', + 'Värnamo kommun', 'Västerviks kommun', 'Västerås stad', 'Växjö kommun', + 'Ydre kommun', 'Ystads kommun', 'Åmåls kommun', 'Ånge kommun', 'Åre kommun', + 'Årjängs kommun', 'Åsele kommun', 'Åstorps kommun', 'Åtvidabergs kommun', + 'Älmhults kommun', 'Älvdalens kommun', 'Älvkarleby kommun', 'Älvsbyns kommun', + 'Ängelholms kommun', 'Öckerö kommun', 'Ödeshögs kommun', 'Örebro kommun', + 'Örkelljunga kommun', 'Örnsköldsviks kommun', 'Östersunds kommun', 'Österåkers kommun', + 'Östhammars kommun', 'Östra Göinge kommun', 'Överkalix kommun', 'Övertorneå kommun', + ]; public function municipality(): string { diff --git a/src/Person.php b/src/Person.php index 81bcabb..1a3ff61 100644 --- a/src/Person.php +++ b/src/Person.php @@ -3,10 +3,10 @@ namespace Faker\Swedish; use Faker\Calculator\Luhn; -use Faker\Extension\Extension; use Faker\Extension\Helper; +use Faker\Extension\PersonExtension; -class Person implements Extension +class Person implements PersonExtension { private $formats = [ '{{firstName}} {{lastName}}', @@ -24,10 +24,10 @@ class Person implements Extension /** * @var array Swedish female first names - * @link http://spraakbanken.gu.se/statistik/lbfnamnalf.phtml + * + * @see http://spraakbanken.gu.se/statistik/lbfnamnalf.phtml */ private $firstNameFemale = [ - 'Ada', 'Adela', 'Adele', 'Adéle', 'Adelia', 'Adina', 'Adolfina', 'Agda', 'Agnes', 'Agneta', 'Aina', 'Aino', 'Albertina', 'Alexandra', 'Alfhild', 'Alfrida', 'Alice', 'Alida', 'Ally', 'Alma', 'Alva', 'Amalia', 'Amanda', 'Andrea', 'Anette', 'Angela', 'Anita', 'Anja', 'Ann', 'Anna', 'Anna-Carin', 'Anna-Greta', 'Anna-Karin', 'Anna-Lena', 'Anna-Lisa', 'Anna-Maria', 'Anna-Stina', 'Anne', 'Anneli', 'Annelie', 'Annette', 'Anne-Charlotte', 'Anne-Marie', 'Anni', 'Annica', 'Annie', 'Annika', 'Annikki', 'Anny', 'Ann-Britt', 'Ann-Charlott', 'Ann-Charlotte', 'Ann-Christin', 'Ann-Christine', 'Ann-Katrin', 'Ann-Kristin', 'Ann-Louise', 'Ann-Margret', 'Ann-Mari', 'Ann-Marie', 'Ann-Sofi', 'Ann-Sofie', 'Antonia', 'Arvida', 'Asta', 'Astrid', 'Augusta', 'Aurora', 'Axelia', 'Axelina', 'Barbro', 'Beata', 'Beatrice', 'Beda', 'Berit', 'Bernhardina', 'Berta', 'Betty', 'Birgit', 'Birgitta', 'Blenda', 'Bodil', 'Boel', 'Borghild', 'Brita', 'Britt', 'Britta', 'Britt-Inger', 'Britt-Louise', 'Britt-Mari', 'Britt-Marie', 'Camilla', 'Carin', 'Carina', 'Carita', 'Carola', 'Carolina', 'Caroline', 'Catarina', 'Catharina', 'Cathrine', 'Catrin', 'Cecilia', 'Charlott', 'Charlotta', 'Charlotte', 'Christel', 'Christin', 'Christina', 'Christine', 'Clara', 'Clary', 'Constance', 'Cristina', @@ -51,12 +51,13 @@ class Person implements Extension 'Valborg', 'Vanja', 'Vega', 'Vendela', 'Vendla', 'Vera', 'Veronica', 'Veronika', 'Victoria', 'Viktoria', 'Vilhelmina', 'Vilma', 'Viola', 'Virginia', 'Vivan', 'Viveca', 'Viveka', 'Vivi', 'Vivian', 'Viviann', 'Vivianne', 'Vivi-Ann', 'Vivi-Anne', 'Wilhelmina', 'Ylva', 'Yvonne', - 'Åsa', 'Åse' + 'Åsa', 'Åse', ]; /** * @var array Swedish male first names - * @link http://spraakbanken.gu.se/statistik/lbfnamnalf.phtml + * + * @see http://spraakbanken.gu.se/statistik/lbfnamnalf.phtml */ private $firstNameMale = [ 'Abraham', 'Adam', 'Adolf', 'Adrian', 'Agaton', 'Agne', 'Albert', 'Albin', 'Aldor', 'Alex', 'Alexander', 'Alexis', 'Alexius', 'Alf', 'Alfons', 'Alfred', 'Algot', 'Allan', 'Alrik', 'Alvar', 'Alve', 'Amandus', 'Anders', 'André', 'Andreas', 'Anselm', 'Anshelm', 'Antero', 'Anton', 'Antonius', 'Arne', 'Arnold', 'Aron', 'Arthur', 'Artur', 'Arvid', 'Assar', 'Astor', 'August', 'Augustin', 'Axel', @@ -83,15 +84,15 @@ class Person implements Extension 'Waldemar', 'Walter', 'Werner', 'Wilhelm', 'William', 'Willy', 'Yngve', 'Åke', - 'Örjan', 'Östen' + 'Örjan', 'Östen', ]; /** * @var array Swedish common last names - * @link http://www.scb.se/sv_/Hitta-statistik/Statistik-efter-amne/Befolkning/Amnesovergripande-statistik/Namnstatistik/30898/2012A01x/Samtliga-folkbokforda--Efternamn-topplistor/Efternamn-topp-100/ + * + * @see http://www.scb.se/sv_/Hitta-statistik/Statistik-efter-amne/Befolkning/Amnesovergripande-statistik/Namnstatistik/30898/2012A01x/Samtliga-folkbokforda--Efternamn-topplistor/Efternamn-topp-100/ */ private $lastName = [ - 'Abrahamsson', 'Andersson', 'Andreasson', 'Arvidsson', 'Axelsson', 'Bengtsson', 'Berg', 'Berggren', 'Berglund', 'Bergman', 'Bergqvist', 'Bergström', 'Björk', 'Björklund', 'Blom', 'Blomqvist', 'Claesson', @@ -112,83 +113,81 @@ class Person implements Extension 'Viklund', 'Wallin', 'Wikström', 'Åberg', 'Åkesson', 'Åström', - 'Öberg' + 'Öberg', ]; private $titleMale = ['Mr.', 'Dr.', 'Prof.']; private $titleFemale = ['Mrs.', 'Ms.', 'Miss', 'Dr.', 'Prof.']; - /** - * National Personal Identity number (personnummer) - * @link http://en.wikipedia.org/wiki/Personal_identity_number_(Sweden) + * National Personal Identity number (personnummer). + * + * @see http://en.wikipedia.org/wiki/Personal_identity_number_(Sweden) + * * @param \DateTime $birthdate - * @param string $gender Person::GENDER_MALE || Person::GENDER_FEMALE + * @param string $gender Person::GENDER_MALE || Person::GENDER_FEMALE + * * @return string on format XXXXXX-XXXX */ - public function personalIdentityNumber(\DateTime $birthdate = null, $gender = null) + public function personalIdentityNumber(\DateTime $birthdate = null, $gender = null): string { if (!$birthdate) { $birthdate = \Faker\Provider\DateTime::dateTimeThisCentury(); } $datePart = $birthdate->format('ymd'); - if ($gender && $gender == PersonInterface::GENDER_MALE) { - $randomDigits = (string) Helper::numerify('##') . Helper::randomElement([1, 3, 5, 7, 9]); + if ($gender && PersonExtension::GENDER_MALE == $gender) { + $randomDigits = (string) Helper::numerify('##').Helper::randomElement([1, 3, 5, 7, 9]); } elseif ($gender && $gender == static::GENDER_FEMALE) { - $randomDigits = (string) Helper::numerify('##') . Helper::randomElement([0, 2, 4, 6, 8]); + $randomDigits = (string) Helper::numerify('##').Helper::randomElement([0, 2, 4, 6, 8]); } else { $randomDigits = (string) Helper::numerify('###'); } - $checksum = Luhn::computeCheckDigit($datePart . $randomDigits); + $checksum = Luhn::computeCheckDigit($datePart.$randomDigits); - return $datePart . '-' . $randomDigits . $checksum; + return $datePart.'-'.$randomDigits.$checksum; } - /** + /** * @param string|null $gender 'male', 'female' or null for any * - * @return string - * * @example 'John' */ - public function firstName($gender = null) + public function firstName($gender = null): string { - if ($gender === null) { - if (mt_rand(0, 1) === 1) { - $gender = PersonInterface::GENDER_MALE; + if (null === $gender) { + if (1 === mt_rand(0, 1)) { + $gender = PersonExtension::GENDER_MALE; } else { - $gender = PersonInterface::GENDER_FEMALE; + $gender = PersonExtension::GENDER_FEMALE; } } - if ($gender === PersonInterface::GENDER_MALE) { + if (PersonExtension::GENDER_MALE === $gender) { return $this->firstNameMale(); } - if ($gender === PersonInterface::GENDER_FEMALE) { + if (PersonExtension::GENDER_FEMALE === $gender) { return $this->firstNameFemale(); } } - public function firstNameMale() + public function firstNameMale(): string { return Helper::randomElement($this->firstNameMale); } - public function firstNameFemale() + public function firstNameFemale(): string { return Helper::randomElement($this->firstNameFemale); } /** * @example 'Doe' - * - * @return string */ - public function lastName() + public function lastName(): string { return Helper::randomElement($this->lastName); } @@ -197,24 +196,22 @@ public function lastName() * @example 'Mrs.' * * @param string|null $gender 'male', 'female' or null for any - * - * @return string */ - public function title($gender = null) + public function title($gender = null): string { - if ($gender === null) { - if (mt_rand(0, 1) === 1) { - $gender = PersonInterface::GENDER_MALE; + if (null === $gender) { + if (1 === mt_rand(0, 1)) { + $gender = PersonExtension::GENDER_MALE; } else { - $gender = PersonInterface::GENDER_FEMALE; + $gender = PersonExtension::GENDER_FEMALE; } } - if ($gender === PersonInterface::GENDER_MALE) { + if (PersonExtension::GENDER_MALE === $gender) { return $this->titleMale(); } - if ($gender === PersonInterface::GENDER_FEMALE) { + if (PersonExtension::GENDER_FEMALE === $gender) { return $this->titleFemale(); } } @@ -222,7 +219,7 @@ public function title($gender = null) /** * @example 'Mr.' */ - public function titleMale() + public function titleMale(): string { return Helper::randomElement($this->titleMale); } @@ -230,8 +227,13 @@ public function titleMale() /** * @example 'Mrs.' */ - public function titleFemale() + public function titleFemale(): string { return Helper::randomElement($this->titleFemale); } + + public function name($gender = null) + { + return $this->firstName($gender).' '.$this->lastName(); + } } diff --git a/src/PhoneNumber.php b/src/PhoneNumber.php index 92cd056..8d9010f 100644 --- a/src/PhoneNumber.php +++ b/src/PhoneNumber.php @@ -2,10 +2,10 @@ namespace Faker\Swedish; -use Faker\Extension\Extension; use Faker\Extension\Helper; +use Faker\Extension\PhoneNumberExtension; -class PhoneNumber implements Extension +class PhoneNumber implements PhoneNumberExtension { /** * @var array Swedish phone number formats @@ -38,20 +38,18 @@ class PhoneNumber implements Extension '+46%######', ]; - /** + /** * @example '555-123-546' */ - public function phoneNumber() + public function phoneNumber(): string { return Helper::numerify(Helper::randomElement($this->formats)); } /** * @example +27113456789 - * - * @return string */ - public function e164PhoneNumber() + public function e164PhoneNumber(): string { $formats = ['+%############']; diff --git a/test/PersonTest.php b/test/PersonTest.php index af0750f..a713fbc 100644 --- a/test/PersonTest.php +++ b/test/PersonTest.php @@ -2,6 +2,8 @@ namespace Faker\Test\Swedish; +use Faker\Calculator\Luhn; +use Faker\Swedish\Person; use PHPUnit\Framework\TestCase; final class PersonTest extends TestCase @@ -9,40 +11,39 @@ final class PersonTest extends TestCase public function provideSeedAndExpectedReturn() { return [ - [1, '720727', '720727-5798'], - [2, '710414', '710414-5664'], - [3, '591012', '591012-4519'], - [4, '180307', '180307-0356'], - [5, '820904', '820904-7748'] + ['720727'], + ['710414'], + ['591012'], + ['180307'], + ['820904'], ]; } /** * @dataProvider provideSeedAndExpectedReturn */ - public function testPersonalIdentityNumberUsesBirthDateIfProvided($seed, $birthdate, $expected) + public function testPersonalIdentityNumberUsesBirthDateIfProvided($birthdate) { - $faker = $this->faker; - $faker->seed($seed); - $pin = $faker->personalIdentityNumber(\DateTime::createFromFormat('ymd', $birthdate)); - self::assertEquals($expected, $pin); - } + $ext = new Person(); + $output = $ext->personalIdentityNumber(\DateTime::createFromFormat('ymd', $birthdate)); + self::assertNotEmpty($output); + self::assertMatchesRegularExpression('|^'.$birthdate.'\-[0-9][0-9][0-9][0-9]$|', $output); - public function testPersonalIdentityNumberGeneratesLuhnCompliantNumbers() - { - $pin = str_replace('-', '', $this->faker->personalIdentityNumber()); + $pin = str_replace('-', '', $output); self::assertTrue(Luhn::isValid($pin)); } public function testPersonalIdentityNumberGeneratesOddValuesForMales() { - $pin = $this->faker->personalIdentityNumber(null, 'male'); + $ext = new Person(); + $pin = $ext->personalIdentityNumber(null, 'male'); self::assertEquals(1, $pin[9] % 2); } public function testPersonalIdentityNumberGeneratesEvenValuesForFemales() { - $pin = $this->faker->personalIdentityNumber(null, 'female'); + $ext = new Person(); + $pin = $ext->personalIdentityNumber(null, 'female'); self::assertEquals(0, $pin[9] % 2); } }