Completed
Pull Request — 2.0 (#75)
by Julien
02:03
created

ConverterPooler   A

Complexity

Total Complexity 7

Size/Duplication

Total Lines 80
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 5

Importance

Changes 3
Bugs 2 Features 0
Metric Value
wmc 7
lcom 1
cbo 5
dl 0
loc 80
c 3
b 2
f 0
rs 10

5 Methods

Rating   Name   Duplication   Size   Complexity  
A getClient() 0 8 2
A __construct() 0 4 1
A getPoolerType() 0 4 1
A createClient() 0 16 2
A getConverterHolder() 0 4 1
1
<?php
2
/*
3
 * This file is part of the Pomm's Foundation package.
4
 *
5
 * (c) 2014 - 2015 Grégoire HUBERT <[email protected]>
6
 *
7
 * For the full copyright and license information, please view the LICENSE
8
 * file that was distributed with this source code.
9
 */
10
namespace PommProject\Foundation\Converter;
11
12
use PommProject\Foundation\Client\ClientPooler;
13
use PommProject\Foundation\Exception\ConverterException;
14
15
/**
16
 * ConverterPooler
17
 *
18
 * Pooler for converters.
19
 *
20
 * @package     Foundation
21
 * @copyright   2014 - 2015 Grégoire HUBERT
22
 * @author      Grégoire HUBERT
23
 * @license     X11 {@link http://opensource.org/licenses/mit-license.php}
24
 * @see         ClientPooler
25
 */
26
class ConverterPooler extends ClientPooler
27
{
28
    protected $converter_holder;
29
30
    /**
31
     * __construct
32
     *
33
     * Instantiate converter pooler.
34
     *
35
     * @access public
36
     * @param  ConverterHolder $converter_holder
37
     */
38
    public function __construct(ConverterHolder $converter_holder)
39
    {
40
        $this->converter_holder = $converter_holder;
41
    }
42
43
    /**
44
     * getPoolerType
45
     *
46
     * @see ClientPoolerInterface
47
     */
48
    public function getPoolerType()
49
    {
50
        return 'converter';
51
    }
52
53
    /**
54
     * getClient
55
     *
56
     * @see ClientPoolerInterface
57
     */
58
    public function getClient($identifier)
59
    {
60
        if ($identifier !== PgArray::getSubType($identifier)) {
61
            return parent::getClient('array');
62
        } else {
63
            return parent::getClient($identifier);
64
        }
65
    }
66
67
    /**
68
     * createClient
69
     *
70
     * Check in the converter holder if the type has an associated converter.
71
     * If not, an exception is thrown.
72
     *
73
     * @see   ClientPooler
74
     * @throws ConverterException
75
     */
76
    public function createClient($identifier)
77
    {
78
        if (!$this->converter_holder->hasType($identifier)) {
79
            throw new ConverterException(
80
                sprintf(
81
                    "No converter registered for type '%s'.",
82
                    $identifier
83
                )
84
            );
85
        }
86
87
        return new ConverterClient(
88
            $identifier,
89
            $this->converter_holder->getConverterForType($identifier)
90
        );
91
    }
92
93
    /**
94
     * getConverterHolder
95
     *
96
     * Expose converter holder so one can add new converters on the fly.
97
     *
98
     * @access public
99
     * @return ConverterHolder
100
     */
101
    public function getConverterHolder()
102
    {
103
        return $this->converter_holder;
104
    }
105
}
106