From 28979e86b96a91ddd5d5c82ce2fba9ecaaec618f Mon Sep 17 00:00:00 2001 From: Andy Waterman Date: Sun, 14 Jun 2015 12:47:00 +0100 Subject: [PATCH 1/2] Expand NameGuesser to take account of field length when available (Doctrine, Propel) and adds a few more field types. --- src/Faker/Guesser/Name.php | 72 ++++++++++++++++++++-- src/Faker/ORM/Doctrine/EntityPopulator.php | 3 +- src/Faker/ORM/Propel/EntityPopulator.php | 2 +- 3 files changed, 69 insertions(+), 8 deletions(-) diff --git a/src/Faker/Guesser/Name.php b/src/Faker/Guesser/Name.php index 604cce187f..38ccdfe331 100644 --- a/src/Faker/Guesser/Name.php +++ b/src/Faker/Guesser/Name.php @@ -13,7 +13,12 @@ public function __construct(\Faker\Generator $generator) $this->generator = $generator; } - public function guessFormat($name) + /** + * @param string $name + * @param int $size + * @return callable + */ + public function guessFormat($name, $size = null) { $name = Base::toLower($name); $generator = $this->generator; @@ -27,13 +32,11 @@ public function guessFormat($name) return $generator->dateTime; }; } - switch ($name) { - case 'first_name': + switch (str_replace('_', '', $name)) { case 'firstname': return function () use ($generator) { return $generator->firstName; }; - case 'last_name': case 'lastname': return function () use ($generator) { return $generator->lastName; @@ -44,12 +47,14 @@ public function guessFormat($name) return $generator->userName; }; case 'email': + case 'emailaddress': return function () use ($generator) { return $generator->email; }; - case 'phone_number': case 'phonenumber': case 'phone': + case 'telephone': + case 'telnumber': return function () use ($generator) { return $generator->phoneNumber; }; @@ -58,6 +63,7 @@ public function guessFormat($name) return $generator->address; }; case 'city': + case 'town': return function () use ($generator) { return $generator->city; }; @@ -71,19 +77,73 @@ public function guessFormat($name) return $generator->postcode; }; case 'state': + return function () use ($generator) { + return $generator->state; + }; + case 'county': + if ($this->generator->locale == 'en_US') { + return function () use ($generator) { + return sprintf('%s County', $generator->city); + }; + } + return function () use ($generator) { return $generator->state; }; case 'country': + switch ($size) { + case 2: + return function () use ($generator) { + return $generator->countryCode; + }; + case 3: + return function () use ($generator) { + return $generator->countryISOAlpha3; + }; + case 5: + case 6: + return function () use ($generator) { + return $generator->locale; + }; + default: + return function () use ($generator) { + return $generator->country; + }; + } + case 'locale': + return function () use ($generator) { + return $generator->locale; + }; + case 'currency': + case 'currencycode': return function () use ($generator) { - return $generator->country; + return $generator->currencyCode; + }; + case 'url': + case 'website': + return function () use ($generator) { + return $generator->url; + }; + case 'company': + case 'companyname': + case 'employer': + return function () use ($generator) { + return $generator->company; }; case 'title': + if ($size !== null && $size <= 10) { + return function () use ($generator) { + return $generator->title; + }; + } + return function () use ($generator) { return $generator->sentence; }; case 'body': case 'summary': + case 'article': + case 'description': return function () use ($generator) { return $generator->text; }; diff --git a/src/Faker/ORM/Doctrine/EntityPopulator.php b/src/Faker/ORM/Doctrine/EntityPopulator.php index 5ed8acbb01..715ba57766 100644 --- a/src/Faker/ORM/Doctrine/EntityPopulator.php +++ b/src/Faker/ORM/Doctrine/EntityPopulator.php @@ -82,7 +82,8 @@ public function guessColumnFormatters(\Faker\Generator $generator) continue; } - if ($formatter = $nameGuesser->guessFormat($fieldName)) { + $size = isset($this->class->fieldMappings[$fieldName]['length']) ? $this->class->fieldMappings[$fieldName]['length'] : null; + if ($formatter = $nameGuesser->guessFormat($fieldName, $size)) { $formatters[$fieldName] = $formatter; continue; } diff --git a/src/Faker/ORM/Propel/EntityPopulator.php b/src/Faker/ORM/Propel/EntityPopulator.php index a83d87262a..5af6810086 100644 --- a/src/Faker/ORM/Propel/EntityPopulator.php +++ b/src/Faker/ORM/Propel/EntityPopulator.php @@ -67,7 +67,7 @@ public function guessColumnFormatters(\Faker\Generator $generator) if ($columnMap->isPrimaryKey()) { continue; } - if ($formatter = $nameGuesser->guessFormat($columnMap->getPhpName())) { + if ($formatter = $nameGuesser->guessFormat($columnMap->getPhpName(), $columnMap->getSize())) { $formatters[$columnMap->getPhpName()] = $formatter; continue; } From bef3350e8c43ffdae02b450dc08701c563232b67 Mon Sep 17 00:00:00 2001 From: Andy Waterman Date: Mon, 15 Jun 2015 08:19:53 +0100 Subject: [PATCH 2/2] Expand NameGuesser to take account of field length - fix coding standards --- src/Faker/Guesser/Name.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/Faker/Guesser/Name.php b/src/Faker/Guesser/Name.php index 38ccdfe331..856920f66d 100644 --- a/src/Faker/Guesser/Name.php +++ b/src/Faker/Guesser/Name.php @@ -15,7 +15,7 @@ public function __construct(\Faker\Generator $generator) /** * @param string $name - * @param int $size + * @param int|null $size Length of field, if known * @return callable */ public function guessFormat($name, $size = null) @@ -110,6 +110,7 @@ public function guessFormat($name, $size = null) return $generator->country; }; } + break; case 'locale': return function () use ($generator) { return $generator->locale;