Passed
Push — master ( 0cfc7e...b88fc1 )
by Tom
03:33 queued 42s
created

ImageName::validate()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 12
Code Lines 8

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 4
CRAP Score 1

Importance

Changes 0
Metric Value
cc 1
eloc 8
nc 1
nop 1
dl 0
loc 12
ccs 4
cts 4
cp 1
crap 1
rs 9.4285
c 0
b 0
f 0
1
<?php
2
3
/* this file is part of pipelines */
4
5
namespace Ktomk\Pipelines\File;
6
7
/**
8
 * image name parser and value object
9
 */
10
class ImageName
11
{
12
    /**
13
     * @var string
14
     */
15
    private $name;
16
17
    /**
18
     * Is a Docker image name (optionally with a tag) syntactically
19
     * valid?
20
     *
21
     * @see doc/DOCKER-NAME-TAG.md
22
     *
23
     * @param string $name of docker image
24
     * @return bool
25
     */
26 12
    public static function validate($name)
27
    {
28
        $pattern =
29
            '{^' .
30
            '([a-zA-Z0-9.-]+(:[0-9]+)?/)?' . # <prefix>
31
            '([a-z0-9]+(?:(?:\.|__?|-+)[a-z0-9]+)*)(/[a-z0-9]+(?:(?:\.|__?|-+)[a-z0-9]+)*)*' . # <name-components>
32
            '(:[a-zA-Z0-9_][a-zA-Z0-9_.-]{0,127})?' . # <tag-name>
33 12
            '$}';
34
35 12
        $result = preg_match($pattern, $name);
36
37 12
        return 1 === $result;
38
    }
39
40
    /**
41
     * @param string $name
42
     */
43 3
    public function __construct($name)
44
    {
45 3
        $this->parse($name);
46 2
    }
47
48
    /**
49
     * @param string $name
50
     */
51 3
    private function parse($name)
52
    {
53 3
        if (!self::validate($name)) {
54 1
            ParseException::__(sprintf(
55 1
                "'image' invalid Docker image name: '%s'",
56 1
                $name
57
            ));
58
        }
59
60 2
        $this->name = (string)$name;
61 2
    }
62
63 1
    public function __toString()
64
    {
65 1
        return $this->name;
66
    }
67
}
68