Explorar o código

[AsseticBundle] Converted to use a Configuration class

Christophe Coevoet %!s(int64=14) %!d(string=hai) anos
pai
achega
d2684f3f73

+ 16 - 33
src/Symfony/Bundle/AsseticBundle/DependencyInjection/AsseticExtension.php

@@ -15,6 +15,7 @@ use Symfony\Component\DependencyInjection\Extension\Extension;
 use Symfony\Component\DependencyInjection\ContainerBuilder;
 use Symfony\Component\DependencyInjection\Loader\XmlFileLoader;
 use Symfony\Component\Config\FileLocator;
+use Symfony\Component\Config\Definition\Processor;
 
 /**
  * Semantic asset configuration.
@@ -62,34 +63,24 @@ class AsseticExtension extends Extension
         $loader->load('templating_twig.xml');
         // $loader->load('templating_php.xml'); // not ready yet
 
-        foreach (self::normalizeKeys($configs) as $config) {
-            if (isset($config['debug'])) {
-                $container->setParameter('assetic.debug', $config['debug']);
-            }
+        $configuration = new Configuration();
+        $processor = new Processor();
+        $config = $processor->process($configuration->getConfigTree($container->getParameter('kernel.debug')), $configs);
 
-            if (isset($config['use_controller'])) {
-                $container->setParameter('assetic.use_controller', $config['use_controller']);
-            }
+        $container->setParameter('assetic.debug', $config['debug']);
+        $container->setParameter('assetic.use_controller', $config['use_controller']);
+        $container->setParameter('assetic.document_root', $config['document_root']);
+        $container->setParameter('assetic.default_javascripts_output', $config['default_javascripts_output']);
+        $container->setParameter('assetic.default_stylesheets_output', $config['default_stylesheets_output']);
 
-            if (isset($config['document_root'])) {
-                $container->setParameter('assetic.document_root', $config['document_root']);
-            }
-
-            if (isset($config['closure'])) {
-                $container->setParameter('assetic.google_closure_compiler_jar', $config['closure']);
-            }
-
-            if (isset($config['yui'])) {
-                $container->setParameter('assetic.yui_jar', $config['yui']);
-            }
-
-            if (isset($config['default_javascripts_output'])) {
-                $container->setParameter('assetic.default_javascripts_output', $config['default_javascripts_output']);
-            }
+        if (isset($config['closure'])) {
+            $container->setParameter('assetic.google_closure_compiler_jar', $config['closure']);
+            $loader->load('google_closure_compiler.xml');
+        }
 
-            if (isset($config['default_stylesheets_output'])) {
-                $container->setParameter('assetic.default_stylesheets_output', $config['default_stylesheets_output']);
-            }
+        if (isset($config['yui'])) {
+            $container->setParameter('assetic.yui_jar', $config['yui']);
+            $loader->load('yui_compressor.xml');
         }
 
         if ($container->getParameterBag()->resolveValue($container->getParameterBag()->get('assetic.use_controller'))) {
@@ -100,14 +91,6 @@ class AsseticExtension extends Extension
             $container->setParameter('assetic.twig_extension.class', '%assetic.twig_extension.static.class%');
         }
 
-        if ($container->hasParameter('assetic.google_closure_compiler_jar')) {
-            $loader->load('google_closure_compiler.xml');
-        }
-
-        if ($container->hasParameter('assetic.yui_jar')) {
-            $loader->load('yui_compressor.xml');
-        }
-
         if ($container->hasParameter('assetic.less.compress')) {
             $container->getDefinition('assetic.filter.less')->addMethodCall('setCompress', array('%assetic.less.compress%'));
         }

+ 48 - 0
src/Symfony/Bundle/AsseticBundle/DependencyInjection/Configuration.php

@@ -0,0 +1,48 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien.potencier@symfony-project.com>
+ *
+ * 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\Config\Definition\Builder\NodeBuilder;
+use Symfony\Component\Config\Definition\Builder\TreeBuilder;
+
+/**
+ * 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 <stof@notk.org>
+ */
+class Configuration
+{
+    /**
+     * Generates the configuration tree.
+     *
+     * @return \Symfony\Component\Config\Definition\NodeInterface
+     */
+    public function getConfigTree($kernelDebug)
+    {
+        $treeBuilder = new TreeBuilder();
+        $rootNode = $treeBuilder->root('assetic', 'array');
+
+        $rootNode
+            ->booleanNode('debug')->defaultValue($kernelDebug)->end()
+            ->booleanNode('use_controller')->defaultValue($kernelDebug)->end()
+            ->scalarNode('document_root')->defaultValue('%kernel.root_dir%/../web')->end()
+            ->scalarNode('closure')->end()
+            ->scalarNode('yui')->end()
+            ->scalarNode('default_javascripts_output')->defaultValue('js/*.js')->end()
+            ->scalarNode('default_stylesheets_output')->defaultValue('css/*.css')->end();
+
+        return $treeBuilder->buildTree();
+    }
+}

+ 0 - 6
src/Symfony/Bundle/AsseticBundle/Resources/config/assetic.xml

@@ -18,12 +18,6 @@
         <parameter key="assetic.filter.scss.class">Assetic\Filter\Sass\ScssFilter</parameter>
         <parameter key="assetic.filter.sprockets.class">Assetic\Filter\SprocketsFilter</parameter>
 
-        <parameter key="assetic.debug">%kernel.debug%</parameter>
-        <parameter key="assetic.use_controller">%kernel.debug%</parameter>
-        <parameter key="assetic.document_root">%kernel.root_dir%/../web</parameter>
-        <parameter key="assetic.default_javascripts_output">js/*.js</parameter>
-        <parameter key="assetic.default_stylesheets_output">css/*.css</parameter>
-
         <parameter key="assetic.java_bin">/usr/bin/java</parameter>
         <parameter key="assetic.sass_bin">/usr/bin/sass</parameter>
         <parameter key="assetic.node_bin">/usr/bin/node</parameter>

+ 1 - 2
src/Symfony/Bundle/AsseticBundle/Resources/config/yui_compressor.xml

@@ -7,7 +7,6 @@
     <parameters>
         <parameter key="assetic.filter.yui_css.class">Assetic\Filter\Yui\CssCompressorFilter</parameter>
         <parameter key="assetic.filter.yui_js.class">Assetic\Filter\Yui\JsCompressorFilter</parameter>
-        <parameter key="assetic.yui_java_bin">%assetic.java_bin%</parameter>
     </parameters>
 
     <services>
@@ -19,7 +18,7 @@
         <service id="assetic.filter.yui_js" class="%assetic.filter.yui_js.class%" public="false">
             <tag name="assetic.filter" alias="yui_js" />
             <argument>%assetic.yui_jar%</argument>
-            <argument>%assetic.yui_java_bin%</argument>
+            <argument>%assetic.java_bin%</argument>
         </service>
     </services>
 </container>