Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
Total | |
0.00% |
0 / 1 |
|
93.33% |
28 / 30 |
CRAP | |
84.06% |
58 / 69 |
Attribute | |
0.00% |
0 / 1 |
|
93.33% |
28 / 30 |
41.25 | |
84.06% |
58 / 69 |
__construct | |
100.00% |
1 / 1 |
1 | |
100.00% |
2 / 2 |
|||
fromXMLAttribute | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 10 |
|||
update | |
100.00% |
1 / 1 |
1 | |
100.00% |
2 / 2 |
|||
checkIfTypeIsObject | |
100.00% |
1 / 1 |
3 | |
100.00% |
8 / 8 |
|||
getLength | |
100.00% |
1 / 1 |
3 | |
100.00% |
5 / 5 |
|||
getMethodName | |
100.00% |
1 / 1 |
1 | |
100.00% |
1 / 1 |
|||
getPhpName | |
100.00% |
1 / 1 |
1 | |
100.00% |
1 / 1 |
|||
setPhpName | |
100.00% |
1 / 1 |
1 | |
100.00% |
2 / 2 |
|||
getPhpType | |
100.00% |
1 / 1 |
1 | |
100.00% |
1 / 1 |
|||
setPhpType | |
100.00% |
1 / 1 |
1 | |
100.00% |
2 / 2 |
|||
getDBName | |
100.00% |
1 / 1 |
2 | |
100.00% |
4 / 4 |
|||
getStoredProcedureParameterName | |
100.00% |
1 / 1 |
1 | |
100.00% |
1 / 1 |
|||
setDbName | |
100.00% |
1 / 1 |
1 | |
100.00% |
2 / 2 |
|||
getDbType | |
100.00% |
1 / 1 |
1 | |
100.00% |
1 / 1 |
|||
setDbType | |
100.00% |
1 / 1 |
1 | |
100.00% |
2 / 2 |
|||
getIsPrimaryKey | |
100.00% |
1 / 1 |
1 | |
100.00% |
1 / 1 |
|||
setIsPrimaryKey | |
100.00% |
1 / 1 |
1 | |
100.00% |
2 / 2 |
|||
getDefaultValue | |
100.00% |
1 / 1 |
1 | |
100.00% |
1 / 1 |
|||
setDefaultValue | |
100.00% |
1 / 1 |
1 | |
100.00% |
2 / 2 |
|||
getAutoValue | |
100.00% |
1 / 1 |
1 | |
100.00% |
1 / 1 |
|||
setAutoValue | |
100.00% |
1 / 1 |
1 | |
100.00% |
2 / 2 |
|||
getIsRequired | |
100.00% |
1 / 1 |
1 | |
100.00% |
1 / 1 |
|||
setIsRequired | |
100.00% |
1 / 1 |
1 | |
100.00% |
2 / 2 |
|||
getIsTransient | |
100.00% |
1 / 1 |
1 | |
100.00% |
1 / 1 |
|||
setIsTransient | |
100.00% |
1 / 1 |
1 | |
100.00% |
2 / 2 |
|||
getIsObject | |
100.00% |
1 / 1 |
1 | |
100.00% |
1 / 1 |
|||
setIsObject | |
100.00% |
1 / 1 |
1 | |
100.00% |
2 / 2 |
|||
implementsArraySerializable | |
0.00% |
0 / 1 |
2.06 | |
75.00% |
3 / 4 |
|||
getClassName | |
100.00% |
1 / 1 |
1 | |
100.00% |
1 / 1 |
|||
setClassName | |
100.00% |
1 / 1 |
1 | |
100.00% |
2 / 2 |
<?php | |
declare(strict_types = 1); | |
namespace Siesta\Model; | |
use Siesta\NamingStrategy\NamingStrategyRegistry; | |
use Siesta\Util\StringUtil; | |
use Siesta\Validator\DefaultAttributeValidator; | |
use Siesta\XML\XMLAttribute; | |
/** | |
* @author Gregor Müller | |
*/ | |
class Attribute | |
{ | |
const INTERFACE_ARRAY_SERIALIZABLE = 'Siesta\Contract\ArraySerializable'; | |
/** | |
* @var Entity | |
*/ | |
protected $entity; | |
/** | |
* @var string | |
*/ | |
protected $phpName; | |
/** | |
* @var string | |
*/ | |
protected $phpType; | |
/** | |
* @var string | |
*/ | |
protected $dbName; | |
/** | |
* @var string | |
*/ | |
protected $dbType; | |
/** | |
* @var bool | |
*/ | |
protected $isPrimaryKey; | |
/** | |
* @var string | |
*/ | |
protected $defaultValue; | |
/** | |
* @var string | |
*/ | |
protected $autoValue; | |
/** | |
* @var boolean | |
*/ | |
protected $isRequired; | |
/** | |
* @var boolean | |
*/ | |
protected $isTransient; | |
/** | |
* @var boolean | |
*/ | |
protected $isObject; | |
/** | |
* @var string | |
*/ | |
protected $className; | |
/** | |
* Attribute constructor. | |
* | |
* @param Entity $entity | |
*/ | |
public function __construct(Entity $entity) | |
{ | |
$this->entity = $entity; | |
} | |
/** | |
* @param XMLAttribute $xmlAttribute | |
*/ | |
public function fromXMLAttribute(XMLAttribute $xmlAttribute) | |
{ | |
$this->setAutoValue($xmlAttribute->getAutoValue()); | |
$this->setDbType($xmlAttribute->getDbType()); | |
$this->setDbName($xmlAttribute->getDbName()); | |
$this->setDefaultValue($xmlAttribute->getDefaultValue()); | |
$this->setIsPrimaryKey($xmlAttribute->getIsPrimaryKey()); | |
$this->setIsRequired($xmlAttribute->getIsRequired()); | |
$this->setIsTransient($xmlAttribute->getIsTransient()); | |
$this->setPhpName($xmlAttribute->getPhpName()); | |
$this->setPhpType($xmlAttribute->getPhpType()); | |
} | |
public function update() | |
{ | |
$this->checkIfTypeIsObject(); | |
} | |
/** | |
* | |
*/ | |
protected function checkIfTypeIsObject() | |
{ | |
$phpType = $this->getPhpType(); | |
if ($phpType === null || in_array($phpType, DefaultAttributeValidator::PHP_TYPE_LIST)) { | |
return; | |
} | |
$this->setIsObject(true); | |
$this->setClassName($this->getPhpType()); | |
$classShortName = StringUtil::getEndAfterLast($this->getPhpType(), "\\"); | |
$this->setPhpType($classShortName); | |
} | |
/** | |
* @return int|null | |
*/ | |
public function getLength() | |
{ | |
if ($this->getDbType() === null) { | |
return null; | |
} | |
if (preg_match("/VARCHAR\((.*?)\)/i", $this->getDbType(), $regResult)) { | |
return (int)$regResult [1]; | |
} | |
return null; | |
} | |
public function getMethodName() | |
{ | |
return ucfirst($this->getPhpName()); | |
} | |
/** | |
* @return string | |
*/ | |
public function getPhpName() | |
{ | |
return $this->phpName; | |
} | |
/** | |
* @param string $phpName | |
*/ | |
public function setPhpName($phpName) | |
{ | |
$this->phpName = $phpName; | |
} | |
/** | |
* @return string | |
*/ | |
public function getPhpType() | |
{ | |
return $this->phpType; | |
} | |
/** | |
* @param string $phpType | |
*/ | |
public function setPhpType($phpType) | |
{ | |
$this->phpType = $phpType; | |
} | |
/** | |
* @return string | |
*/ | |
public function getDBName() | |
{ | |
if ($this->dbName !== null) { | |
return $this->dbName; | |
} | |
$columnNaming = NamingStrategyRegistry::getColumnNamingStrategy(); | |
return $columnNaming->transform($this->getPhpName()); | |
} | |
/** | |
* @return string | |
*/ | |
public function getStoredProcedureParameterName() : string | |
{ | |
return "P_" . strtoupper($this->getDBName()); | |
} | |
/** | |
* @param string $dbName | |
*/ | |
public function setDbName($dbName) | |
{ | |
$this->dbName = $dbName; | |
} | |
/** | |
* @return string | |
*/ | |
public function getDbType() | |
{ | |
return $this->dbType; | |
} | |
/** | |
* @param string $dbType | |
*/ | |
public function setDbType($dbType) | |
{ | |
$this->dbType = $dbType; | |
} | |
/** | |
* @return boolean | |
*/ | |
public function getIsPrimaryKey() | |
{ | |
return $this->isPrimaryKey; | |
} | |
/** | |
* @param boolean $isPrimaryKey | |
*/ | |
public function setIsPrimaryKey($isPrimaryKey) | |
{ | |
$this->isPrimaryKey = $isPrimaryKey; | |
} | |
/** | |
* @return string | |
*/ | |
public function getDefaultValue() | |
{ | |
return $this->defaultValue; | |
} | |
/** | |
* @param string $defaultValue | |
*/ | |
public function setDefaultValue($defaultValue) | |
{ | |
$this->defaultValue = $defaultValue; | |
} | |
/** | |
* @return string | |
*/ | |
public function getAutoValue() | |
{ | |
return $this->autoValue; | |
} | |
/** | |
* @param string $autoValue | |
*/ | |
public function setAutoValue($autoValue) | |
{ | |
$this->autoValue = $autoValue; | |
} | |
/** | |
* @return boolean | |
*/ | |
public function getIsRequired() | |
{ | |
return $this->isRequired; | |
} | |
/** | |
* @param boolean $isRequired | |
*/ | |
public function setIsRequired($isRequired) | |
{ | |
$this->isRequired = $isRequired; | |
} | |
/** | |
* @return boolean | |
*/ | |
public function getIsTransient() | |
{ | |
return $this->isTransient; | |
} | |
/** | |
* @param boolean $isTransient | |
*/ | |
public function setIsTransient($isTransient) | |
{ | |
$this->isTransient = $isTransient; | |
} | |
/** | |
* @return boolean | |
*/ | |
public function getIsObject() | |
{ | |
return $this->isObject; | |
} | |
/** | |
* @param boolean $isObject | |
*/ | |
public function setIsObject($isObject) | |
{ | |
$this->isObject = $isObject; | |
} | |
/** | |
* @return bool | |
*/ | |
public function implementsArraySerializable() : bool | |
{ | |
if (!$this->getIsObject()) { | |
return false; | |
} | |
$reflect = new \ReflectionClass($this->getClassName()); | |
return $reflect->implementsInterface(self::INTERFACE_ARRAY_SERIALIZABLE); | |
} | |
/** | |
* @return string | |
*/ | |
public function getClassName() | |
{ | |
return $this->className; | |
} | |
/** | |
* @param string $className | |
*/ | |
public function setClassName($className) | |
{ | |
$this->className = $className; | |
} | |
} |