Completed
Push — master ( ec55c5...b062f4 )
by Lars
01:21
created

ValidatorRulesManager::getClassViaAlias()   C

Complexity

Conditions 11
Paths 19

Size

Total Lines 68
Code Lines 43

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 30
CRAP Score 11.0908

Importance

Changes 0
Metric Value
c 0
b 0
f 0
dl 0
loc 68
ccs 30
cts 33
cp 0.9091
rs 5.8371
cc 11
eloc 43
nc 19
nop 1
crap 11.0908

How to fix   Long Method    Complexity   

Long Method

Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.

For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.

Commonly applied refactorings include:

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 2
  public function addCustomRule(string $name, $validatorClassName)
20
  {
21 2
    $this->rules[$name] = $validatorClassName;
22 2
  }
23
24
  /**
25
   * @param string $rule
26
   *
27
   * @return array <p>keys: 'class', 'classArgs', 'object'</p>
28
   */
29 14
  public function getClassViaAlias(string $rule): array
30
  {
31 14
    if (!$rule) {
32
      return [
33
          'class'     => null,
34
          'classArgs' => null,
35
          'object'    => null,
36
      ];
37
    }
38
39 14
    if (isset($this->rules[$rule])) {
40 2
      $classWithNamespace = $this->rules[$rule];
41
    } else {
42 14
      $classWithNamespace = $rule;
43
    }
44
45 14
    if ($classWithNamespace instanceof AbstractRule) {
46
47
      return [
48 1
          'class'     => null,
49
          'classArgs' => null,
50 1
          'object'    => $classWithNamespace,
51
      ];
52
    }
53
54 14
    if (\strpos($classWithNamespace, "\\") !== false) {
55
      $class =
56 4
          \substr(
57 4
              \strrchr(
58 4
                  $classWithNamespace,
59 4
                  "\\"
60
              ),
61 4
              1
62
63
          );
64
    } else {
65 12
      $class = $classWithNamespace;
66
    }
67
68 14
    $class = \lcfirst(\trim($class));
69
70 14
    $classArgsMatches = [];
71 14
    \preg_match('/\((?<args>.*?)\)$/', $class, $classArgsMatches);
72 14
    $class = \preg_replace('/\((.*?)\)$/', '', $class);
73
74 14
    $classArgs = array();
75 14
    if (isset($classArgsMatches['args'])) {
76 4
      $classArgsTmp = $classArgsMatches['args'];
77 4
      $classArgsTmpArray = explode(',', $classArgsTmp);
78 4
      foreach ($classArgsTmpArray as $classArgsTmp) {
79 4
        $classArg = trim($classArgsTmp);
80
81 4
        if ($classArg === 'true' || $classArg === 'false') {
82
          $classArg = (bool)$classArg;
83 4
        } else if ($classArgs === 'null') {
84
          $classArg = null;
85
        }
86
87 4
        $classArgs[] = $classArg;
88
      }
89
    }
90
91
    return [
92 14
        'class'     => $class,
93 14
        'classArgs' => (\count($classArgs) !== 0 ? $classArgs : null),
94
        'object'    => null,
95
    ];
96
  }
97
}
98