Completed
Push — master ( 5a9d2e...4895be )
by Oleg
04:31
created

Basic::__construct()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 3
CRAP Score 1

Importance

Changes 1
Bugs 0 Features 0
Metric Value
c 1
b 0
f 0
dl 0
loc 4
ccs 3
cts 3
cp 1
rs 10
cc 1
eloc 2
nc 1
nop 1
crap 1
1
<?php
2
namespace Malezha\Menu\Render;
3
4
use Illuminate\Contracts\Container\Container;
5
use Malezha\Menu\Contracts\MenuRender;
6
7
class Basic implements MenuRender
8
{
9
    /**
10
     * @var Container
11
     */
12
    protected $container;
13
14
    /**
15
     * @var array
16
     */
17
    protected $variables = [];
18
19
    /**
20
     * @var string
21
     */
22
    protected $view;
23
24
    /**
25
     * @inheritDoc
26
     */
27 36
    public function __construct(Container $container)
28
    {
29 36
        $this->container = $container;
30 36
    }
31
32
    /**
33
     * @inheritDoc
34
     */
35 11
    public function make($view)
36
    {
37 11
        $view = $this->replaceNameFromBlade($view);
38
39 11
        if (!$template = $this->findFullPath($view)) {
40 1
            throw new \Exception('View not found');
41
        }
42
43 10
        $this->view = $template;
44
45 10
        return $this;
46
    }
47
48
    /**
49
     * @inheritDoc
50
     */
51 10
    public function with($params, $value = null)
52
    {
53 10
        if (is_array($params)) {
54 9
            $this->variables = array_merge($this->variables, $params);
55
            
56 9
            return $this;
57
        }
58
        
59 1
        $this->variables[$params] = $value;
60
        
61 1
        return $this;
62
    }
63
64
    /**
65
     * @inheritDoc
66
     */
67 10
    public function render()
68
    {
69 10
        $__e = extract($this->variables);
70
71 10
        ob_start();
72 10
        include($this->view);
73 10
        return ob_get_clean();
74
    }
75
76
    /**
77
     * @inheritDoc
78
     */
79 26
    public function exists($view)
80
    {
81 26
        $view = $this->replaceNameFromBlade($view);
82 26
        return (bool) $this->findFullPath($view);
83
    }
84
85
    /**
86
     * @param string $view
87
     * @return bool|string
88
     */
89 30
    protected function findFullPath($view)
90
    {
91 30
        $paths = $this->container->make('config')->get('menu.paths');
92
        
93 30
        foreach ($paths as $path) {
94 30
            $template = $path . '/' . $view . '.php';
95 30
            if (file_exists($template)) {
96 12
                return $template;
97
            }
98 26
        }
99
100 26
        return false;
101
    }
102
103
    /**
104
     * @param string $view
105
     * @return string
106
     */
107 30
    protected function replaceNameFromBlade($view)
108
    {
109 30
        return str_replace('.', '/', preg_replace("/(.*)(::)(.*)/", "$3", $view));
110
    }
111
}