Metodo   A
last analyzed

Complexity

Total Complexity 9

Size/Duplication

Total Lines 48
Duplicated Lines 0 %

Importance

Changes 3
Bugs 0 Features 0
Metric Value
eloc 17
c 3
b 0
f 0
dl 0
loc 48
rs 10
wmc 9

6 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 4 1
A setMetodo() 0 3 1
A metodo() 0 3 1
A elMetodoEstaDefinido() 0 7 2
A elMetodoPorDefectoEsValido() 0 7 2
A elMetodoEsValido() 0 9 2
1
<?php
2
namespace src;
3
4
use Exception;
5
use src\Enlace;
6
use src\Controlador;
7
use const CONTROLADOR_NAMESPACE;
8
use const METODO_POR_DEFECTO;
9
10
class Metodo
11
{
12
    private $_metodo;
13
    private $_controlador;
14
15
    public function __construct(Enlace $url, Controlador $controlador)
16
    {
17
        $this->_controlador = $controlador;
18
        $this->_metodo = $this->setMetodo($url->enlace());
19
    }
20
21
    public function metodo(): string
22
    {
23
        return $this->_metodo;
24
    }
25
26
    private function setMetodo(array $array): string
27
    {
28
        return $this->elMetodoEsValido($array);
29
    }
30
31
    private function elMetodoEsValido(array $array): string
32
    {
33
        $metodo = $this->elMetodoEstaDefinido($array);
34
35
        if (!method_exists(CONTROLADOR_NAMESPACE.$this->_controlador->controlador(), $metodo)) {
36
            return $this->elMetodoPorDefectoEsValido();
37
        }
38
39
        return $metodo;
40
    }
41
42
    private function elMetodoEstaDefinido(array $array): string
43
    {
44
        if (!isset($array[1])) {
45
            return METODO_POR_DEFECTO;
46
        }
47
48
        return $array[1];
49
    }
50
51
    private function elMetodoPorDefectoEsValido(): string
52
    {
53
        if (!method_exists(CONTROLADOR_NAMESPACE.$this->_controlador->controlador(), METODO_POR_DEFECTO)) {
54
            throw new Exception("El método por defecto no está declarado");
55
        }
56
57
        return METODO_POR_DEFECTO;
58
    }
59
}
60