Immutable   A
last analyzed

Complexity

Total Complexity 3

Size/Duplication

Total Lines 37
Duplicated Lines 0 %

Test Coverage

Coverage 100%

Importance

Changes 0
Metric Value
eloc 8
dl 0
loc 37
ccs 10
cts 10
cp 1
rs 10
c 0
b 0
f 0
wmc 3

3 Methods

Rating   Name   Duplication   Size   Complexity  
A cloneCall() 0 11 1
A add() 0 3 1
A subtract() 0 3 1
1
<?php
2
3
namespace Palmtree\Chrono\Traits;
4
5
trait Immutable
6
{
7
    abstract public function createClone();
8
9
    /**
10
     * @param int    $value
11
     * @param string $period
12
     *
13
     * @return self
14
     */
15 1
    public function add(int $value, string $period)
16
    {
17 1
        return $this->cloneCall(__FUNCTION__, \func_get_args());
18
    }
19
20
    /**
21
     * @param int    $value
22
     * @param string $period
23
     *
24
     * @return self
25
     */
26 1
    public function subtract(int $value, string $period)
27
    {
28 1
        return $this->cloneCall(__FUNCTION__, \func_get_args());
29
    }
30
31 3
    protected function cloneCall($method, $params = [])
32
    {
33 3
        $clone = $this->createClone();
34
35
        $closure = function () use ($method, $params) {
36 3
            return parent::$method(...$params);
37 3
        };
38
39 3
        $closure->bindTo($clone)();
40
41 3
        return $clone;
42
    }
43
}
44