Completed
Push — master ( 1cdd73...65e8f6 )
by Arjay
01:24
created

FractalTransformer::transform()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 11
Code Lines 6

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
dl 0
loc 11
rs 9.4285
c 1
b 0
f 0
cc 2
eloc 6
nc 2
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\Serializer\SerializerAbstract;
8
use League\Fractal\TransformerAbstract;
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
        $resource   = new Collection($output, $this->createTransformer($transformer));
42
        $collection = $this->fractal->createData($resource)->toArray();
43
44
        return $collection['data'];
45
    }
46
47
    /**
48
     * Get or create transformer serializer instance.
49
     *
50
     * @param mixed $serializer
51
     * @return \League\Fractal\Serializer\SerializerAbstract
52
     */
53
    protected function createSerializer($serializer)
54
    {
55
        if ($serializer instanceof SerializerAbstract) {
56
            return $serializer;
57
        }
58
59
        return new $serializer();
60
    }
61
62
    /**
63
     * Get or create transformer instance.
64
     *
65
     * @param mixed $transformer
66
     * @return \League\Fractal\TransformerAbstract
67
     */
68
    protected function createTransformer($transformer)
69
    {
70
        if ($transformer instanceof TransformerAbstract) {
71
            return $transformer;
72
        }
73
74
        return new $transformer();
75
    }
76
}
77