Completed
Push — master ( b31514...603a9f )
by Changwan
06:16
created

PhpLoader::__construct()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 3
CRAP Score 1

Importance

Changes 0
Metric Value
cc 1
eloc 2
nc 1
nop 1
dl 0
loc 4
ccs 3
cts 3
cp 1
crap 1
rs 10
c 0
b 0
f 0
1
<?php
2
namespace Wandu\Config\Loader;
3
4
use Wandu\Config\Contracts\Loader;
5
use Throwable;
6
7
class PhpLoader implements Loader
8
{
9
    /** @var string */
10
    protected $pattern;
11
    
12 3
    public function __construct(string $pattern = '~^[a-z_][a-z0-9_]*\.php$~')
13
    {
14 3
        $this->pattern = $pattern;
15 3
    }
16
    
17
    /**
18
     * {@inheritdoc}
19
     */
20 3
    public function test(string $path): bool
21
    {
22 3
        return file_exists($path) && preg_match($this->pattern, pathinfo($path)['basename']);
23
    }
24
25
    /**
26
     * {@inheritdoc}
27
     */
28 3
    public function load(string $path)
29
    {
30 3
        $level = ob_get_level();
31 3
        ob_start();
32
        try {
33 3
            $config = require $path;
34 3
            ob_end_flush();
35 3
            if (is_array($config)) {
36 3
                return $config;
37
            }
38
        } catch (Throwable $e) {
39
            while (ob_get_level() - $level > 0) ob_end_flush();
40
        }
41
        return [];
42
    }
43
}
44