X-Git-Url: http://www.aleph1.co.uk/gitweb/?p=yaffs-website;a=blobdiff_plain;f=vendor%2Fbehat%2Fbehat%2Fsrc%2FBehat%2FBehat%2FTransformation%2FServiceContainer%2FTransformationExtension.php;fp=vendor%2Fbehat%2Fbehat%2Fsrc%2FBehat%2FBehat%2FTransformation%2FServiceContainer%2FTransformationExtension.php;h=f322ee92672afd811d8654b2fd5b86ff429c4cd6;hp=0000000000000000000000000000000000000000;hb=1270d9129ce8f27c9b28b10518e32132c58e0aca;hpb=c27c0f0cdaa3f354b1fe54a56ae7e854be6e3f68 diff --git a/vendor/behat/behat/src/Behat/Behat/Transformation/ServiceContainer/TransformationExtension.php b/vendor/behat/behat/src/Behat/Behat/Transformation/ServiceContainer/TransformationExtension.php new file mode 100644 index 000000000..f322ee926 --- /dev/null +++ b/vendor/behat/behat/src/Behat/Behat/Transformation/ServiceContainer/TransformationExtension.php @@ -0,0 +1,177 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Behat\Behat\Transformation\ServiceContainer; + +use Behat\Behat\Context\ServiceContainer\ContextExtension; +use Behat\Behat\Definition\ServiceContainer\DefinitionExtension; +use Behat\Testwork\Call\ServiceContainer\CallExtension; +use Behat\Testwork\Environment\ServiceContainer\EnvironmentExtension; +use Behat\Testwork\ServiceContainer\Extension; +use Behat\Testwork\ServiceContainer\ExtensionManager; +use Behat\Testwork\ServiceContainer\ServiceProcessor; +use Behat\Testwork\Translator\ServiceContainer\TranslatorExtension; +use Symfony\Component\Config\Definition\Builder\ArrayNodeDefinition; +use Symfony\Component\DependencyInjection\ContainerBuilder; +use Symfony\Component\DependencyInjection\Definition; +use Symfony\Component\DependencyInjection\Reference; + +/** + * Provides definition arguments transformation functionality. + * + * @author Konstantin Kudryashov + */ +class TransformationExtension implements Extension +{ + /* + * Available services + */ + const REPOSITORY_ID = 'transformation.repository'; + + /* + * Available extension points + */ + const ARGUMENT_TRANSFORMER_TAG = 'transformation.argument_transformer'; + + /** + * @var ServiceProcessor + */ + private $processor; + + /** + * Initializes extension. + * + * @param null|ServiceProcessor $processor + */ + public function __construct(ServiceProcessor $processor = null) + { + $this->processor = $processor ?: new ServiceProcessor(); + } + + /** + * {@inheritdoc} + */ + public function getConfigKey() + { + return 'transformations'; + } + + /** + * {@inheritdoc} + */ + public function initialize(ExtensionManager $extensionManager) + { + } + + /** + * {@inheritdoc} + */ + public function configure(ArrayNodeDefinition $builder) + { + } + + /** + * {@inheritdoc} + */ + public function load(ContainerBuilder $container, array $config) + { + $this->loadDefinitionArgumentsTransformer($container); + $this->loadDefaultTransformers($container); + $this->loadAnnotationReader($container); + $this->loadRepository($container); + } + + /** + * {@inheritdoc} + */ + public function process(ContainerBuilder $container) + { + $this->processArgumentsTransformers($container); + } + + /** + * Loads definition arguments transformer. + * + * @param ContainerBuilder $container + */ + protected function loadDefinitionArgumentsTransformer(ContainerBuilder $container) + { + $definition = new Definition('Behat\Behat\Transformation\Call\Filter\DefinitionArgumentsTransformer'); + $definition->addTag(CallExtension::CALL_FILTER_TAG, array('priority' => 200)); + $container->setDefinition($this->getDefinitionArgumentTransformerId(), $definition); + } + + /** + * Loads default transformers. + * + * @param ContainerBuilder $container + */ + protected function loadDefaultTransformers(ContainerBuilder $container) + { + $definition = new Definition('Behat\Behat\Transformation\Transformer\RepositoryArgumentTransformer', array( + new Reference(self::REPOSITORY_ID), + new Reference(CallExtension::CALL_CENTER_ID), + new Reference(DefinitionExtension::PATTERN_TRANSFORMER_ID), + new Reference(TranslatorExtension::TRANSLATOR_ID) + )); + $definition->addTag(self::ARGUMENT_TRANSFORMER_TAG, array('priority' => 50)); + $container->setDefinition(self::ARGUMENT_TRANSFORMER_TAG . '.repository', $definition); + } + + /** + * Loads transformation context annotation reader. + * + * @param ContainerBuilder $container + */ + protected function loadAnnotationReader(ContainerBuilder $container) + { + $definition = new Definition('Behat\Behat\Transformation\Context\Annotation\TransformationAnnotationReader'); + $definition->addTag(ContextExtension::ANNOTATION_READER_TAG, array('priority' => 50)); + $container->setDefinition(ContextExtension::ANNOTATION_READER_TAG . '.transformation', $definition); + } + + /** + * Loads transformations repository. + * + * @param ContainerBuilder $container + */ + protected function loadRepository(ContainerBuilder $container) + { + $definition = new Definition('Behat\Behat\Transformation\TransformationRepository', array( + new Reference(EnvironmentExtension::MANAGER_ID) + )); + $container->setDefinition(self::REPOSITORY_ID, $definition); + } + + /** + * Processes all available argument transformers. + * + * @param ContainerBuilder $container + */ + protected function processArgumentsTransformers(ContainerBuilder $container) + { + $references = $this->processor->findAndSortTaggedServices($container, self::ARGUMENT_TRANSFORMER_TAG); + $definition = $container->getDefinition($this->getDefinitionArgumentTransformerId()); + + foreach ($references as $reference) { + $definition->addMethodCall('registerArgumentTransformer', array($reference)); + } + } + + /** + * Returns definition argument transformer service id. + * + * @return string + */ + protected function getDefinitionArgumentTransformerId() + { + return CallExtension::CALL_FILTER_TAG . '.definition_argument_transformer'; + } +}