Преглед изворни кода

Merge remote branch 'kriswallsmith/assetic/config-fixes'

* kriswallsmith/assetic/config-fixes:
  [AsseticBundle] moved some parameter defaults to Configuration
  [AsseticBundle] fixed definition of filter configs
Fabien Potencier пре 14 година
родитељ
комит
0667e706fe

+ 0 - 2
src/Symfony/Bundle/AsseticBundle/DependencyInjection/AsseticExtension.php

@@ -48,11 +48,9 @@ class AsseticExtension extends Extension
         $container->setParameter('assetic.read_from', $config['read_from']);
         $container->setParameter('assetic.write_to', $config['write_to']);
 
-        $container->setParameter('assetic.closure.jar', $config['closure']);
         $container->setParameter('assetic.java.bin', $config['java']);
         $container->setParameter('assetic.node.bin', $config['node']);
         $container->setParameter('assetic.sass.bin', $config['sass']);
-        $container->setParameter('assetic.yui.jar', $config['yui']);
 
         // register filters
         foreach ($config['filters'] as $name => $filter) {

+ 2 - 2
src/Symfony/Bundle/AsseticBundle/DependencyInjection/Compiler/CheckYuiFilterPass.php

@@ -25,12 +25,12 @@ class CheckYuiFilterPass implements CompilerPassInterface
     {
         if ($container->hasDefinition('assetic.filter.yui_css') &&
             !$container->getParameterBag()->resolveValue($container->getParameter('assetic.filter.yui_css.jar'))) {
-            throw new \RuntimeException('The Assetic "yui_css" configuration requires a "jar" value.');
+            throw new \RuntimeException('The "assetic.filters.yui_css" configuration requires a "jar" value.');
         }
 
         if ($container->hasDefinition('assetic.filter.yui_js') &&
             !$container->getParameterBag()->resolveValue($container->getParameter('assetic.filter.yui_js.jar'))) {
-            throw new \RuntimeException('The Assetic "yui_js" configuration requires a "jar" value.');
+            throw new \RuntimeException('The "assetic.filters.yui_js" configuration requires a "jar" value.');
         }
     }
 }

+ 14 - 6
src/Symfony/Bundle/AsseticBundle/DependencyInjection/Configuration.php

@@ -42,12 +42,12 @@ class Configuration
                 ->booleanNode('use_controller')->defaultValue($debug)->end()
                 ->scalarNode('read_from')->defaultValue('%kernel.root_dir%/../web')->end()
                 ->scalarNode('write_to')->defaultValue('%assetic.read_from%')->end()
-                ->scalarNode('closure')->defaultNull()->end()
-                ->scalarNode('java')->defaultNull()->end()
-                ->scalarNode('node')->defaultNull()->end()
-                ->scalarNode('sass')->defaultNull()->end()
-                ->scalarNode('yui')->defaultNull()->end()
+                ->scalarNode('java')->defaultValue('/usr/bin/java')->end()
+                ->scalarNode('node')->defaultValue('/usr/bin/node')->end()
+                ->scalarNode('sass')->defaultValue('/usr/bin/sass')->end()
             ->end()
+
+            // bundles
             ->fixXmlConfig('bundle')
             ->children()
                 ->arrayNode('bundles')
@@ -65,13 +65,21 @@ class Configuration
                     ->end()
                 ->end()
             ->end()
+
+            // filters
             ->fixXmlConfig('filter')
             ->children()
                 ->arrayNode('filters')
                     ->addDefaultsIfNotSet()
                     ->requiresAtLeastOneElement()
                     ->useAttributeAsKey('name')
-                    ->prototype('array')->end()
+                    ->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()
         ;

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

@@ -14,13 +14,7 @@
         <parameter key="assetic.directory_resource.class">Symfony\Bundle\AsseticBundle\Factory\Resource\DirectoryResource</parameter>
         <parameter key="assetic.filter_manager.class">Symfony\Bundle\AsseticBundle\FilterManager</parameter>
 
-        <parameter key="assetic.closure.jar" />
-        <parameter key="assetic.java.bin">/usr/bin/java</parameter>
-        <parameter key="assetic.node.bin">/usr/bin/node</parameter>
         <parameter key="assetic.node.paths" type="collection"></parameter>
-        <parameter key="assetic.sass.bin">/usr/bin/sass</parameter>
-        <parameter key="assetic.yui.jar" />
-
         <parameter key="assetic.cache_dir">%kernel.cache_dir%/assetic</parameter>
     </parameters>
 
@@ -41,9 +35,11 @@
             <argument>%assetic.debug%</argument>
             <call method="setFilterManager"><argument type="service" id="assetic.filter_manager" /></call>
         </service>
+
         <service id="assetic.config_cache" class="%assetic.config_cache.class%" public="false">
             <argument>%assetic.cache_dir%/config</argument>
         </service>
+
         <service id="assetic.asset_manager_cache_warmer" class="%assetic.asset_manager_cache_warmer.class%" public="false">
             <tag name="kernel.cache_warmer" priority="10" />
             <argument type="service" id="assetic.asset_manager" />

+ 0 - 1
src/Symfony/Bundle/AsseticBundle/Resources/config/filters/closure.xml

@@ -8,7 +8,6 @@
         <parameter key="assetic.filter.closure.api.class">Assetic\Filter\GoogleClosure\CompilerApiFilter</parameter>
         <parameter key="assetic.filter.closure.jar.class">Assetic\Filter\GoogleClosure\CompilerJarFilter</parameter>
         <parameter key="assetic.filter.closure.java">%assetic.java.bin%</parameter>
-        <parameter key="assetic.filter.closure.jar">%assetic.closure.jar%</parameter>
     </parameters>
 
     <services>

src/Symfony/Bundle/AsseticBundle/Resources/config/filters/jepgtran.xml → src/Symfony/Bundle/AsseticBundle/Resources/config/filters/jpegtran.xml


+ 1 - 1
src/Symfony/Bundle/AsseticBundle/Resources/config/filters/yui_css.xml

@@ -7,7 +7,7 @@
     <parameters>
         <parameter key="assetic.filter.yui_css.class">Assetic\Filter\Yui\CssCompressorFilter</parameter>
         <parameter key="assetic.filter.yui_css.java">%assetic.java.bin%</parameter>
-        <parameter key="assetic.filter.yui_css.jar">%assetic.yui.jar%</parameter>
+        <parameter key="assetic.filter.yui_css.jar" />
     </parameters>
 
     <services>

+ 1 - 1
src/Symfony/Bundle/AsseticBundle/Resources/config/filters/yui_js.xml

@@ -7,7 +7,7 @@
     <parameters>
         <parameter key="assetic.filter.yui_js.class">Assetic\Filter\Yui\JsCompressorFilter</parameter>
         <parameter key="assetic.filter.yui_js.java">%assetic.java.bin%</parameter>
-        <parameter key="assetic.filter.yui_js.jar">%assetic.yui.jar%</parameter>
+        <parameter key="assetic.filter.yui_js.jar" />
     </parameters>
 
     <services>

+ 30 - 29
src/Symfony/Bundle/AsseticBundle/Tests/DependencyInjection/AsseticExtensionTest.php

@@ -18,7 +18,6 @@ use Symfony\Component\DependencyInjection\Container;
 use Symfony\Component\DependencyInjection\ContainerBuilder;
 use Symfony\Component\DependencyInjection\Dumper\PhpDumper;
 use Symfony\Component\DependencyInjection\Scope;
-use Symfony\Component\Finder\Finder;
 use Symfony\Component\HttpFoundation\Request;
 
 class AsseticExtensionTest extends \PHPUnit_Framework_TestCase
@@ -87,28 +86,33 @@ class AsseticExtensionTest extends \PHPUnit_Framework_TestCase
     /**
      * @dataProvider getFilterNames
      */
-    public function testFilterConfigs($filter)
+    public function testFilterConfigs($name, $config = array())
     {
-        $config = array('filters' => array($filter => array()));
-
         $extension = new AsseticExtension();
-        $extension->load(array($config), $this->container);
+        $extension->load(array(array('filters' => array($name => $config))), $this->container);
 
         $this->assertSaneContainer($this->getDumpedContainer());
     }
 
     public function getFilterNames()
     {
-        $data = array();
-
-        $finder = new Finder();
-        $finder->files()->name('*.xml')->in(__DIR__.'/../../Resources/config/filters');
-
-        foreach ($finder as $file) {
-            $data[] = array($file->getBasename('.xml'));
-        }
-
-        return $data;
+        return array(
+            array('closure', array('jar' => '/path/to/closure.jar')),
+            array('coffee'),
+            array('cssrewrite'),
+            array('jpegtran'),
+            array('jpegoptim'),
+            array('less'),
+            array('lessphp'),
+            array('optipng'),
+            array('pngout'),
+            array('sass'),
+            array('scss'),
+            array('sprockets'),
+            array('stylus'),
+            array('yui_css', array('jar' => '/path/to/yuicompressor.jar')),
+            array('yui_js', array('jar' => '/path/to/yuicompressor.jar')),
+        );
     }
 
     /**
@@ -145,19 +149,18 @@ class AsseticExtensionTest extends \PHPUnit_Framework_TestCase
     {
         $this->container->addCompilerPass(new CheckClosureFilterPass());
 
-        $config = array(
-            'closure' => $jar,
+        $extension = new AsseticExtension();
+        $extension->load(array(array(
             'filters' => array(
-                'closure' => array(),
+                'closure' => array('jar' => $jar),
             ),
-        );
-
-        $extension = new AsseticExtension();
-        $extension->load(array($config), $this->container);
+        )), $this->container);
 
-        $this->assertSaneContainer($this->getDumpedContainer());
+        $container = $this->getDumpedContainer();
+        $this->assertSaneContainer($container);
 
         $this->assertTrue($this->container->getDefinition($expected)->hasTag('assetic.filter'));
+        $this->assertNotEmpty($container->getParameter('assetic.filter.closure.java'));
     }
 
     public function getClosureJarAndExpected()
@@ -170,18 +173,16 @@ class AsseticExtensionTest extends \PHPUnit_Framework_TestCase
 
     public function testInvalidYuiConfig()
     {
-        $this->setExpectedException('RuntimeException');
+        $this->setExpectedException('RuntimeException', 'assetic.filters.yui_js');
 
         $this->container->addCompilerPass(new CheckYuiFilterPass());
 
-        $config = array(
+        $extension = new AsseticExtension();
+        $extension->load(array(array(
             'filters' => array(
                 'yui_js' => array(),
             ),
-        );
-
-        $extension = new AsseticExtension();
-        $extension->load(array($config), $this->container);
+        )), $this->container);
 
         $this->getDumpedContainer();
     }