Callback   A
last analyzed

Complexity

Total Complexity 12

Size/Duplication

Total Lines 41
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 1

Test Coverage

Coverage 100%

Importance

Changes 0
Metric Value
wmc 12
lcom 1
cbo 1
dl 0
loc 41
ccs 23
cts 23
cp 1
rs 10
c 0
b 0
f 0

2 Methods

Rating   Name   Duplication   Size   Complexity  
B getUniqueId() 0 23 8
A filterSingle() 0 10 4
1
<?php
2
declare(strict_types=1);
3
namespace Sirius\Filtration\Filter;
4
5
class Callback extends AbstractFilter
6
{
7
    const OPTION_CALLBACK = 'callback';
8
9
    const OPTION_ARGUMENTS = 'arguments';
10
11 4
    public function getUniqueId(): string
12
    {
13 4
        $uniqueId = get_called_class() . '|';
14
        // the callback is a function name (eg: strip_tags) or a static class method (eg: MyClass::method)
15 4
        if (is_string($this->options['callback'])) {
16 1
            $uniqueId .= $this->options['callback'];
17 3
        } elseif (is_array($this->options['callback'])) {
18
            // the callback is an array that points to a static class method (eg: ['MyClass', 'method'])
19 2
            if (is_string($this->options['callback'][0])) {
20 1
                $uniqueId .= implode('::', $this->options['callback']);
21 1
            } elseif (is_object($this->options['callback'][0])) {
22 2
                $uniqueId .= spl_object_hash($this->options['callback'][0]) . '->' . $this->options['callback'][1];
23
            }
24 1
        } elseif (is_object($this->options['callback']) && $this->options['callback'] instanceof \Closure) {
25 1
            $uniqueId .= spl_object_hash($this->options['callback']);
26
        }
27 4
        if (isset($this->options['arguments'])) {
28 1
            $args = $this->options['arguments'];
29 1
            ksort($args);
30 1
            $uniqueId .= json_encode($args);
31
        }
32 4
        return $uniqueId;
33
    }
34
35 6
    public function filterSingle($value, string $valueIdentifier = null)
36
    {
37 6
        if (isset($this->options['callback']) && is_callable($this->options['callback'])) {
38 6
            $args = (isset($this->options['arguments'])) ? (array) $this->options['arguments'] : [];
39 6
            array_unshift($args, $value);
40 6
            array_push($args, $valueIdentifier, $this->context);
41 6
            $value = call_user_func_array($this->options['callback'], $args);
42
        }
43 6
        return $value;
44
    }
45
}
46