• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

phpolar / model / 6328972008

27 Sep 2023 04:47PM UTC coverage: 91.815%. First build
6328972008

Pull #42

github

web-flow
Merge ea05db7cb into c9b7f1c25
Pull Request #42: build(deps-dev): bump phpmd/phpmd from 2.13.0 to 2.14.0

258 of 281 relevant lines covered (91.81%)

7.74 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

100.0
/src/DataTypeDetectionTrait.php
1
<?php
2

3
declare(strict_types=1);
4

5
namespace Phpolar\Model;
6

7
use Phpolar\StorageDriver\DataTypeUnknown;
8
use Phpolar\StorageDriver\StorageDriverInterface;
9
use Phpolar\StorageDriver\TypeName;
10
use ReflectionProperty;
11
use ReflectionNamedType;
12
use Stringable;
13

14
/**
15
 * Provides support for configuring column parameters used to create tables.
16
 */
17
trait DataTypeDetectionTrait
18
{
19
    /**
20
     * Uses the property type to determine the data type type.
21
     *
22
     * @api
23
     */
24
    public function getDataType(
25
        string $propName,
26
        StorageDriverInterface $storageDriver
27
    ): Stringable|DataTypeUnknown {
28
        $property = new ReflectionProperty($this, $propName);
10✔
29
        $propertyType = $property->getType();
10✔
30
        if ($propertyType instanceof ReflectionNamedType) {
10✔
31
            return $this->getDataTypeFromDeclaredProperty($propertyType, $storageDriver);
4✔
32
        }
33
        return $this->getDataTypeFromNotDeclaredProperty($property, $storageDriver);
6✔
34
    }
35

36
    private function getDataTypeFromDeclaredProperty(
37
        ReflectionNamedType $propertyType,
38
        StorageDriverInterface $storageDriver,
39
    ): Stringable|DataTypeUnknown {
40
        $propertyTypeName = $propertyType->getName();
4✔
41
        $typeName = parseTypeName($propertyTypeName);
4✔
42
        return match ($typeName) {
4✔
43
            TypeName::Invalid => new DataTypeUnknown(),
4✔
44
            default => $storageDriver->getDataType($typeName),
4✔
45
        };
4✔
46
    }
47

48
    private function getDataTypeFromNotDeclaredProperty(
49
        ReflectionProperty $property,
50
        StorageDriverInterface $storageDriver,
51
    ): Stringable|DataTypeUnknown {
52
        if ($property->isInitialized($this) === true) {
6✔
53
            $value = $property->getValue($this);
6✔
54

55
            if (is_object($value) === false) {
6✔
56
                return $storageDriver->getDataType(parseTypeName(gettype($value)));
4✔
57
            }
58

59
            if ($this->isInstanceOfDateTime($value) === true) {
4✔
60
                return $storageDriver->getDataType(TypeName::T_DateTime);
2✔
61
            }
62
        }
63
        return new DataTypeUnknown();
2✔
64
    }
65

66
    private function isInstanceOfDateTime(object $value): bool
67
    {
68
        return in_array(get_class($value), ["DateTimeImmutable", "DateTime"]);
4✔
69
    }
70
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc