A collection of assets.
@author Kris Wallsmith <kris.wallsmith@gmail.com>
Expanded class hierarchy of AssetCollection
class AssetCollection implements \IteratorAggregate, AssetCollectionInterface {
private $assets;
private $filters;
private $sourceRoot;
private $targetPath;
private $content;
private $clones;
private $vars;
private $values;
/**
* Constructor.
*
* @param array $assets Assets for the current collection
* @param array $filters Filters for the current collection
* @param string $sourceRoot The root directory
* @param array $vars
*/
public function __construct($assets = array(), $filters = array(), $sourceRoot = null, array $vars = array()) {
$this->assets = array();
foreach ($assets as $asset) {
$this
->add($asset);
}
$this->filters = new FilterCollection($filters);
$this->sourceRoot = $sourceRoot;
$this->clones = new \SplObjectStorage();
$this->vars = $vars;
$this->values = array();
}
public function __clone() {
$this->filters = clone $this->filters;
$this->clones = new \SplObjectStorage();
}
public function all() {
return $this->assets;
}
public function add(AssetInterface $asset) {
$this->assets[] = $asset;
}
public function removeLeaf(AssetInterface $needle, $graceful = false) {
foreach ($this->assets as $i => $asset) {
$clone = isset($this->clones[$asset]) ? $this->clones[$asset] : null;
if (in_array($needle, array(
$asset,
$clone,
), true)) {
unset($this->clones[$asset], $this->assets[$i]);
return true;
}
if ($asset instanceof AssetCollectionInterface && $asset
->removeLeaf($needle, true)) {
return true;
}
}
if ($graceful) {
return false;
}
throw new \InvalidArgumentException('Leaf not found.');
}
public function replaceLeaf(AssetInterface $needle, AssetInterface $replacement, $graceful = false) {
foreach ($this->assets as $i => $asset) {
$clone = isset($this->clones[$asset]) ? $this->clones[$asset] : null;
if (in_array($needle, array(
$asset,
$clone,
), true)) {
unset($this->clones[$asset]);
$this->assets[$i] = $replacement;
return true;
}
if ($asset instanceof AssetCollectionInterface && $asset
->replaceLeaf($needle, $replacement, true)) {
return true;
}
}
if ($graceful) {
return false;
}
throw new \InvalidArgumentException('Leaf not found.');
}
public function ensureFilter(FilterInterface $filter) {
$this->filters
->ensure($filter);
}
public function getFilters() {
return $this->filters
->all();
}
public function clearFilters() {
$this->filters
->clear();
}
public function load(FilterInterface $additionalFilter = null) {
// loop through leaves and load each asset
$parts = array();
foreach ($this as $asset) {
$asset
->load($additionalFilter);
$parts[] = $asset
->getContent();
}
$this->content = implode("\n", $parts);
}
public function dump(FilterInterface $additionalFilter = null) {
// loop through leaves and dump each asset
$parts = array();
foreach ($this as $asset) {
$parts[] = $asset
->dump($additionalFilter);
}
return implode("\n", $parts);
}
public function getContent() {
return $this->content;
}
public function setContent($content) {
$this->content = $content;
}
public function getSourceRoot() {
return $this->sourceRoot;
}
public function getSourcePath() {
}
public function getTargetPath() {
return $this->targetPath;
}
public function setTargetPath($targetPath) {
$this->targetPath = $targetPath;
}
/**
* Returns the highest last-modified value of all assets in the current collection.
*
* @return integer|null A UNIX timestamp
*/
public function getLastModified() {
if (!count($this->assets)) {
return;
}
$mtime = 0;
foreach ($this as $asset) {
$assetMtime = $asset
->getLastModified();
if ($assetMtime > $mtime) {
$mtime = $assetMtime;
}
}
return $mtime;
}
/**
* Returns an iterator for looping recursively over unique leaves.
*/
public function getIterator() {
return new \RecursiveIteratorIterator(new AssetCollectionFilterIterator(new AssetCollectionIterator($this, $this->clones)));
}
public function getVars() {
return $this->vars;
}
public function setValues(array $values) {
$this->values = $values;
foreach ($this as $asset) {
$asset
->setValues(array_intersect_key($values, array_flip($asset
->getVars())));
}
}
public function getValues() {
return $this->values;
}
}
Name | Modifiers | Type | Description | Overrides |
---|---|---|---|---|
AssetCollection:: |
private | property | ||
AssetCollection:: |
private | property | ||
AssetCollection:: |
private | property | ||
AssetCollection:: |
private | property | ||
AssetCollection:: |
private | property | ||
AssetCollection:: |
private | property | ||
AssetCollection:: |
private | property | ||
AssetCollection:: |
private | property | ||
AssetCollection:: |
public | function |
Adds an asset to the current collection. Overrides AssetCollectionInterface:: |
|
AssetCollection:: |
public | function |
Returns all child assets. Overrides AssetCollectionInterface:: |
1 |
AssetCollection:: |
public | function |
Clears all filters from the current asset. Overrides AssetInterface:: |
|
AssetCollection:: |
public | function |
Applies dump filters and returns the asset as a string. Overrides AssetInterface:: |
1 |
AssetCollection:: |
public | function |
Ensures the current asset includes the supplied filter. Overrides AssetInterface:: |
|
AssetCollection:: |
public | function |
Returns the loaded content of the current asset. Overrides AssetInterface:: |
|
AssetCollection:: |
public | function |
Returns an array of filters currently applied. Overrides AssetInterface:: |
|
AssetCollection:: |
public | function | Returns an iterator for looping recursively over unique leaves. | 1 |
AssetCollection:: |
public | function |
Returns the highest last-modified value of all assets in the current collection. Overrides AssetInterface:: |
1 |
AssetCollection:: |
public | function |
Returns the relative path for the source asset. Overrides AssetInterface:: |
|
AssetCollection:: |
public | function |
Returns an absolute path or URL to the source asset's root directory. Overrides AssetInterface:: |
|
AssetCollection:: |
public | function |
Returns the URL for the current asset. Overrides AssetInterface:: |
|
AssetCollection:: |
public | function |
Returns the current values for this asset. Overrides AssetInterface:: |
|
AssetCollection:: |
public | function |
Returns an array of variable names for this asset. Overrides AssetInterface:: |
|
AssetCollection:: |
public | function |
Loads the asset into memory and applies load filters. Overrides AssetInterface:: |
1 |
AssetCollection:: |
public | function |
Removes a leaf. Overrides AssetCollectionInterface:: |
|
AssetCollection:: |
public | function |
Replaces an existing leaf with a new one. Overrides AssetCollectionInterface:: |
|
AssetCollection:: |
public | function |
Sets the content of the current asset. Overrides AssetInterface:: |
|
AssetCollection:: |
public | function |
Sets the URL for the current asset. Overrides AssetInterface:: |
|
AssetCollection:: |
public | function |
Sets the values for the asset's variables. Overrides AssetInterface:: |
1 |
AssetCollection:: |
public | function | ||
AssetCollection:: |
public | function | Constructor. | 1 |