Completed
Pull Request — develop (#27)
by Chris
01:52
created

AttrList   A

Complexity

Total Complexity 5

Size/Duplication

Total Lines 39
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 10

Importance

Changes 0
Metric Value
wmc 5
lcom 1
cbo 10
dl 0
loc 39
c 0
b 0
f 0
rs 10

3 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 4 1
A createTransformer() 0 13 2
A createReverser() 0 13 2
1
<?php
2
3
namespace Chrisyue\PhpM3u8\Transformer\Factory\Annotation;
4
5
use Chrisyue\PhpM3u8\Transformer\Factory\FactoryInterface;
6
use Chrisyue\PhpM3u8\Transformer\AttrListTransformer;
7
use Chrisyue\PhpM3u8\Transformer\KvTransformer;
8
use Chrisyue\PhpM3u8\DataAccessor\ObjectAccessor;
9
use Chrisyue\PhpM3u8\PropertyReader\PropertyReader;
10
use Chrisyue\PhpM3u8\Transformer\AttrTransformers;
11
use Chrisyue\PhpM3u8\PropertyReader\PropertyReaderAwareInterface;
12
use Chrisyue\PhpM3u8\PropertyReader\PropertyReaderInterface;
13
use Chrisyue\PhpM3u8\PropertyReader\PropertyReaderAwareTrait;
14
use Chrisyue\PhpM3u8\Transformer\AttrListReverser;
15
use Chrisyue\PhpM3u8\DataAccessor\Factory;
16
use Chrisyue\PhpM3u8\Transformer\AttrReversers;
17
use Chrisyue\PhpM3u8\Transformer\KvReverser;
18
19
/**
20
 * @Annotation
21
 */
22
class AttrList implements FactoryInterface, PropertyReaderAwareInterface
23
{
24
    use PropertyReaderAwareTrait;
25
26
    private $class;
27
28
    public function __construct(array $options)
29
    {
30
        $this->class = $options['class'];
31
    }
32
33
    public function createTransformer()
34
    {
35
        $attrTransformers = new AttrTransformers();
36
        foreach ($this->reader->read($this->class, FactoryInterface::class) as $key => $factory) {
37
            $attrTransformers->set($key, $factory->createTransformer());
38
        }
39
40
        return new AttrListTransformer(
41
            new KvTransformer(),
42
            $attrTransformers,
43
            new ObjectAccessor(new $this->class)
44
        );
45
    }
46
47
    public function createReverser()
48
    {
49
        $attrReversers = new AttrReversers();
50
        foreach ($this->reader->read($this->class, FactoryInterface::class) as $key => $factory) {
51
            $attrReversers->set($key, $factory->createReverser());
52
        }
53
54
        return new AttrListReverser(
55
            new KvReverser(),
56
            $attrReversers,
57
            new Factory()
58
        );
59
    }
60
}
61