Completed
Push — master ( 688f64...482ee6 )
by Adam
02:00
created

FlashMessagesExtension   A

Complexity

Total Complexity 5

Size/Duplication

Total Lines 67
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 7

Test Coverage

Coverage 96.77%

Importance

Changes 0
Metric Value
wmc 5
c 0
b 0
f 0
lcom 1
cbo 7
dl 0
loc 67
ccs 30
cts 31
cp 0.9677
rs 10

2 Methods

Rating   Name   Duplication   Size   Complexity  
B loadConfiguration() 0 44 4
A register() 0 6 1
1
<?php
2
/**
3
 * FlashMessagesExtension.php
4
 *
5
 * @copyright      More in license.md
6
 * @license        http://www.ipublikuj.eu
7
 * @author         Adam Kadlec http://www.ipublikuj.eu
8
 * @package        iPublikuj:FlashMessages!
9
 * @subpackage     DI
10
 * @since          1.0.0
11
 *
12
 * @date           05.02.15
13
 */
14
15
declare(strict_types = 1);
16
17
namespace IPub\FlashMessages\DI;
18
19
use Nette;
20
use Nette\DI;
21
use Nette\Utils;
22
use Nette\PhpGenerator as Code;
23
24
use IPub;
25
use IPub\FlashMessages;
26
use IPub\FlashMessages\Components;
27
use IPub\FlashMessages\Events;
28
use IPub\FlashMessages\Storage;
29
30
/**
31
 * Flash messages extension container
32
 *
33
 * @package        iPublikuj:FlashMessages!
34
 * @subpackage     DI
35
 *
36
 * @author         Adam Kadlec <[email protected]>
37
 */
38 1
class FlashMessagesExtension extends DI\CompilerExtension
39
{
40
	/**
41
	 * @var array
42
	 */
43
	protected $defaults = [
44
		'useTitle'     => TRUE,
45
		'useOverlay'   => FALSE,
46
		'templateFile' => NULL
47
	];
48
49
	public function loadConfiguration()
50
	{
51 1
		$config = $this->getConfig($this->defaults);
52 1
		$builder = $this->getContainerBuilder();
53
54 1
		Utils\Validators::assertField($config, 'useTitle', 'bool');
55 1
		Utils\Validators::assertField($config, 'useOverlay', 'bool');
56
57
		// Notifier
58 1
		$builder->addDefinition($this->prefix('notifier'))
59 1
			->setClass(FlashMessages\FlashNotifier::class);
60
61
		// Session storage
62 1
		$builder->addDefinition($this->prefix('storage'))
63 1
			->setClass(Storage\Session::class);
64
65
		// Display components
66 1
		$control = $builder->addDefinition($this->prefix('messages'))
67 1
			->setClass(Components\Control::class)
68 1
			->setImplement(Components\IControl::class)
69 1
			->setArguments([
70 1
				new Nette\PhpGenerator\PhpLiteral('$templateFile'),
71
			])
72 1
			->setInject(TRUE);
73
74 1
		foreach (['useTitle' => ['enableTitle', 'disableTitle'], 'useOverlay' => ['enableOverlay', 'disableOverlay']] as $parameter => $commands) {
75 1
			if ($config[$parameter] === TRUE) {
76 1
				$control->addSetup('$service->' . $commands[0] . '(?)', [$config[$parameter]]);
77
			} else {
78 1
				$control->addSetup('$service->' . $commands[1] . '(?)', [$config[$parameter]]);
79
			}
80
		}
81
82 1
		if ($config['templateFile']) {
83
			$control->addSetup('$service->setTemplateFile(?)', [$config['templateFile']]);
84
		}
85
86
		// Extension events
87 1
		$builder->addDefinition($this->prefix('onResponseHandler'))
88 1
			->setClass(Events\OnResponseHandler::class);
89
90 1
		$application = $builder->getDefinition('application');
91 1
		$application->addSetup('$service->onResponse[] = ?', ['@' . $this->prefix('onResponseHandler')]);
92 1
	}
93
94
	/**
95
	 * @param Nette\Configurator $config
96
	 * @param string $extensionName
97
	 */
98
	public static function register(Nette\Configurator $config, string $extensionName = 'flashMessages')
99
	{
100 1
		$config->onCompile[] = function (Nette\Configurator $config, Nette\DI\Compiler $compiler) use ($extensionName) {
101 1
			$compiler->addExtension($extensionName, new FlashMessagesExtension());
102 1
		};
103 1
	}
104
}
105