Completed
Push — master ( e84808...5a9d2e )
by Oleg
07:58
created

Basic   A

Complexity

Total Complexity 11

Size/Duplication

Total Lines 105
Duplicated Lines 0 %

Coupling/Cohesion

Components 2
Dependencies 1

Test Coverage

Coverage 90.63%

Importance

Changes 1
Bugs 0 Features 0
Metric Value
wmc 11
c 1
b 0
f 0
lcom 2
cbo 1
dl 0
loc 105
ccs 29
cts 32
cp 0.9063
rs 10

7 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 4 1
A make() 0 12 2
A with() 0 12 2
A render() 0 8 1
A exists() 0 5 1
A replaceNameFromBlade() 0 4 1
A findFullPath() 0 13 3
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 31
    public function __construct(Container $container)
28
    {
29 31
        $this->container = $container;
30 31
    }
31
32
    /**
33
     * @inheritDoc
34
     */
35 9
    public function make($view)
36
    {
37 9
        $view = $this->replaceNameFromBlade($view);
38
39 9
        if (!$template = $this->findFullPath($view)) {
40
            throw new \Exception('View not found');
41
        }
42
43 9
        $this->view = $template;
44
45 9
        return $this;
46
    }
47
48
    /**
49
     * @inheritDoc
50
     */
51 8
    public function with($params, $value = null)
52
    {
53 8
        if (is_array($params)) {
54 8
            $this->variables = array_merge($this->variables, $params);
55
            
56 8
            return $this;
57
        }
58
        
59
        $this->variables[$params] = $value;
60
        
61
        return $this;
62
    }
63
64
    /**
65
     * @inheritDoc
66
     */
67 9
    public function render()
68
    {
69 9
        $s = extract($this->variables);
70
71 9
        ob_start();
72 9
        include($this->view);
73 9
        return ob_get_clean();
74
    }
75
76
    /**
77
     * @inheritDoc
78
     */
79 22
    public function exists($view)
80
    {
81 22
        $view = $this->replaceNameFromBlade($view);
82 22
        return (bool) $this->findFullPath($view);
83
    }
84
85
    /**
86
     * @param string $view
87
     * @return bool|string
88
     */
89 25
    protected function findFullPath($view)
90
    {
91 25
        $paths = $this->container->make('config')->get('menu.paths');
92
        
93 25
        foreach ($paths as $path) {
94 25
            $template = $path . '/' . $view . '.php';
95 25
            if (file_exists($template)) {
96 25
                return $template;
97
            }
98
        }
99
100 22
        return false;
101
    }
102
103
    /**
104
     * @param string $view
105
     * @return string
106
     */
107 25
    protected function replaceNameFromBlade($view)
108
    {
109 25
        return str_replace('.', '/', preg_replace("/(.*)(::)(.*)/", "$3", $view));
110
    }
111
}