From c17355ea2e068ec6fae9dfb60fac96ce5bc81e21 Mon Sep 17 00:00:00 2001 From: Francois Zaninotto Date: Sun, 23 Oct 2011 22:17:18 +0200 Subject: [PATCH] Add Propel ColumTypeGuesser --- src/Faker/ORM/Propel/ColumnTypeGuesser.php | 69 ++++++++++++++++++++++ src/Faker/ORM/Propel/EntityPopulator.php | 7 ++- src/Faker/Provider/Base.php | 12 ++++ 3 files changed, 87 insertions(+), 1 deletion(-) create mode 100644 src/Faker/ORM/Propel/ColumnTypeGuesser.php diff --git a/src/Faker/ORM/Propel/ColumnTypeGuesser.php b/src/Faker/ORM/Propel/ColumnTypeGuesser.php new file mode 100644 index 00000000..5464a7d2 --- /dev/null +++ b/src/Faker/ORM/Propel/ColumnTypeGuesser.php @@ -0,0 +1,69 @@ +generator = $generator; + } + + public function guessFormat($column) + { + $generator = $this->generator; + if ($column->isTemporal()) { + if ($column->isEpochTemporal()) { + return function() use ($generator) { return $generator->dateTime; }; + } else { + return function() use ($generator) { return $generator->dateTimeAD; }; + } + } + $type = $column->getType(); + switch ($type) { + case PropelColumnTypes::BOOLEAN: + case PropelColumnTypes::BOOLEAN_EMU: + return function() use ($generator) { return $generator->boolean; }; + case PropelColumnTypes::NUMERIC: + case PropelColumnTypes::DECIMAL: + $size = $column->getSize(); + return function() use ($generator, $size) { return $generator->randomNumber($size * 100) / 100; }; + case PropelColumnTypes::TINYINT: + return function() { return mt_rand(0,255); }; + case PropelColumnTypes::SMALLINT: + return function() { return mt_rand(0,65535); }; + case PropelColumnTypes::INTEGER: + return function() { return mt_rand(0,4294967295); }; + case PropelColumnTypes::BIGINT: + return function() { return mt_rand(0,18446744073709551615); }; + case PropelColumnTypes::FLOAT: + return function() { return mt_rand(0,4294967295)/mt_rand(0,4294967295); }; + case PropelColumnTypes::DOUBLE: + case PropelColumnTypes::REAL: + return function() { return mt_rand(0,18446744073709551615)/mt_rand(0,18446744073709551615); }; + case PropelColumnTypes::CHAR: + case PropelColumnTypes::VARCHAR: + case PropelColumnTypes::BINARY: + case PropelColumnTypes::VARBINARY: + $size = $column->getSize(); + return function() use ($generator, $size) { return $generator->text($size); }; + case PropelColumnTypes::LONGVARCHAR: + case PropelColumnTypes::LONGVARBINARY: + case PropelColumnTypes::CLOB: + case PropelColumnTypes::CLOB_EMU: + case PropelColumnTypes::BLOB: + return function() use ($generator) { return $generator->text; }; + case PropelColumnTypes::ENUM: + $valueSet = $column->getValueSet(); + return function() use ($generator, $valueSet) { return $generator->randomElement($valueSet); }; + case PropelColumnTypes::OBJECT: + case PropelColumnTypes::PHP_ARRAY: + // no smart way to guess what the user expects here + return null; + } + } +} \ No newline at end of file diff --git a/src/Faker/ORM/Propel/EntityPopulator.php b/src/Faker/ORM/Propel/EntityPopulator.php index c813cf91..e274de39 100644 --- a/src/Faker/ORM/Propel/EntityPopulator.php +++ b/src/Faker/ORM/Propel/EntityPopulator.php @@ -3,6 +3,7 @@ namespace Faker\ORM\Propel; include __DIR__ . '/../../Guesser/Name.php'; +include __DIR__ . '/ColumnTypeGuesser.php'; /** * Service class for populating a table through a Propel ActiveRecord class. @@ -49,6 +50,7 @@ class EntityPopulator $peerClass = $class::PEER; $tableMap = $peerClass::getTableMap(); $nameGuesser = new \Faker\Guesser\Name($generator); + $columnTypeGuesser = new \Faker\ORM\Propel\ColumnTypeGuesser($generator); foreach ($tableMap->getColumns() as $columnMap) { if ($columnMap->isForeignKey()) { $relatedClass = $columnMap->getRelation()->getForeignTable()->getPhpName(); @@ -62,7 +64,10 @@ class EntityPopulator $formatters[$columnMap->getPhpName()] = $formatter; continue; } - // TODO: PropelColumnTypeGuesser + if ($formatter = $columnTypeGuesser->guessFormat($columnMap)) { + $formatters[$columnMap->getPhpName()] = $formatter; + continue; + } } return $formatters; } diff --git a/src/Faker/Provider/Base.php b/src/Faker/Provider/Base.php index 1ff81b63..c3b1cd0a 100644 --- a/src/Faker/Provider/Base.php +++ b/src/Faker/Provider/Base.php @@ -20,6 +20,18 @@ class Base { return mt_rand(0, 9); } + + /** + * Returns a random number with 0 to $nbDigits digits + * + * @param integer $nbDigits + * + * @return integer + */ + protected static function randomNumber($nbDigits = 3) + { + return mt_rand(0, $nbDigits * 10); + } /** * Returns a random letter from a to z