ConverterPipe   A
last analyzed

Complexity

Total Complexity 11

Size/Duplication

Total Lines 51
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 2

Test Coverage

Coverage 100%

Importance

Changes 7
Bugs 1 Features 0
Metric Value
wmc 11
lcom 1
cbo 2
dl 0
loc 51
ccs 22
cts 22
cp 1
rs 10
c 7
b 1
f 0

3 Methods

Rating   Name   Duplication   Size   Complexity  
B createConverter() 0 21 5
A hasElementCallbackConverter() 0 4 3
A hasElementConverter() 0 6 3
1
<?php
2
3
/**
4
 * This file is part of plumphp/plum.
5
 *
6
 * (c) Florian Eckerstorfer <[email protected]>
7
 *
8
 * For the full copyright and license information, please view the LICENSE
9
 * file that was distributed with this source code.
10
 */
11
namespace Plum\Plum\Pipe;
12
13
use InvalidArgumentException;
14
use Plum\Plum\Converter\CallbackConverter;
15
use Plum\Plum\Converter\ConverterInterface;
16
17
/**
18
 * ConverterPipe.
19
 *
20
 * @author    Florian Eckerstorfer
21
 * @copyright 2014-2016 Florian Eckerstorfer
22
 */
23
class ConverterPipe extends AbstractPipe
24
{
25
    /**
26
     * @param ConverterInterface|callable|array $element
27
     *
28
     * @return ConverterPipe
29
     */
30 11
    public static function createConverter($element)
31
    {
32 11
        if (is_callable($element)) {
33 1
            $converter = new CallbackConverter($element);
34 11
        } elseif (self::hasElementCallbackConverter($element)) {
35 1
            $converter = new CallbackConverter($element['converter']);
36 10
        } elseif ($element instanceof ConverterInterface) {
37 1
            $converter = $element;
38 9
        } elseif (self::hasElementConverter($element)) {
39 6
            $converter = $element['converter'];
40 6
        } else {
41 2
            throw new InvalidArgumentException('Workflow::addConverter() must be called with either an instance of '.
42 2
                                               '"Plum\Plum\Converter\ConverterInterface" or with an array that '.
43 2
                                               'contains "converter".');
44
        }
45
46 9
        $pipe            = new self($element);
47 9
        $pipe->converter = $converter;
48
49 9
        return $pipe;
50
    }
51
52
    /**
53
     * @param array|callable|ConverterInterface $element
54
     *
55
     * @return bool
56
     */
57 1
    protected static function hasElementCallbackConverter($element)
58
    {
59 1
        return is_array($element) && isset($element['converter']) && is_callable($element['converter']);
60
    }
61
62
    /**
63
     * @param array|callable|ConverterInterface $element
64
     *
65
     * @return bool
66
     */
67 1
    protected static function hasElementConverter($element)
68
    {
69 1
        return is_array($element)
70 1
               && isset($element['converter'])
71 1
               && $element['converter'] instanceof ConverterInterface;
72
    }
73
}
74