EvilGuard   A
last analyzed

Complexity

Total Complexity 2

Size/Duplication

Total Lines 10
Duplicated Lines 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
wmc 2
eloc 3
dl 0
loc 10
rs 10
c 1
b 0
f 0

2 Methods

Rating   Name   Duplication   Size   Complexity  
A getName() 0 3 1
A canAccess() 0 3 1
1
<?php
2
require __DIR__ . '/../vendor/autoload.php';
3
4
use Lneicelis\Transformer\Contract\CanGuard;
5
use Lneicelis\Transformer\Contract\CanTransform;
6
use Lneicelis\Transformer\Contract\HasAccessConfig;
7
use Lneicelis\Transformer\Contract\HasLazyProperties;
8
use Lneicelis\Transformer\Pipe\AccessControlPipe;
9
use Lneicelis\Transformer\Pipe\LazyPropertiesPipe;
10
use Lneicelis\Transformer\Pipe\TransformPipe;
11
use Lneicelis\Transformer\Transformer;
12
use Lneicelis\Transformer\TransformerRegistry;
13
use Lneicelis\Transformer\ValueObject\AccessConfig;
14
use Lneicelis\Transformer\ValueObject\Context;
15
16
class EvilGuard implements CanGuard {
17
18
    public function getName(): string
19
    {
20
        return self::class;
21
    }
22
23
    public function canAccess($resource, Context $context): bool
24
    {
25
        return false;
26
    }
27
}
28
29
class DateTimeTransformer implements CanTransform, HasLazyProperties, HasAccessConfig
30
{
31
    public function getResourceClass(): string
32
    {
33
        return DateTime::class;
34
    }
35
36
    public function getAccessConfig(): AccessConfig
37
    {
38
        return new AccessConfig([], [
39
            'timestamp' => [EvilGuard::class],
40
        ]);
41
    }
42
43
    /**
44
     * @param DateTime $resource
45
     * @return array
46
     */
47
    public function transform($resource): array
48
    {
49
        return [
50
            'iso' => $resource->format(DateTime::ISO8601),
51
        ];
52
    }
53
54
    public function timestamp(DateTime $resource): int {
55
        return $resource->getTimestamp();
56
    }
57
}
58
59
$transformerRepository = new TransformerRegistry();
60
$transformer = new Transformer([
61
    new AccessControlPipe($transformerRepository, [new EvilGuard()]),
62
    new TransformPipe($transformerRepository),
63
    new LazyPropertiesPipe($transformerRepository),
64
]);
65
66
$transformerRepository->addTransformer(new DateTimeTransformer());
67
68
$resource = new DateTime('2000-10-10 12:00:00');
69
70
$data = $transformer->transform($resource);
71
72
var_dump($data);
73
74
$schema = [
75
    'timestamp',
76
];
77
$data = $transformer->transform($resource, new Context($schema));
78