Security update for permissions_by_term
[yaffs-website] / vendor / behat / behat / src / Behat / Testwork / Environment / ServiceContainer / EnvironmentExtension.php
1 <?php
2
3 /*
4  * This file is part of the Behat Testwork.
5  * (c) Konstantin Kudryashov <ever.zet@gmail.com>
6  *
7  * For the full copyright and license information, please view the LICENSE
8  * file that was distributed with this source code.
9  */
10
11 namespace Behat\Testwork\Environment\ServiceContainer;
12
13 use Behat\Testwork\ServiceContainer\Extension;
14 use Behat\Testwork\ServiceContainer\ExtensionManager;
15 use Behat\Testwork\ServiceContainer\ServiceProcessor;
16 use Symfony\Component\Config\Definition\Builder\ArrayNodeDefinition;
17 use Symfony\Component\DependencyInjection\ContainerBuilder;
18 use Symfony\Component\DependencyInjection\Definition;
19
20 /**
21  * Testwork test environment extension.
22  *
23  * Extends testwork with environment services.
24  *
25  * @author Konstantin Kudryashov <ever.zet@gmail.com>
26  */
27 final class EnvironmentExtension implements Extension
28 {
29     /*
30      * Available services
31      */
32     const MANAGER_ID = 'environment.manager';
33
34     /*
35      * Available extension points
36      */
37     const HANDLER_TAG = 'environment.handler';
38     const READER_TAG = 'environment.reader';
39
40     /**
41      * @var ServiceProcessor
42      */
43     private $processor;
44
45     /**
46      * Initializes extension.
47      *
48      * @param null|ServiceProcessor $processor
49      */
50     public function __construct(ServiceProcessor $processor = null)
51     {
52         $this->processor = $processor ? : new ServiceProcessor();
53     }
54
55     /**
56      * {@inheritdoc}
57      */
58     public function getConfigKey()
59     {
60         return 'environments';
61     }
62
63     /**
64      * {@inheritdoc}
65      */
66     public function initialize(ExtensionManager $extensionManager)
67     {
68     }
69
70     /**
71      * {@inheritdoc}
72      */
73     public function configure(ArrayNodeDefinition $builder)
74     {
75     }
76
77     /**
78      * {@inheritdoc}
79      */
80     public function load(ContainerBuilder $container, array $config)
81     {
82         $this->loadManager($container);
83         $this->loadStaticEnvironmentHandler($container);
84     }
85
86     /**
87      * {@inheritdoc}
88      */
89     public function process(ContainerBuilder $container)
90     {
91         $this->processHandlers($container);
92         $this->processReaders($container);
93     }
94
95     /**
96      * Loads environment manager.
97      *
98      * @param ContainerBuilder $container
99      */
100     protected function loadManager(ContainerBuilder $container)
101     {
102         $definition = new Definition('Behat\Testwork\Environment\EnvironmentManager');
103         $container->setDefinition(self::MANAGER_ID, $definition);
104     }
105
106     /**
107      * Loads static environments handler.
108      *
109      * @param ContainerBuilder $container
110      */
111     protected function loadStaticEnvironmentHandler(ContainerBuilder $container)
112     {
113         $definition = new Definition('Behat\Testwork\Environment\Handler\StaticEnvironmentHandler');
114         $definition->addTag(self::HANDLER_TAG, array('priority' => 0));
115         $container->setDefinition(self::HANDLER_TAG . '.static', $definition);
116     }
117
118     /**
119      * Processes all environment handlers.
120      *
121      * @param ContainerBuilder $container
122      */
123     protected function processHandlers(ContainerBuilder $container)
124     {
125         $references = $this->processor->findAndSortTaggedServices($container, self::HANDLER_TAG);
126         $definition = $container->getDefinition(self::MANAGER_ID);
127
128         foreach ($references as $reference) {
129             $definition->addMethodCall('registerEnvironmentHandler', array($reference));
130         }
131     }
132
133     /**
134      * Processes all environment readers.
135      *
136      * @param ContainerBuilder $container
137      */
138     protected function processReaders(ContainerBuilder $container)
139     {
140         $references = $this->processor->findAndSortTaggedServices($container, self::READER_TAG);
141         $definition = $container->getDefinition(self::MANAGER_ID);
142
143         foreach ($references as $reference) {
144             $definition->addMethodCall('registerEnvironmentReader', array($reference));
145         }
146     }
147 }