public function register(Application $app)
 {
     $app['assetic.options'] = [];
     /**
      * Asset Factory configuration happens here
      */
     $app['assetic'] = $app->share(function () use($app) {
         $app['assetic.options'] = array_replace(array('debug' => false, 'formulae_cache_dir' => $app['paths.cache'] . '/assetic'), $app['assetic.options']);
         return $app['assetic.factory'];
     });
     $app['paths.cache_assets'] = $app['paths.cache'] . '/assets';
     /**
      * Asset manager
      *
      * @return \Assetic\AssetManager
      */
     $app['assetic.asset_manager'] = $app->share(function () {
         return new AssetManager();
     });
     $app['assetic.filters.uglifyjs2'] = $app->share(function () {
         return new UglifyJs2Filter();
     });
     $app['assetic.filters.uglifycss'] = $app->share(function () {
         return new UglifyCssFilter();
     });
     $app['assetic.filters.compass'] = $app->share(function () use($app) {
         $filter = new CompassFilter();
         $filter->setCacheLocation($app['paths.cache'] . '/compass');
         $filter->addLoadPath($app['paths.sentient'] . '/Resource/scss');
         return $filter;
     });
     /**
      * Filter manager
      *
      * @return \Assetic\FilterManager
      */
     $app['assetic.filter_manager'] = $app->share(function () use($app) {
         $manager = new FilterManager();
         $manager->set('uglifyjs', $app['assetic.filters.uglifyjs2']);
         $manager->set('uglifycss', $app['assetic.filters.uglifycss']);
         $manager->set('compass', $app['assetic.filters.compass']);
         return $manager;
     });
     /**
      * Asset writer, writes to the 'assetic.path_to_web' folder
      *
      * @return \Assetic\AssetWriter
      */
     $app['assetic.asset_writer'] = $app->share(function () use($app) {
         return new AssetWriter($app['paths.cache_assets']);
     });
     /**
      * Factory
      *
      * @return \Assetic\Factory\AssetFactory
      */
     $app['assetic.factory'] = $app->share(function () use($app) {
         $factory = new AssetFactory($app['paths.resources'], false);
         $factory->setAssetManager($app['assetic.asset_manager']);
         $factory->setFilterManager($app['assetic.filter_manager']);
         $factory->addPath('sentient', $app['paths.templates'] . '/sentient');
         $factory->addPath('sentient', $app['paths.sentient'] . '/Resource');
         foreach ($app->getPluginNames() as $name) {
             $factory->addPath($name, $app['paths.resources'] . '/plugin/' . $name);
             $factory->addPath($name, $app->getPlugin($name)->getPath() . '/Resource');
         }
         return $factory;
     });
     /**
      * Asset controllers
      */
     $app['assets.controllers'] = $app->share(function () use($app) {
         $controllers = $app['controllers_factory'];
         $controllers->match('/{filename}', function (Request $request) use($app) {
             return new AssetResponse($request->get('asset'), $app['assetic.asset_writer'], $app['paths.cache_assets']);
         })->assert('filename', '.+')->beforeMatch(function (array $attrs) use($app) {
             // @todo: A better way than looping through all loaded assets
             foreach ($app['assetic.asset_manager']->getNames() as $name) {
                 $asset = $app['assetic.asset_manager']->get($name);
                 if ($asset->getTargetPath() === $attrs['filename']) {
                     $attrs['asset'] = $asset;
                     return $attrs;
                 }
             }
             return false;
         })->bind('asset');
         return $controllers;
     });
     $app['assets.register_js'] = $app->protect(function ($name, $scripts) use($app) {
         $asset = $app['assetic.factory']->createAsset((array) $scripts, ['uglifyjs'], ['output' => 'js/' . $name . '.js']);
         $app['assetic.asset_manager']->set('js_' . str_replace('/', '_', $name), $asset);
         return $asset;
     });
     $app['assets.register_scss'] = $app->protect(function ($name, $stylesheets) use($app) {
         $asset = $app['assetic.factory']->createAsset((array) $stylesheets, ['compass', 'uglifycss'], ['output' => 'css/' . $name . '.css']);
         $app['assetic.asset_manager']->set('css_' . str_replace('/', '_', $name), $asset);
         return $asset;
     });
     $app['asset_helper'] = $app->share(function () use($app) {
         return new AssetHelper($app['assetic.asset_manager'], $app['url_generator']);
     });
     $app['twig'] = $app->share($app->extend('twig', function (\Twig_Environment $twig) use($app) {
         $twig->addExtension(new TwigAssetExtension($app['asset_helper']));
         return $twig;
     }));
     $app['filesystem_controllers_factory'] = $app->protect(function ($basePath, $routeName = null) use($app) {
         $controllers = $app['controllers_factory'];
         $route = $controllers->match('/{filename}', function (Request $request) {
             $file = new FilesystemFile($request->get('path'));
             return new FileResponse($file);
         })->beforeMatch(function (array $attrs) use($basePath) {
             if (false !== strpos($attrs['filename'], '..')) {
                 return false;
             }
             $attrs['path'] = $basePath . '/' . $attrs['filename'];
             if (!is_file($attrs['path'])) {
                 return false;
             }
             return $attrs;
         })->assert('filename', '.+');
         if ($routeName !== null) {
             $route->bind($routeName);
         }
         return $controllers;
     });
     $app->mount('/assets', $app['assets.controllers']);
 }