Passed
Push — master ( 74d4a8...9f17d2 )
by
unknown
01:31
created

MonologBuilder::__construct()   A

Complexity

Conditions 3
Paths 4

Size

Total Lines 6
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 4
CRAP Score 3

Importance

Changes 0
Metric Value
dl 0
loc 6
ccs 4
cts 4
cp 1
rs 9.4285
c 0
b 0
f 0
cc 3
eloc 3
nc 4
nop 1
crap 3
1
<?php
2
3
namespace vfalies\tmdb\Factory\Builder;
4
5
use Monolog\Logger;
6
use vfalies\tmdb\Interfaces\Factory\LoggerBuilderInterface;
7
8
/**
9
 * @package FeedIo
10
 */
11
class MonologBuilder implements LoggerBuilderInterface
12
{
13
14
    protected $loggerName = 'feed-io';
15
16
    protected $handlersConfig = [
17
        [
18
            'class' => 'Monolog\Handler\StreamHandler',
19
            'params' => ['php://stdout', Logger::DEBUG],
20
        ],
21
    ];
22
23
    /**
24
     * @param array $config
25
     */
26 4
    public function __construct(array $config = [])
27
    {
28 4
        $this->loggerName = isset($config['name']) ? $config['name']:$this->loggerName;
29
30 4
        $this->handlersConfig = isset($config['handlers']) ? $config['handlers']:$this->handlersConfig;
31 4
    }
32
33
    /**
34
     * This method MUST return a valid PSR3 logger
35
     * @return \Monolog\Logger
36
     */
37 1
    public function getLogger()
38
    {
39 1
        $logger = new Logger($this->loggerName);
40
41 1
        foreach ($this->handlersConfig as $config) {
42 1
            $handler = $this->newHandler($config['class'], $config['params']);
43 1
            $logger->pushHandler($handler);
44
        }
45
46 1
        return $logger;
47
    }
48
49
    /**
50
     * @param string $class
51
     * @param array $params
52
     * @return Monolog\Handler\HandlerInterface
53
     */
54 2
    public function newHandler($class, array $params = [])
55
    {
56 2
        $reflection = new \ReflectionClass($class);
57
58 2
        if (! $reflection->implementsInterface('Monolog\Handler\HandlerInterface')) {
59 1
            throw new \InvalidArgumentException();
60
        }
61
62 1
        return $reflection->newInstanceArgs($params);
63
    }
64
65
    /**
66
     * This method MUST return the name of the main class
67
     * @return string
68
     */
69 1
    public function getMainClassName()
70
    {
71 1
        return 'Monolog\Logger';
72
    }
73
74
    /**
75
     * This method MUST return the name of the package name
76
     * @return string
77
     */
78 1
    public function getPackageName()
79
    {
80 1
        return 'monolog/monolog';
81
    }
82
}
83