Completed
Push — master ( bdecd9...23aff6 )
by Arjay
06:02
created

Datatables::getHtmlBuilder()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 8
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 2
eloc 4
nc 2
nop 0
dl 0
loc 8
rs 9.4285
c 0
b 0
f 0
1
<?php
2
3
namespace Yajra\Datatables;
4
5
/**
6
 * Class Datatables.
7
 *
8
 * @package Yajra\Datatables
9
 * @author  Arjay Angeles <[email protected]>
10
 */
11
class Datatables
12
{
13
    /**
14
     * Datatables request object.
15
     *
16
     * @var \Yajra\Datatables\Request
17
     */
18
    protected $request;
19
20
    /**
21
     * Datatables constructor.
22
     *
23
     * @param \Yajra\Datatables\Request $request
24
     */
25
    public function __construct(Request $request)
26
    {
27
        $this->request = $request->request->count() ? $request : Request::capture();
28
    }
29
30
    /**
31
     * Gets query and returns instance of class.
32
     *
33
     * @param  mixed $object
34
     * @return mixed
35
     * @throws \Exception
36
     */
37
    public static function of($object)
38
    {
39
        $datatables = app('datatables');
40
        $config     = app('config');
41
        $engines    = $config->get('datatables.engines');
42
        $builders   = $config->get('datatables.builders');
43
        $builder    = get_class($object);
44
45
        if (array_key_exists($builder, $builders)) {
46
            $engine = $builders[$builder];
47
            $class  = $engines[$engine];
48
49
            return new $class($object, $datatables->getRequest());
50
        }
51
52
        throw new \Exception('No available engine for ' . $builder);
53
    }
54
55
    /**
56
     * Get request object.
57
     *
58
     * @return \Yajra\Datatables\Request
59
     */
60
    public function getRequest()
61
    {
62
        return $this->request;
63
    }
64
65
    /**
66
     * Datatables using Query Builder.
67
     *
68
     * @param \Illuminate\Database\Query\Builder|mixed $builder
69
     * @return \Yajra\Datatables\Engines\QueryBuilderEngine
70
     */
71
    public function queryBuilder($builder)
72
    {
73
        return new Engines\QueryBuilderEngine($builder, $this->request);
74
    }
75
76
    /**
77
     * Datatables using Eloquent Builder.
78
     *
79
     * @param \Illuminate\Database\Eloquent\Builder|mixed $builder
80
     * @return \Yajra\Datatables\Engines\EloquentEngine
81
     */
82
    public function eloquent($builder)
83
    {
84
        return new Engines\EloquentEngine($builder, $this->request);
85
    }
86
87
    /**
88
     * Datatables using Collection.
89
     *
90
     * @param \Illuminate\Support\Collection|mixed $builder
91
     * @return \Yajra\Datatables\Engines\CollectionEngine
92
     */
93
    public function collection($builder)
94
    {
95
        return new Engines\CollectionEngine($builder, $this->request);
96
    }
97
}
98