예제 #1
0
 public function getConfigTreeBuilder()
 {
     $nodeBuilder = new NodeBuilder();
     $nodeBuilder->setNodeClass('task', __NAMESPACE__ . '\\Builder\\TaskNodeDefinition');
     $nodeBuilder->setNodeClass('transporter', __NAMESPACE__ . '\\Builder\\TransporterNodeDefinition');
     $nodeBuilder->setNodeClass('strategy', __NAMESPACE__ . '\\Builder\\StrategyNodeDefinition');
     $treeBuilder = new TreeBuilder();
     $rootNode = $treeBuilder->root('conveyor', 'array', $nodeBuilder);
     $validSchemes = array('git', 'svn');
     $rootNode->children()->arrayNode('repository')->isRequired()->children()->scalarNode('type')->isRequired()->cannotBeEmpty()->end()->scalarNode('url')->isRequired()->cannotBeEmpty()->end()->end()->beforeNormalization()->ifString()->then(function ($v) {
         $result = parse_url($v);
         if (false === $result) {
             throw new InvalidConfigurationException(sprintf('Could not parse repository url "%s"', $v));
         }
         return array('type' => $result['scheme'], 'url' => $v);
     })->end()->validate()->ifTrue(function ($v) use($validSchemes) {
         return false === in_array($v['type'], $validSchemes);
     })->thenInvalid('Invalid repository type "%s". Valid types are: ' . implode(', ', $validSchemes) . '.')->end()->end()->arrayNode('targets')->prototype('array')->children()->scalarNode('name')->end()->scalarNode('url')->end()->arrayNode('groups')->defaultValue(array())->beforeNormalization()->ifString()->then(function ($v) {
         return array($v);
     })->end()->prototype('scalar')->end()->end()->node('transport', 'transporter')->setTransporterFactory($this->transporterFactory)->isRequired()->beforeNormalization()->ifString()->then(function ($v) {
         $regex = '/^(?P<type>\\w+):\\/\\/(?P<user>\\w+)(:(?P<pass>\\w+))?@(?P<host>[.\\w]+)(:(?P<port>\\w+))?(?P<path>\\/[\\/\\w]+)/';
         if (is_string($v)) {
             if (preg_match($regex, $v, $matches)) {
                 return array('type' => $matches['type'], 'user' => $matches['user'], 'pass' => $matches['pass'] ?: null, 'host' => $matches['host'], 'port' => $matches['port'], 'path' => $matches['path']);
             } else {
                 throw new InvalidConfigurationException(sprintf('Could not parse "%s" as DSN', $v));
             }
         }
         return $v;
     })->end()->end()->arrayNode('parameters')->prototype('scalar')->end()->end()->end()->end()->end()->arrayNode('build')->children()->scalarNode('dir')->defaultValue('/tmp/conveyor')->beforeNormalization()->ifString()->then(function ($v) {
         // resolve home dir
         $path = preg_replace('/^\\~/', getenv('HOME'), $v);
         return $path;
     })->end()->end()->arrayNode('derived')->prototype('array')->children()->scalarNode('source')->end()->scalarNode('derived')->end()->end()->end()->end()->arrayNode('tasks')->prototype('task')->setTaskFactory($this->taskFactory)->children()->arrayNode('targets')->beforeNormalization()->ifString()->then(function ($v) {
         return array($v);
     })->end()->prototype('scalar')->end()->end()->end()->end()->end()->end()->end()->arrayNode('undeploy')->children()->arrayNode('tasks')->prototype('task')->setTaskFactory($this->taskFactory)->children()->arrayNode('targets')->beforeNormalization()->ifString()->then(function ($v) {
         return array($v);
     })->end()->prototype('scalar')->end()->end()->end()->end()->end()->end()->end()->arrayNode('deploy')->addDefaultsIfNotSet()->children()->node('strategy', 'strategy')->beforeNormalization()->ifString()->then(function ($v) {
         return array('type' => $v);
     })->end()->setStrategyFactory($this->strategyFactory)->addDefaultsIfNotSet()->children()->scalarNode('type')->isRequired()->defaultValue('releases')->end()->end()->end()->arrayNode('before')->prototype('task')->setTaskFactory($this->taskFactory)->children()->arrayNode('targets')->beforeNormalization()->ifString()->then(function ($v) {
         return array($v);
     })->end()->prototype('scalar')->end()->end()->end()->end()->end()->arrayNode('after')->prototype('task')->setTaskFactory($this->taskFactory)->children()->arrayNode('targets')->beforeNormalization()->ifString()->then(function ($v) {
         return array($v);
     })->end()->prototype('scalar')->end()->end()->end()->end()->end()->arrayNode('final')->prototype('task')->setTaskFactory($this->taskFactory)->children()->arrayNode('targets')->beforeNormalization()->ifString()->then(function ($v) {
         return array($v);
     })->end()->prototype('scalar')->end()->end()->end()->end()->end()->end()->end()->end();
     return $treeBuilder;
 }
예제 #2
0
 public function testNodeTypesAreNotCaseSensitive()
 {
     $builder = new BaseNodeBuilder();
     $node1 = $builder->node('', 'VaRiAbLe');
     $node2 = $builder->node('', 'variable');
     $this->assertEquals(get_class($node1), get_class($node2));
     $builder->setNodeClass('CuStOm', __NAMESPACE__ . '\\SomeNodeDefinition');
     $node1 = $builder->node('', 'CUSTOM');
     $node2 = $builder->node('', 'custom');
     $this->assertEquals(get_class($node1), get_class($node2));
 }
 /**
  * {@inheritdoc}
  */
 public function getConfigTreeBuilder()
 {
     $nodeBuilder = new NodeBuilder();
     $nodeBuilder->setNodeClass('dynamicArray', DynamicArrayNodeDefinition::class);
     $treeBuilder = new TreeBuilder();
     $rootNode = $treeBuilder->root('prooph', 'dynamicArray', $nodeBuilder);
     // our factories handles validation and we are flexible with keys
     // Please take a look at the docs or specific prooph component factory for the configuration options
     $rootNode->ignoreExtraKeys(false);
     return $treeBuilder;
 }