Completed
Push — master ( adc730...7490f0 )
by Arjay
06:19
created

FractalTransformer::transform()   B

Complexity

Conditions 5
Paths 6

Size

Total Lines 24
Code Lines 15

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
c 1
b 0
f 0
dl 0
loc 24
rs 8.5125
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
52
                    return array_merge($item_collector, $item_transformed);
53
                }, $collector, $transformed);
54
            }
55
        }
56
57
        return $collector;
58
    }
59
60
    /**
61
     * Get or create transformer serializer instance.
62
     *
63
     * @param mixed $serializer
64
     * @return \League\Fractal\Serializer\SerializerAbstract
65
     */
66
    protected function createSerializer($serializer)
67
    {
68
        if ($serializer instanceof SerializerAbstract) {
69
            return $serializer;
70
        }
71
72
        return new $serializer();
73
    }
74
75
    /**
76
     * Get or create transformer instance.
77
     *
78
     * @param mixed $transformer
79
     * @return \League\Fractal\TransformerAbstract
80
     */
81
    protected function createTransformer($transformer)
82
    {
83
        if ($transformer instanceof TransformerAbstract) {
84
            return $transformer;
85
        }
86
87
        return new $transformer();
88
    }
89
}
90