Completed
Push — master ( bd46f2...d4c7f5 )
by Roman
08:20
created

SMSenderExtension::beforeCompile()   B

Complexity

Conditions 4
Paths 6

Size

Total Lines 25
Code Lines 15

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 6
CRAP Score 7.456

Importance

Changes 0
Metric Value
dl 0
loc 25
ccs 6
cts 15
cp 0.4
rs 8.5806
c 0
b 0
f 0
cc 4
eloc 15
nc 6
nop 0
crap 7.456
1
<?php
2
3
namespace RM\SMSender\DI;
4
5
use Nette\Configurator;
6
use Nette\DI\Compiler;
7
use Nette\DI\CompilerExtension;
8
use Nette\DI\Helpers;
9
10
/**
11
 * Nette DI extension for SMSender.
12
 */
13 1
class SMSenderExtension extends CompilerExtension
14
{
15
	/** @var [] */
16
	public $defaults = [
17
		'config' => [],
18
		'senderClass' => 'RM\SMSender\EuroSms\Sender',
19
		'setDebugMode' => FALSE,
20
		'messageClass' => 'RM\SMSender\EuroSms\Message',
21
		'messageFactoryClass' => 'RM\SMSender\MessageFactory',
22
		'message' => [
23
			'setFrom' => NULL,
24
			'signature' => NULL,
25
		],
26
	];
27
28
	public function beforeCompile()
29
	{
30 1
		$builder = $this->getContainerBuilder();
31
32 1
		$config = (array) $this->validateConfig($this->defaults);
33
34 1
		$sender = $builder->addDefinition($this->prefix('sender'))
0 ignored issues
show
Deprecated Code introduced by
The method Nette\DI\ServiceDefinition::setClass() has been deprecated.

This method has been deprecated.

Loading history...
35 1
			->setClass($config['senderClass']);
36
37 1
		foreach ($config as $method => $value) {
38 1
			$tmp = new $config['senderClass'];
39
			if ($tmp->getReflection()->hasMethod($method)) {
40
				$sender->addSetup($method, [$value]);
41
			}
42
		}
43
44
		if ($config['message']['signature']) {
45
			$sender->addSetup('$service->onBeforeSend[] = function ($message) { $message->setText($message->getText() . ?); };', [$config['message']['signature']]);
46
		}
47
48
		$builder->addDefinition($this->prefix('messageFactory'))
0 ignored issues
show
Deprecated Code introduced by
The method Nette\DI\ServiceDefinition::setClass() has been deprecated.

This method has been deprecated.

Loading history...
49
			->setClass($config['messageFactoryClass'])
50
			->addSetup('$class', [$config['messageClass']])
51
			->addSetup('$params', [$config['message']]);
52
	}
53
54
	/**
55
	 * Register extension to DI Container.
56
	 * @param  Configurator $config
57
	 */
58
	public static function register(Configurator $config)
59
	{
60 1
		$config->onCompile[] = function (Configurator $config, Compiler $compiler) {
61 1
			$compiler->addExtension('smsender', new SMSenderExtension());
62 1
		};
63 1
	}
64
}
65