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
3 changes: 3 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -225,6 +225,9 @@ on a column containing personal information, like the email address.
<column name="firstname" dump="replace" replacement="FAKER_firstName" />
<column name="lastname" dump="replace" replacement="FAKER_lastName" />
<column name="email" dump="replace" replacement="FAKER_unique->safeEmail" />
<column name="year" dump="replace" replacement="FAKER_numberBetween:1975,2020" />
<column name="sign" dump="replace" replacement="FAKER_numerify:'Helo ###'" />
<column name="age" dump="replace" replacement="FAKER_unique->randomDigitNot:0" />
</table>
</slimdump>
```
Expand Down
24 changes: 16 additions & 8 deletions src/Webfactory/Slimdump/Config/FakerReplacer.php
Original file line number Diff line number Diff line change
Expand Up @@ -51,41 +51,49 @@ public static function isFakerColumn($replacement)
*/
public function generateReplacement($replacementId)
{
$replacementMethodArguments = [];

$replacementMethodName = str_replace(self::PREFIX, '', $replacementId);

if (strpos($replacementMethodName, ':') !== false) {
[$replacementMethodName, $replacementMethodArguments] = explode(':', $replacementMethodName, 2);
$replacementMethodArguments = str_getcsv(strtolower($replacementMethodArguments));
}

if (false !== strpos($replacementMethodName, '->')) {
[$modifierName, $replacementMethodName] = explode('->', $replacementMethodName);

$this->validateReplacementConfiguredModifier($modifierName, $replacementMethodName);
$this->validateReplacementConfiguredModifier($modifierName, $replacementMethodName, $replacementMethodArguments);

return (string) $this->faker->$modifierName->$replacementMethodName;
return (string) $this->faker->$modifierName->format($replacementMethodName, $replacementMethodArguments);
}

$this->validateReplacementConfigured($replacementMethodName);
$this->validateReplacementConfigured($replacementMethodName, $replacementMethodArguments);

return (string) $this->faker->$replacementMethodName;
return (string) $this->faker->format($replacementMethodName, $replacementMethodArguments);
}

/**
* validates if this type of replacement was configured.
*
* @param string $replacementName
* @param array $replacementArguments
*
* @throws InvalidReplacementOptionException if not a faker method
*/
private function validateReplacementConfigured($replacementName)
private function validateReplacementConfigured($replacementName, $replacementArguments = [])
{
try {
$this->faker->__get($replacementName);
$this->faker->format($replacementName, $replacementArguments);
} catch (InvalidArgumentException $exception) {
throw new InvalidReplacementOptionException($replacementName.' is no valid faker replacement');
}
}

private function validateReplacementConfiguredModifier($replacementModifier, $replacementName)
private function validateReplacementConfiguredModifier($replacementModifier, $replacementName, $replacementArguments = [])
{
try {
$this->faker->__get($replacementModifier)->__get($replacementName);
$this->faker->__get($replacementModifier)->format($replacementName, $replacementArguments);
} catch (InvalidArgumentException $exception) {
throw new InvalidReplacementOptionException($replacementModifier.'->'.$replacementName.' is no valid faker replacement');
}
Expand Down
8 changes: 8 additions & 0 deletions test/Webfactory/Slimdump/Config/FakerReplacerTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,10 @@ public function provideValidReplacementIds()
return [
[FakerReplacer::PREFIX.'firstname'], // original faker property
[FakerReplacer::PREFIX.'lastname'], // original faker property
[FakerReplacer::PREFIX.'randomDigitNot:0'], // faker method with single argument
[FakerReplacer::PREFIX.'numberBetween:1,20'], // faker method with two arguments
[FakerReplacer::PREFIX.'shuffle:"hello world"'], // faker property with single argument
[FakerReplacer::PREFIX.'numerify:"Helo ###"'], // faker property with single argument
];
}

Expand All @@ -65,6 +69,10 @@ public function provideValidReplacementNames()
return [
['firstname'], // original faker property
['lastname'], // original faker property
['randomDigitNot:0'], // original faker property
['numberBetween:1,20'], // original faker property
['shuffle:"hello world"'], // original faker property
['numerify:"Helo ###"'], // original faker property
];
}
}