Completed
Pull Request — master (#5)
by
unknown
06:51
created

FractalTransformer::transform()   B

Complexity

Conditions 5
Paths 6

Size

Total Lines 23
Code Lines 15

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 23
rs 8.5906
c 0
b 0
f 0
cc 5
eloc 15
nc 6
nop 3
1
<?php
2
3
namespace Yajra\DataTables\Transformers;
4
5
use League\Fractal\Manager;
6
use League\Fractal\Resource\Collection;
7
use League\Fractal\TransformerAbstract;
8
use League\Fractal\Serializer\SerializerAbstract;
9
10
class FractalTransformer
11
{
12
    /**
13
     * @var \League\Fractal\Manager
14
     */
15
    protected $fractal;
16
17
    /**
18
     * FractalTransformer constructor.
19
     *
20
     * @param \League\Fractal\Manager $fractal
21
     */
22
    public function __construct(Manager $fractal)
23
    {
24
        $this->fractal = $fractal;
25
    }
26
27
    /**
28
     * Transform output using the given transformer and serializer.
29
     *
30
     * @param mixed $output
31
     * @param mixed $transformer
32
     * @param mixed $serializer
33
     * @return array
34
     */
35
    public function transform($output, $transformer, $serializer = null)
36
    {
37
        if ($serializer !== null) {
38
            $this->fractal->setSerializer($this->createSerializer($serializer));
39
        }
40
41
        $collector = [];
42
        foreach ($transformer as $transform) {
43
            if ($transform != null) {
44
                $resource = new Collection($output, $this->createTransformer($transform));
45
                $collection = $this->fractal->createData($resource)->toArray();
46
                $transformed = $collection['data'];
47
                $collector = array_map(function ($item_collector, $item_transformed) {
48
                    if ($item_collector === null) {
49
                        $item_collector = [];
50
                    }
51
                    return array_merge($item_collector, $item_transformed);
52
                }, $collector, $transformed);
53
            }
54
        }
55
56
        return $collector;
57
    }
58
59
    /**
60
     * Get or create transformer serializer instance.
61
     *
62
     * @param mixed $serializer
63
     * @return \League\Fractal\Serializer\SerializerAbstract
64
     */
65
    protected function createSerializer($serializer)
66
    {
67
        if ($serializer instanceof SerializerAbstract) {
68
            return $serializer;
69
        }
70
71
        return new $serializer();
72
    }
73
74
    /**
75
     * Get or create transformer instance.
76
     *
77
     * @param mixed $transformer
78
     * @return \League\Fractal\TransformerAbstract
79
     */
80
    protected function createTransformer($transformer)
81
    {
82
        if ($transformer instanceof TransformerAbstract) {
83
            return $transformer;
84
        }
85
86
        return new $transformer();
87
    }
88
}
89