-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathConfigResolver.php
More file actions
74 lines (66 loc) · 2.24 KB
/
ConfigResolver.php
File metadata and controls
74 lines (66 loc) · 2.24 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
<?php
declare(strict_types=1);
namespace Peak\Config;
use Peak\Blueprint\Config\Config;
use Peak\Blueprint\Collection\Collection;
use Peak\Blueprint\Common\ResourceResolver;
use Peak\Blueprint\Config\Stream;
use Peak\Config\Exception\UnknownResourceException;
use Peak\Config\Processor\ArrayProcessor;
use Peak\Config\Processor\CallableProcessor;
use Peak\Config\Processor\CollectionProcessor;
use Peak\Config\Processor\ConfigProcessor;
use Peak\Config\Processor\StdClassProcessor;
use Peak\Config\Stream\ConfigStream;
use Peak\Config\Stream\DataStream;
use Peak\Config\Stream\FileStream;
use \stdClass;
use function is_array;
use function is_callable;
use function is_string;
class ConfigResolver implements ResourceResolver
{
/**
* @var null|FilesHandlers
*/
private $filesHandlers;
/**
* ConfigResolver constructor.
*
*/
public function __construct(?FilesHandlers $filesHandlers)
{
$this->filesHandlers = $filesHandlers;
}
/**
* Resolve a config resource to a valid StreamInterface
*
* @param mixed $resource
* @return Stream
* @throws UnknownResourceException
*/
public function resolve($resource): Stream
{
// detect best way to load and process configuration content
if (is_array($resource)) {
return new DataStream($resource, new ArrayProcessor());
} elseif (is_callable($resource)) {
return new DataStream($resource, new CallableProcessor());
} elseif ($resource instanceof Config) {
return new DataStream($resource, new ConfigProcessor());
} elseif ($resource instanceof Collection) {
return new DataStream($resource, new CollectionProcessor());
} elseif ($resource instanceof Stream) {
return $resource;
} elseif ($resource instanceof stdClass) {
return new DataStream($resource, new StdClassProcessor());
} elseif (is_string($resource)) {
$filesHandlers = $this->filesHandlers;
if (null === $filesHandlers) {
$filesHandlers = new FilesHandlers(null);
}
return new FileStream($resource, $filesHandlers);
}
throw new UnknownResourceException($resource);
}
}