/** * Create a single build target * * @param string $name The name of the target to build * @return MiniAsset\AssetTarget */ public function target($name) { $ext = $this->config->getExt($name); $paths = $this->config->paths($ext, $name); $themed = $this->config->isThemed($name); $filters = $this->config->targetFilters($name); $target = $this->config->cachePath($ext) . $name; $files = []; $scanner = $this->scanner($paths); foreach ($this->config->files($name) as $file) { if (preg_match('#^https?://#', $file)) { $files[] = new Remote($file); } else { if (preg_match('/(.*\\/)(\\*.*?)$/U', $file, $matches)) { $path = $scanner->find($matches[1]); if ($path === false) { throw new RuntimeException("Could not locate folder {$file} for {$name} in any configured path."); } $glob = new Glob($path, $matches[2]); $files = array_merge($files, $glob->files()); } elseif (preg_match(static::CALLBACK_PATTERN, $file, $matches)) { $callback = new Callback($matches[1], $matches[2], $scanner); $files = array_merge($files, $callback->files()); } else { $path = $scanner->find($file); if ($path === false) { throw new RuntimeException("Could not locate {$file} for {$name} in any configured path."); } $files[] = new Local($path); } } } return new AssetTarget($target, $files, $filters, $paths, $themed); }
public function testExtendedConfig() { $config = new AssetConfig(); $config->load($this->extendConfig); $expected = ['classes/base_class.js', 'classes/template.js', 'library_file.js']; $this->assertEquals($expected, $config->files('extended.js')); $expected = ['classes/base_class.js', 'classes/template.js', 'library_file.js', 'local_script.js']; $this->assertEquals($expected, $config->files('more.js')); $expected = ['classes/base_class.js', 'classes/template.js', 'library_file.js', 'lots_of_comments.js']; $this->assertEquals($expected, $config->files('second.js')); $expected = ['Sprockets', 'JsMinFilter']; $this->assertEquals($expected, $config->targetFilters('extended.js')); $this->assertEquals($expected, $config->targetFilters('more.js')); $this->assertTrue($config->isThemed('theme.js')); }