DateTimeTransformer   A
last analyzed

Complexity

Total Complexity 2

Size/Duplication

Total Lines 14
Duplicated Lines 0 %

Importance

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

2 Methods

Rating   Name   Duplication   Size   Complexity  
A getResourceClass() 0 3 1
A transform() 0 3 1
1
<?php
2
3
require __DIR__ . '/../../vendor/autoload.php';
4
5
use Lneicelis\Transformer\Contract\CanTransform;
6
use Lneicelis\Transformer\Contract\HasTimezone;
7
use Lneicelis\Transformer\Pipe\TimezonePipe;
8
use Lneicelis\Transformer\Pipe\TransformPipe;
9
use Lneicelis\Transformer\Transformer;
10
use Lneicelis\Transformer\TransformerRegistry;
11
use Lneicelis\Transformer\ValueObject\Context;
12
13
class DateTimeTransformer implements CanTransform
14
{
15
    public function getResourceClass(): string
16
    {
17
        return DateTime::class;
18
    }
19
20
    /**
21
     * @param DateTime $resource
22
     * @return string
23
     */
24
    public function transform($resource): string
25
    {
26
        return $resource->format('Y-m-d H:i:s');
27
    }
28
}
29
30
class TimezoneAwareContext extends Context implements HasTimezone
31
{
32
    /** @var DateTimeZone */
33
    private $timezone;
34
35
    public function __construct(DateTimeZone $timezone)
36
    {
37
        parent::__construct();
38
        $this->timezone = $timezone;
39
    }
40
41
    public function getTimezone(): DateTimeZone
42
    {
43
        return $this->timezone;
44
    }
45
}
46
47
$transformerRepository = new TransformerRegistry();
48
$transformer = new Transformer([
49
    new TimezonePipe(),
50
    new TransformPipe($transformerRepository),
51
]);
52
53
$dateTimeTransformer = new DateTimeTransformer();
54
$transformerRepository->addTransformer($dateTimeTransformer);
55
56
$resource = new DateTime('2000-10-10 12:00:00', new DateTimeZone('-0400'));
57
58
var_dump($dateTimeTransformer->transform($resource));
59
60
$context = new TimezoneAwareContext(new DateTimeZone('+0000'));
61
var_dump($transformer->transform($resource, $context));