diff -r 000000000000 -r 7f95f8617b0b vendor/bundles/Symfony/Bundle/AsseticBundle/DependencyInjection/MainConfiguration.php --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/bundles/Symfony/Bundle/AsseticBundle/DependencyInjection/MainConfiguration.php Sat Sep 24 15:40:41 2011 +0200 @@ -0,0 +1,174 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Bundle\AsseticBundle\DependencyInjection; + +use Symfony\Component\Process\ExecutableFinder; +use Symfony\Component\Config\Definition\Builder\TreeBuilder; +use Symfony\Component\Config\Definition\ConfigurationInterface; + +/** + * This class contains the configuration information for the bundle + * + * This information is solely responsible for how the different configuration + * sections are normalized, and merged. + * + * @author Christophe Coevoet + * @author Kris Wallsmith + */ +class MainConfiguration implements ConfigurationInterface +{ + private $bundles; + + /** + * Constructor + * + * @param array $bundles An array of bundle names + */ + public function __construct(array $bundles) + { + $this->bundles = $bundles; + } + + /** + * Generates the configuration tree builder. + * + * @return \Symfony\Component\Config\Definition\Builder\TreeBuilder The tree builder + */ + public function getConfigTreeBuilder() + { + $builder = new TreeBuilder(); + $finder = new ExecutableFinder(); + + $builder->root('assetic') + ->children() + ->booleanNode('debug')->defaultValue('%kernel.debug%')->end() + ->booleanNode('use_controller')->defaultValue('%kernel.debug%')->end() + ->scalarNode('read_from')->defaultValue('%kernel.root_dir%/../web')->end() + ->scalarNode('write_to')->defaultValue('%assetic.read_from%')->end() + ->scalarNode('java')->defaultValue(function() use($finder) { return $finder->find('java', '/usr/bin/java'); })->end() + ->scalarNode('node')->defaultValue(function() use($finder) { return $finder->find('node', '/usr/bin/node'); })->end() + ->scalarNode('sass')->defaultValue(function() use($finder) { return $finder->find('sass', '/usr/bin/sass'); })->end() + ->end() + + // bundles + ->fixXmlConfig('bundle') + ->children() + ->arrayNode('bundles') + ->defaultValue($this->bundles) + ->prototype('scalar') + ->validate() + ->ifNotInArray($this->bundles) + ->thenInvalid('%s is not a valid bundle.') + ->end() + ->end() + ->end() + ->end() + + // assets + ->fixXmlConfig('asset') + ->children() + ->arrayNode('assets') + ->addDefaultsIfNotSet() + ->requiresAtLeastOneElement() + ->useAttributeAsKey('name') + ->prototype('array') + ->beforeNormalization() + // a scalar is a simple formula of one input file + ->ifTrue(function($v) { return !is_array($v); }) + ->then(function($v) { return array('inputs' => array($v)); }) + ->end() + ->beforeNormalization() + ->always() + ->then(function($v) + { + // cast scalars as array + foreach (array('input', 'inputs', 'filter', 'filters') as $key) { + if (isset($v[$key]) && !is_array($v[$key])) { + $v[$key] = array($v[$key]); + } + } + + // organize arbitrary options + foreach ($v as $key => $value) { + if (!in_array($key, array('input', 'inputs', 'filter', 'filters', 'option', 'options'))) { + $v['options'][$key] = $value; + unset($v[$key]); + } + } + + return $v; + }) + ->end() + + // the formula + ->fixXmlConfig('input') + ->fixXmlConfig('filter') + ->children() + ->arrayNode('inputs') + ->prototype('scalar')->end() + ->end() + ->arrayNode('filters') + ->prototype('scalar')->end() + ->end() + ->arrayNode('options') + ->useAttributeAsKey('name') + ->prototype('variable')->end() + ->end() + ->end() + ->end() + ->end() + ->end() + + // filters + ->fixXmlConfig('filter') + ->children() + ->arrayNode('filters') + ->addDefaultsIfNotSet() + ->requiresAtLeastOneElement() + ->useAttributeAsKey('name') + ->prototype('variable') + ->treatNullLike(array()) + ->validate() + ->ifTrue(function($v) { return !is_array($v); }) + ->thenInvalid('The assetic.filters config %s must be either null or an array.') + ->end() + ->end() + ->end() + ->end() + + // twig + ->children() + ->arrayNode('twig') + ->addDefaultsIfNotSet() + ->defaultValue(array()) + ->fixXmlConfig('function') + ->children() + ->arrayNode('functions') + ->addDefaultsIfNotSet() + ->defaultValue(array()) + ->useAttributeAsKey('name') + ->prototype('variable') + ->treatNullLike(array()) + ->validate() + ->ifTrue(function($v) { return !is_array($v); }) + ->thenInvalid('The assetic.twig.functions config %s must be either null or an array.') + ->end() + ->end() + ->end() + ->end() + ->end() + ->end() + ; + + return $builder; + } +}