Completed
Push — master ( cf6918...c09587 )
by Marco
05:50 queued 03:30
created

NonCloneableObject::fromAttemptedCloning()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 16
Code Lines 10

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 6
CRAP Score 2

Importance

Changes 0
Metric Value
dl 0
loc 16
ccs 6
cts 6
cp 1
rs 9.4285
c 0
b 0
f 0
cc 2
eloc 10
nc 2
nop 1
crap 2
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Dont\Exception;
6
7
use LogicException;
8
9
class NonCloneableObject extends LogicException implements ExceptionInterface
10
{
11
    private const ERROR_TEMPLATE = <<<'ERROR'
12
The given object %s#%s is not designed to be cloned, yet cloning was attempted.
13
14
This error is raised because the author of %s didn't design it to be cloneable, nor can
15
guarantee that it will function correctly after cloning, nor can guarantee that all
16
its internal components are cloneable.
17
18
Please do not clone %s instances.
19
ERROR;
20
21
    /**
22
     * @param object $object
23
     *
24
     * @return NonCloneableObject
25
     *
26
     * @throws TypeError
27
     */
28 9
    public static function fromAttemptedCloning($object) : self
29
    {
30 9
        if (! is_object($object)) {
31 7
            throw TypeError::fromNonObject($object);
32
        }
33
34 2
        $className = get_class($object);
35
36 2
        return new self(sprintf(
37 2
            self::ERROR_TEMPLATE,
38
            $className,
39
            spl_object_hash($object),
40
            $className,
41
            $className
42
        ));
43
    }
44
}
45