1
0
mirror of https://github.com/fzaninotto/Faker.git synced 2025-03-19 06:49:50 +01:00

Add Propel ColumTypeGuesser

This commit is contained in:
Francois Zaninotto 2011-10-23 22:17:18 +02:00
parent 3ab8593d6e
commit c17355ea2e
3 changed files with 87 additions and 1 deletions

View File

@ -0,0 +1,69 @@
<?php
namespace Faker\ORM\Propel;
use \PropelColumnTypes;
class ColumnTypeGuesser
{
protected $generator;
public function __construct(\Faker\Generator $generator)
{
$this->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;
}
}
}

View File

@ -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;
}

View File

@ -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