Completed
Push — master ( 2fd43b...5c5b3d )
by Lars
01:28
created

ValidatorRulesManager   A

Complexity

Total Complexity 7

Size/Duplication

Total Lines 74
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 1

Test Coverage

Coverage 95.65%

Importance

Changes 0
Metric Value
wmc 7
lcom 1
cbo 1
dl 0
loc 74
ccs 22
cts 23
cp 0.9565
rs 10
c 0
b 0
f 0

2 Methods

Rating   Name   Duplication   Size   Complexity  
A addCustomRule() 0 4 1
B getClassViaAlias() 0 50 6
1
<?php
2
3
namespace voku\HtmlFormValidator;
4
5
use Respect\Validation\Rules\AbstractRule;
6
7
class ValidatorRulesManager
8
{
9
10
  /**
11
   * @var string[]|AbstractRule[]
12
   */
13
  private $rules = [];
14
15
  /**
16
   * @param string              $name
17
   * @param string|AbstractRule $validatorClassName
18
   */
19 3
  public function addCustomRule(string $name, $validatorClassName)
20
  {
21 3
    $this->rules[$name] = $validatorClassName;
22 3
  }
23
24
  /**
25
   * @param string $rule
26
   *
27
   * @return array <p>keys: 'class', 'classArgs', 'object'</p>
28
   */
29 18
  public function getClassViaAlias(string $rule): array
30
  {
31 18
    if (!$rule) {
32
      return [
33
          'class'     => null,
34
          'classArgs' => null,
35
          'object'    => null,
36
      ];
37
    }
38
39 18
    if (isset($this->rules[$rule])) {
40 2
      $classWithNamespace = $this->rules[$rule];
41
    } else {
42 18
      $classWithNamespace = $rule;
43
    }
44
45 18
    if ($classWithNamespace instanceof AbstractRule) {
46
47
      return [
48 1
          'class'     => null,
49
          'classArgs' => null,
50 1
          'object'    => $classWithNamespace,
51
      ];
52
    }
53
54
    // remove the namespace
55 18
    if (\strpos($classWithNamespace, "\\") !== false) {
56
      $class =
57 4
          \substr(
58 4
              \strrchr(
59 4
                  $classWithNamespace,
60 4
                  "\\"
61
              ),
62 4
              1
63
64
          );
65
    } else {
66 18
      $class = $classWithNamespace;
67
    }
68
69 18
    $class = \lcfirst(\trim($class));
70
71 18
    list($class, $classArgs) = ValidatorHelpers::getArgsFromString($class);
72
73
    return [
74 18
        'class'     => $class,
75 18
        'classArgs' => (\count($classArgs) !== 0 ? $classArgs : null),
76
        'object'    => null,
77
    ];
78
  }
79
80
}
81