Passed
Push — test ( 971610...15b27e )
by Tom
09:01
created

RunnerOptions   A

Complexity

Total Complexity 7

Size/Duplication

Total Lines 73
Duplicated Lines 0 %

Test Coverage

Coverage 100%

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 14
c 1
b 0
f 0
dl 0
loc 73
ccs 20
cts 20
cp 1
rs 10
wmc 7

6 Methods

Rating   Name   Duplication   Size   Complexity  
A run() 0 6 1
A parseDockerClient() 0 3 1
A parsePrefix() 0 8 2
A bind() 0 3 1
A __construct() 0 3 1
A parse() 0 5 1
1
<?php
2
3
/* this file is part of pipelines */
4
5
namespace Ktomk\Pipelines\Utility;
6
7
use Ktomk\Pipelines\Cli\Args;
8
use Ktomk\Pipelines\Cli\ArgsException;
9
use Ktomk\Pipelines\Runner\Docker\Binary\Repository;
10
use Ktomk\Pipelines\Runner\RunOpts;
11
12
/**
13
 * aggregated args parser for RunOpts / runner options
14
 *
15
 * @package Ktomk\Pipelines\Utility\Args
16
 */
17
class RunnerOptions
18
{
19
    /**
20
     * @var Args
21
     */
22
    private $args;
23
24
    /**
25
     * @param Args $args
26
     * @return RunnerOptions
27
     */
28 2
    public static function bind(Args $args)
29
    {
30 2
        return new self($args);
31
    }
32
33
    /**
34
     * @param Args $args
35
     */
36 2
    public function __construct(Args $args)
37
    {
38 2
        $this->args = $args;
39 2
    }
40
41
    /**
42
     * @throws ArgsException
43
     * @return RunOpts
44
     */
45 2
    public function run()
46
    {
47 2
        $runOpts = new RunOpts();
48 2
        $this->parse($this->args, $runOpts);
49
50 1
        return $runOpts;
51
    }
52
53
    /**
54
     * Parse keep arguments
55
     *
56
     * @param Args $args
57
     * @param RunOpts $runOpts
58
     * @throws ArgsException
59
     */
60 2
    public function parse(Args $args, RunOpts $runOpts)
61
    {
62 2
        $runOpts->setPrefix($this->parsePrefix($args));
63
64 1
        $runOpts->setBinaryPackage($this->parseDockerClient($args));
65 1
    }
66
67
    /**
68
     * @param Args $args
69
     * @throws ArgsException
70
     * @return string
71
     */
72 1
    private function parseDockerClient(Args $args)
73
    {
74 1
        return $args->getOptionArgument('docker-client', Repository::PKG_INTEGRATE);
75
    }
76
77
    /**
78
     * @param Args $args
79
     * @throws ArgsException
80
     * @return string
81
     */
82 2
    private function parsePrefix(Args $args)
83
    {
84 2
        $prefix = $args->getOptionArgument('prefix', App::UTILITY_NAME);
85 2
        if (!preg_match('~^[a-z]{3,}$~', $prefix)) {
86 1
            ArgsException::__(sprintf("invalid prefix: '%s'", $prefix));
87
        }
88
89 1
        return $prefix;
90
    }
91
}
92