Passed
Push — master ( dc496c...d8d9f2 )
by Tom
02:40
created

ConfigOptions   A

Complexity

Total Complexity 8

Size/Duplication

Total Lines 65
Duplicated Lines 0 %

Test Coverage

Coverage 100%

Importance

Changes 1
Bugs 0 Features 1
Metric Value
eloc 15
c 1
b 0
f 1
dl 0
loc 65
ccs 17
cts 17
cp 1
rs 10
wmc 8

4 Methods

Rating   Name   Duplication   Size   Complexity  
A parse() 0 9 4
A run() 0 5 1
A __construct() 0 6 1
A bind() 0 3 2
1
<?php
2
3
/* this file is part of pipelines */
4
5
namespace Ktomk\Pipelines\Utility;
6
7
use Ktomk\Pipelines\Cli\Args;
8
9
/**
10
 * handle configuration related options:
11
 *
12
 * -c <name>=<value>
13
 *
14
 * @see Options
15
 *
16
 * @package Ktomk\Pipelines\Utility\Args
17
 */
18
class ConfigOptions extends Options implements Runnable
19
{
20
    /**
21
     * @var Args
22
     */
23
    private $args;
24
25
    /**
26
     * @var Options
27
     */
28
    private $options;
29
30
    /**
31
     * @param Args $args
32
     * @param null|Options $options
33
     *
34
     * @return ConfigOptions
35
     */
36 1
    public static function bind(Args $args, Options $options = null)
37
    {
38 1
        return new self($args, $options ?: Options::create());
39
    }
40
41
    /**
42
     * @param Args $args
43
     */
44 1
    public function __construct(Args $args, Options $options)
45
    {
46 1
        $this->args = $args;
47 1
        $this->options = $options;
48
49 1
        parent::__construct(array('internal'));
50 1
    }
51
52
    /**
53
     * @throws \Ktomk\Pipelines\Cli\ArgsException
54
     *
55
     * @return Options
56
     */
57 1
    public function run()
58
    {
59 1
        $this->parse($this->args);
60
61 1
        return $this->options;
62
    }
63
64
    /**
65
     * Parse keep arguments
66
     *
67
     * @param Args $args
68
     *
69
     * @throws \Ktomk\Pipelines\Cli\ArgsException
70
     *
71
     * @return void
72
     *
73
     */
74 1
    public function parse(Args $args)
75
    {
76 1
        $options = $this->options;
77
78 1
        while (null !== $setting = $args->getOptionArgument('c')) {
79 1
            list($name, $value) = explode('=', $setting, 2) + array('undef', null);
80 1
            $default = $options->get($name);
81 1
            $type = null === $default ? 'string' : gettype($default);
82 1
            settype($value, $type) && $options->definition[$name] = array($value);
83
        }
84 1
    }
85
}
86