mirror of
https://github.com/archtechx/virtualcolumn.git
synced 2025-12-14 06:04:04 +00:00
make $this and $model use clear and consistent
This commit is contained in:
parent
ff84ef1379
commit
26356130b1
3 changed files with 61 additions and 32 deletions
19
phpunit.xml
19
phpunit.xml
|
|
@ -1,13 +1,6 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" backupGlobals="false" bootstrap="vendor/autoload.php" colors="true" processIsolation="false" stopOnFailure="false" xsi:noNamespaceSchemaLocation="https://schema.phpunit.de/10.0/phpunit.xsd">
|
<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" backupGlobals="false" bootstrap="vendor/autoload.php" colors="true" processIsolation="false" stopOnFailure="false" xsi:noNamespaceSchemaLocation="https://schema.phpunit.de/10.4/phpunit.xsd">
|
||||||
<coverage>
|
<coverage/>
|
||||||
<include>
|
|
||||||
<directory suffix=".php">./src</directory>
|
|
||||||
</include>
|
|
||||||
<exclude>
|
|
||||||
<file>./src/routes.php</file>
|
|
||||||
</exclude>
|
|
||||||
</coverage>
|
|
||||||
<testsuites>
|
<testsuites>
|
||||||
<testsuite name="Unit">
|
<testsuite name="Unit">
|
||||||
<directory suffix="Test.php">./tests</directory>
|
<directory suffix="Test.php">./tests</directory>
|
||||||
|
|
@ -25,4 +18,12 @@
|
||||||
<env name="DB_DATABASE" value=":memory:"/>
|
<env name="DB_DATABASE" value=":memory:"/>
|
||||||
<env name="AWS_DEFAULT_REGION" value="us-west-2"/>
|
<env name="AWS_DEFAULT_REGION" value="us-west-2"/>
|
||||||
</php>
|
</php>
|
||||||
|
<source>
|
||||||
|
<include>
|
||||||
|
<directory suffix=".php">./src</directory>
|
||||||
|
</include>
|
||||||
|
<exclude>
|
||||||
|
<file>./src/routes.php</file>
|
||||||
|
</exclude>
|
||||||
|
</source>
|
||||||
</phpunit>
|
</phpunit>
|
||||||
|
|
|
||||||
28
phpunit.xml.bak
Normal file
28
phpunit.xml.bak
Normal file
|
|
@ -0,0 +1,28 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" backupGlobals="false" bootstrap="vendor/autoload.php" colors="true" processIsolation="false" stopOnFailure="false" xsi:noNamespaceSchemaLocation="https://schema.phpunit.de/10.0/phpunit.xsd">
|
||||||
|
<coverage>
|
||||||
|
<include>
|
||||||
|
<directory suffix=".php">./src</directory>
|
||||||
|
</include>
|
||||||
|
<exclude>
|
||||||
|
<file>./src/routes.php</file>
|
||||||
|
</exclude>
|
||||||
|
</coverage>
|
||||||
|
<testsuites>
|
||||||
|
<testsuite name="Unit">
|
||||||
|
<directory suffix="Test.php">./tests</directory>
|
||||||
|
</testsuite>
|
||||||
|
</testsuites>
|
||||||
|
<php>
|
||||||
|
<env name="APP_ENV" value="testing"/>
|
||||||
|
<env name="APP_KEY" value="base64:+osRhaqQtOcYM79fhVU8YdNBs/1iVJPWYUr9zvTPCs0="/>
|
||||||
|
<env name="BCRYPT_ROUNDS" value="4"/>
|
||||||
|
<env name="CACHE_DRIVER" value="redis"/>
|
||||||
|
<env name="MAIL_DRIVER" value="array"/>
|
||||||
|
<env name="QUEUE_CONNECTION" value="sync"/>
|
||||||
|
<env name="SESSION_DRIVER" value="array"/>
|
||||||
|
<env name="DB_CONNECTION" value="sqlite"/>
|
||||||
|
<env name="DB_DATABASE" value=":memory:"/>
|
||||||
|
<env name="AWS_DEFAULT_REGION" value="us-west-2"/>
|
||||||
|
</php>
|
||||||
|
</phpunit>
|
||||||
|
|
@ -31,9 +31,9 @@ trait VirtualColumn
|
||||||
*/
|
*/
|
||||||
public bool $dataEncoded = false;
|
public bool $dataEncoded = false;
|
||||||
|
|
||||||
protected function decodeVirtualColumn(self $model): void
|
protected function decodeVirtualColumn(): void
|
||||||
{
|
{
|
||||||
if (! $model->dataEncoded) {
|
if (! $this->dataEncoded) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -42,46 +42,46 @@ trait VirtualColumn
|
||||||
['encrypted', 'encrypted:array', 'encrypted:collection', 'encrypted:json', 'encrypted:object'], // Default encrypted castables
|
['encrypted', 'encrypted:array', 'encrypted:collection', 'encrypted:json', 'encrypted:object'], // Default encrypted castables
|
||||||
);
|
);
|
||||||
|
|
||||||
foreach ($model->getAttribute($this->getDataColumn()) ?? [] as $key => $value) {
|
foreach ($this->getAttribute($this->getDataColumn()) ?? [] as $key => $value) {
|
||||||
$attributeHasEncryptedCastable = in_array(data_get($model->getCasts(), $key), $encryptedCastables);
|
$attributeHasEncryptedCastable = in_array(data_get($this->getCasts(), $key), $encryptedCastables);
|
||||||
|
|
||||||
if ($attributeHasEncryptedCastable && $this->valueEncrypted($value)) {
|
if ($attributeHasEncryptedCastable && $this->valueEncrypted($value)) {
|
||||||
$model->attributes[$key] = $value;
|
$this->attributes[$key] = $value;
|
||||||
} else {
|
} else {
|
||||||
$model->setAttribute($key, $value);
|
$this->setAttribute($key, $value);
|
||||||
}
|
}
|
||||||
|
|
||||||
$model->syncOriginalAttribute($key);
|
$this->syncOriginalAttribute($key);
|
||||||
}
|
}
|
||||||
|
|
||||||
$model->setAttribute($this->getDataColumn(), null);
|
$this->setAttribute($this->getDataColumn(), null);
|
||||||
|
|
||||||
$model->dataEncoded = false;
|
$this->dataEncoded = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function encodeAttributes(self $model): void
|
protected function encodeAttributes(): void
|
||||||
{
|
{
|
||||||
if ($model->dataEncoded) {
|
if ($this->dataEncoded) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
$dataColumn = $this->getDataColumn();
|
$dataColumn = $this->getDataColumn();
|
||||||
$customColumns = $this->getCustomColumns();
|
$customColumns = $this->getCustomColumns();
|
||||||
$attributes = array_filter($model->getAttributes(), fn ($key) => ! in_array($key, $customColumns), ARRAY_FILTER_USE_KEY);
|
$attributes = array_filter($this->getAttributes(), fn ($key) => ! in_array($key, $customColumns), ARRAY_FILTER_USE_KEY);
|
||||||
|
|
||||||
// Remove data column from the attributes
|
// Remove data column from the attributes
|
||||||
unset($attributes[$dataColumn]);
|
unset($attributes[$dataColumn]);
|
||||||
|
|
||||||
foreach ($attributes as $key => $value) {
|
foreach ($attributes as $key => $value) {
|
||||||
// Remove attribute from the model
|
// Remove attribute from the model
|
||||||
unset($model->attributes[$key]);
|
unset($this->attributes[$key]);
|
||||||
unset($model->original[$key]);
|
unset($this->original[$key]);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add attribute to the data column
|
// Add attribute to the data column
|
||||||
$model->setAttribute($dataColumn, $attributes);
|
$this->setAttribute($dataColumn, $attributes);
|
||||||
|
|
||||||
$model->dataEncoded = true;
|
$this->dataEncoded = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function valueEncrypted(string $value): bool
|
public function valueEncrypted(string $value): bool
|
||||||
|
|
@ -95,22 +95,22 @@ trait VirtualColumn
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function decodeAttributes(self $model)
|
protected function decodeAttributes()
|
||||||
{
|
{
|
||||||
$model->dataEncoded = true;
|
$this->dataEncoded = true;
|
||||||
|
|
||||||
$this->decodeVirtualColumn($model);
|
$this->decodeVirtualColumn();
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function getAfterListeners(): array
|
protected function getAfterListeners(): array
|
||||||
{
|
{
|
||||||
return [
|
return [
|
||||||
'retrieved' => [
|
'retrieved' => [
|
||||||
function ($model) {
|
function () {
|
||||||
// Always decode after model retrieval
|
// Always decode after model retrieval
|
||||||
$model->dataEncoded = true;
|
$this->dataEncoded = true;
|
||||||
|
|
||||||
$this->decodeVirtualColumn($model);
|
$this->decodeVirtualColumn();
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
'saving' => [
|
'saving' => [
|
||||||
|
|
@ -128,7 +128,7 @@ trait VirtualColumn
|
||||||
protected function decodeIfEncoded()
|
protected function decodeIfEncoded()
|
||||||
{
|
{
|
||||||
if ($this->dataEncoded) {
|
if ($this->dataEncoded) {
|
||||||
$this->decodeVirtualColumn($this);
|
$this->decodeVirtualColumn();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue