Completed
Push — master ( 5f4179...916f6e )
by Richard
11s
created

PhpSpecRunExtension::load()   B

Complexity

Conditions 4
Paths 1

Size

Total Lines 43
Code Lines 28

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 43
rs 8.5806
c 0
b 0
f 0
cc 4
eloc 28
nc 1
nop 2
1
<?php
2
3
namespace RMiller\BehatSpec\Extension\PhpSpecRunExtension;
4
5
use PhpSpec\Extension;
6
use PhpSpec\ServiceContainer;
7
use RMiller\BehatSpec\Extension\PhpSpecRunExtension\Process\CachingExecutableFinder;
8
use RMiller\BehatSpec\Extension\PhpSpecRunExtension\Process\CommandRunner\CliFunctionChecker;
9
use RMiller\BehatSpec\Extension\PhpSpecRunExtension\Process\CommandRunner\PassthruCommandRunner;
10
use RMiller\BehatSpec\Extension\PhpSpecRunExtension\Process\CommandRunner\PcntlCommandRunner;
11
use RMiller\BehatSpec\Extension\PhpSpecRunExtension\Process\RunRunner\CompositeRunRunner;
12
use RMiller\BehatSpec\Extension\PhpSpecRunExtension\Process\RunRunner\PlatformSpecificRunRunner;
13
use Symfony\Component\Process\PhpExecutableFinder;
14
15
class PhpSpecRunExtension implements Extension
16
{
17
    /**
18
     * @param ServiceContainer $container
19
     * @param array $params
20
     */
21
    public function load(ServiceContainer $container, array $params)
22
    {
23
        $container->define('rmiller.run_runner', function ($c) {
24
25
            $params = $c->getParam('rerunner', []);
26
            $phpspecPath = isset($params['path']) ? $params['path'] : 'bin/phpspec';
27
            $phpspecConfig = isset($params['config']) ? $params['config'] : null;
28
29
            return new CompositeRunRunner([
30
                new PlatformSpecificRunRunner(
31
                    new PcntlCommandRunner($c->get('rmiller.run.function_checker')),
32
                    $c->get('rmiller.run.caching_executable_finder'),
33
                    $phpspecPath,
34
                    $phpspecConfig
35
                ),
36
                new PlatformSpecificRunRunner(
37
                    new PassthruCommandRunner($c->get('rmiller.run.function_checker')),
38
                    $c->get('rmiller.run.caching_executable_finder'),
39
                    $phpspecPath,
40
                    $phpspecConfig
41
                )
42
            ]);
43
        });
44
45
        $container->define('rmiller.run.function_checker', function ($c) {
46
            return new CliFunctionChecker($c->get('rmiller.run.caching_executable_finder'));
47
        });
48
49
        $container->define('rmiller.run.caching_executable_finder', function () {
50
            return new CachingExecutableFinder(new PhpExecutableFinder());
51
        });
52
53
        $container->define('console_event_dispatcher.listeners.run_runner', function ($c) {
54
            $params = $c->getParam('rerunner', []);
55
            $commands = isset($params['commands']) ? $params['commands'] : ['describe'];
56
57
            return new CommandSubscriber(
58
                $c->get('rmiller.run_runner'),
59
                $c->get('console.io'),
60
                $commands
61
            );
62
        }, ['console_event_dispatcher.listeners']);
63
    }
64
}
65