Completed
Pull Request — master (#2)
by Tomáš
09:49
created

ExtensionAdapterFactory   A

Complexity

Total Complexity 3

Size/Duplication

Total Lines 42
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 2

Importance

Changes 0
Metric Value
wmc 3
lcom 1
cbo 2
dl 0
loc 42
rs 10
c 0
b 0
f 0

2 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 5 1
A create() 0 13 2
1
<?php
2
3
declare(strict_types=1);
4
5
namespace SixtyEightPublishers\User\DI;
6
7
use Nette;
8
use SixtyEightPublishers;
9
10
final class ExtensionAdapterFactory
11
{
12
	use Nette\SmartObject;
13
14
	/** @var \Nette\DI\ContainerBuilder  */
15
	private $builder;
16
17
	/** @var \ArrayObject  */
18
	private $sharedData;
19
20
	/**
21
	 * @param \Nette\DI\ContainerBuilder $builder
22
	 * @param \ArrayObject               $sharedData
23
	 */
24
	public function __construct(Nette\DI\ContainerBuilder $builder, \ArrayObject $sharedData)
25
	{
26
		$this->builder = $builder;
27
		$this->sharedData = $sharedData;
28
	}
29
30
	/**
31
	 * @param string $className
32
	 * @param string $name
33
	 * @param array  $config
34
	 *
35
	 * @return \SixtyEightPublishers\User\DI\IExtensionAdapter
36
	 * @throws \SixtyEightPublishers\User\Common\Exception\InvalidArgumentException
37
	 */
38
	public function create(string $className, string $name, array $config): IExtensionAdapter
39
	{
40
		if (!is_subclass_of($className, IExtensionAdapter::class, TRUE)) {
41
			throw new SixtyEightPublishers\User\Common\Exception\InvalidArgumentException(sprintf(
42
				'Passed classname must be implementor of %s interface',
43
				IExtensionAdapter::class
44
			));
45
		}
46
47
		return new ExtensionAdapterProxy(function () use ($className, $name, $config) {
48
			return new $className($this->builder, $name, $config, $this->sharedData);
49
		});
50
	}
51
}
52