Completed
Push — master ( 280a22...ae35ae )
by Adam
02:21
created

FlashMessagesExtension::loadConfiguration()   B

Complexity

Conditions 4
Paths 6

Size

Total Lines 45
Code Lines 27

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 25
CRAP Score 4.0009

Importance

Changes 0
Metric Value
c 0
b 0
f 0
dl 0
loc 45
ccs 25
cts 26
cp 0.9615
rs 8.5806
cc 4
eloc 27
nc 6
nop 0
crap 4.0009
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
		'useTranslator' => TRUE,
48
	];
49
50
	/**
51
	 * @return void
52
	 */
53
	public function loadConfiguration()
54
	{
55 1
		$config = $this->getConfig($this->defaults);
56 1
		$builder = $this->getContainerBuilder();
57
58 1
		Utils\Validators::assertField($config, 'useTitle', 'bool');
59 1
		Utils\Validators::assertField($config, 'useOverlay', 'bool');
60
61
		// Notifier
62 1
		$builder->addDefinition($this->prefix('notifier'))
63 1
			->setClass(FlashMessages\FlashNotifier::class)
64 1
			->setArguments(['useTranslator' => $config['useTranslator']]);
65
66
		// Session storage
67 1
		$builder->addDefinition($this->prefix('storage'))
68 1
			->setClass(Storage\Session::class);
69
70
		// Display components
71 1
		$control = $builder->addDefinition($this->prefix('messages'))
72 1
			->setClass(Components\Control::class)
73 1
			->setImplement(Components\IControl::class)
74 1
			->setArguments([
75 1
				new Nette\PhpGenerator\PhpLiteral('$templateFile'),
76
			])
77 1
			->setInject(TRUE);
78
79 1
		foreach (['useTitle' => ['enableTitle', 'disableTitle'], 'useOverlay' => ['enableOverlay', 'disableOverlay']] as $parameter => $commands) {
80 1
			if ($config[$parameter] === TRUE) {
81 1
				$control->addSetup('$service->' . $commands[0] . '(?)', [$config[$parameter]]);
82
			} else {
83 1
				$control->addSetup('$service->' . $commands[1] . '(?)', [$config[$parameter]]);
84
			}
85
		}
86
87 1
		if ($config['templateFile']) {
88
			$control->addSetup('$service->setTemplateFile(?)', [$config['templateFile']]);
89
		}
90
91
		// Extension events
92 1
		$builder->addDefinition($this->prefix('onResponseHandler'))
93 1
			->setClass(Events\OnResponseHandler::class);
94
95 1
		$application = $builder->getDefinition('application');
96 1
		$application->addSetup('$service->onResponse[] = ?', ['@' . $this->prefix('onResponseHandler')]);
97 1
	}
98
99
	/**
100
	 * @param Nette\Configurator $config
101
	 * @param string $extensionName
102
	 *
103
	 * @return void
104
	 */
105
	public static function register(Nette\Configurator $config, string $extensionName = 'flashMessages')
106
	{
107 1
		$config->onCompile[] = function (Nette\Configurator $config, Nette\DI\Compiler $compiler) use ($extensionName) {
108 1
			$compiler->addExtension($extensionName, new FlashMessagesExtension());
109 1
		};
110 1
	}
111
}
112