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

RunnerOptions::run()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 6
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 4
CRAP Score 1

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 1
eloc 3
c 1
b 0
f 0
nc 1
nop 0
dl 0
loc 6
ccs 4
cts 4
cp 1
crap 1
rs 10
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