Skip to content

Commit

Permalink
Merge pull request #89 from alchemy-fr/remove-pimple
Browse files Browse the repository at this point in the history
Remove Pimple dependency
  • Loading branch information
aztech-dev committed Dec 15, 2015
2 parents 91ecc68 + 93e1a79 commit f17a447
Show file tree
Hide file tree
Showing 5 changed files with 212 additions and 43 deletions.
1 change: 0 additions & 1 deletion composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,6 @@
"require": {
"php": ">=5.3.3",
"doctrine/collections": "~1.0",
"pimple/pimple": "~1.0",
"symfony/filesystem": "^2.0.5|^3.0",
"symfony/process": "^2.1|^3.0"
},
Expand Down
135 changes: 104 additions & 31 deletions src/Adapter/AdapterContainer.php
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,11 @@
use Symfony\Component\Filesystem\Filesystem;
use Symfony\Component\Process\ExecutableFinder;

class AdapterContainer extends \Pimple
class AdapterContainer implements \ArrayAccess
{

private $items = array();

/**
* Builds the adapter container
*
Expand All @@ -39,110 +42,180 @@ public static function load()
$container['zip.inflator'] = null;
$container['zip.deflator'] = null;

$container['resource-manager'] = $container->share(function ($container) {
$container['resource-manager'] = function ($container) {
return new ResourceManager(
$container['request-mapper'],
$container['resource-teleporter'],
$container['filesystem']
);
});
};

$container['executable-finder'] = $container->share(function ($container) {
$container['executable-finder'] = function ($container) {
return new ExecutableFinder();
});
};

$container['request-mapper'] = $container->share(function ($container) {
$container['request-mapper'] = function ($container) {
return new RequestMapper($container['target-locator']);
});
};

$container['target-locator'] = $container->share(function () {
$container['target-locator'] = function () {
return new TargetLocator();
});
};

$container['teleporter-container'] = $container->share(function ($container) {
$container['teleporter-container'] = function ($container) {
return TeleporterContainer::load();
});
};

$container['resource-teleporter'] = $container->share(function ($container) {
$container['resource-teleporter'] = function ($container) {
return new ResourceTeleporter($container['teleporter-container']);
});
};

$container['filesystem'] = $container->share(function () {
$container['filesystem'] = function () {
return new Filesystem();
});
};

$container['Alchemy\\Zippy\\Adapter\\ZipAdapter'] = $container->share(function ($container) {
$container['Alchemy\\Zippy\\Adapter\\ZipAdapter'] = function ($container) {
return ZipAdapter::newInstance(
$container['executable-finder'],
$container['resource-manager'],
$container['zip.inflator'],
$container['zip.deflator']
);
});
};

$container['gnu-tar.inflator'] = null;
$container['gnu-tar.deflator'] = null;

$container['Alchemy\\Zippy\\Adapter\\GNUTar\\TarGNUTarAdapter'] = $container->share(function ($container) {
$container['Alchemy\\Zippy\\Adapter\\GNUTar\\TarGNUTarAdapter'] = function ($container) {
return TarGNUTarAdapter::newInstance(
$container['executable-finder'],
$container['resource-manager'],
$container['gnu-tar.inflator'],
$container['gnu-tar.deflator']
);
});
};

$container['Alchemy\\Zippy\\Adapter\\GNUTar\\TarGzGNUTarAdapter'] = $container->share(function ($container) {
$container['Alchemy\\Zippy\\Adapter\\GNUTar\\TarGzGNUTarAdapter'] = function ($container) {
return TarGzGNUTarAdapter::newInstance(
$container['executable-finder'],
$container['resource-manager'],
$container['gnu-tar.inflator'],
$container['gnu-tar.deflator']
);
});
};

$container['Alchemy\\Zippy\\Adapter\\GNUTar\\TarBz2GNUTarAdapter'] = $container->share(function ($container) {
$container['Alchemy\\Zippy\\Adapter\\GNUTar\\TarBz2GNUTarAdapter'] = function ($container) {
return TarBz2GNUTarAdapter::newInstance(
$container['executable-finder'],
$container['resource-manager'],
$container['gnu-tar.inflator'],
$container['gnu-tar.deflator']
);
});
};

$container['bsd-tar.inflator'] = null;
$container['bsd-tar.deflator'] = null;

$container['Alchemy\\Zippy\\Adapter\\BSDTar\\TarBSDTarAdapter'] = $container->share(function ($container) {
$container['Alchemy\\Zippy\\Adapter\\BSDTar\\TarBSDTarAdapter'] = function ($container) {
return TarBSDTarAdapter::newInstance(
$container['executable-finder'],
$container['resource-manager'],
$container['bsd-tar.inflator'],
$container['bsd-tar.deflator']
);
});
};

$container['Alchemy\\Zippy\\Adapter\\BSDTar\\TarGzBSDTarAdapter'] = $container->share(function ($container) {
$container['Alchemy\\Zippy\\Adapter\\BSDTar\\TarGzBSDTarAdapter'] = function ($container) {
return TarGzBSDTarAdapter::newInstance(
$container['executable-finder'],
$container['resource-manager'],
$container['bsd-tar.inflator'],
$container['bsd-tar.deflator']
);
});
};

$container['Alchemy\\Zippy\\Adapter\\BSDTar\\TarBz2BSDTarAdapter'] = $container->share(function ($container) {
$container['Alchemy\\Zippy\\Adapter\\BSDTar\\TarBz2BSDTarAdapter'] = function ($container) {
return TarBz2BSDTarAdapter::newInstance(
$container['executable-finder'],
$container['resource-manager'],
$container['bsd-tar.inflator'],
$container['bsd-tar.deflator']);
});
};

$container['Alchemy\\Zippy\\Adapter\\ZipExtensionAdapter'] = $container->share(function () {
$container['Alchemy\\Zippy\\Adapter\\ZipExtensionAdapter'] = function () {
return ZipExtensionAdapter::newInstance();
});
};

return $container;
}

/**
* (PHP 5 &gt;= 5.0.0)<br/>
* Whether a offset exists
* @link http://php.net/manual/en/arrayaccess.offsetexists.php
* @param mixed $offset <p>
* An offset to check for.
* </p>
* @return boolean true on success or false on failure.
* </p>
* <p>
* The return value will be casted to boolean if non-boolean was returned.
*/
public function offsetExists($offset)
{
return isset($this->items[$offset]);
}

/**
* (PHP 5 &gt;= 5.0.0)<br/>
* Offset to retrieve
* @link http://php.net/manual/en/arrayaccess.offsetget.php
* @param mixed $offset <p>
* The offset to retrieve.
* </p>
* @return mixed Can return all value types.
*/
public function offsetGet($offset)
{
if (array_key_exists($offset, $this->items) && is_callable($this->items[$offset])) {
$this->items[$offset] = call_user_func($this->items[$offset], $this);
}

if (array_key_exists($offset, $this->items)) {
return $this->items[$offset];
}

throw new \InvalidArgumentException();
}

/**
* (PHP 5 &gt;= 5.0.0)<br/>
* Offset to set
* @link http://php.net/manual/en/arrayaccess.offsetset.php
* @param mixed $offset <p>
* The offset to assign the value to.
* </p>
* @param mixed $value <p>
* The value to set.
* </p>
* @return void
*/
public function offsetSet($offset, $value)
{
$this->items[$offset] = $value;
}

/**
* (PHP 5 &gt;= 5.0.0)<br/>
* Offset to unset
* @link http://php.net/manual/en/arrayaccess.offsetunset.php
* @param mixed $offset <p>
* The offset to unset.
* </p>
* @return void
*/
public function offsetUnset($offset)
{
unset($this->items[$offset]);
}
}
4 changes: 3 additions & 1 deletion src/FileStrategy/FileStrategyInterface.php
Original file line number Diff line number Diff line change
Expand Up @@ -11,12 +11,14 @@

namespace Alchemy\Zippy\FileStrategy;

use Alchemy\Zippy\Adapter\AdapterInterface;

interface FileStrategyInterface
{
/**
* Returns an array of adapters that match the strategy
*
* @return array
* @return AdapterInterface[]
*/
public function getAdapters();

Expand Down
108 changes: 98 additions & 10 deletions src/Resource/TeleporterContainer.php
Original file line number Diff line number Diff line change
Expand Up @@ -20,10 +20,20 @@
/**
* A container of TeleporterInterface
*/
class TeleporterContainer extends \Pimple
class TeleporterContainer implements \ArrayAccess, \Countable
{
/**
* Returns the appropriate TeleporterInterface given a Resource
* @var TeleporterInterface[]
*/
private $teleporters = array();

/**
* @var callable[]
*/
private $factories = array();

/**
* Returns the appropriate TeleporterInterface for a given Resource
*
* @param Resource $resource
* @return TeleporterInterface
Expand All @@ -39,7 +49,7 @@ public function fromResource(Resource $resource)

if (!isset($data['scheme']) || 'file' === $data['scheme']) {
$teleporter = 'local-teleporter';
} elseif (in_array($data['scheme'], array('http', 'https')) && isset($this['guzzle-teleporter'])) {
} elseif (in_array($data['scheme'], array('http', 'https')) && isset($this->factories['guzzle-teleporter'])) {
$teleporter = 'guzzle-teleporter';
} else {
$teleporter = 'stream-teleporter';
Expand All @@ -49,7 +59,17 @@ public function fromResource(Resource $resource)
throw new InvalidArgumentException('No teleporter found');
}

return $this[$teleporter];
return $this->getTeleporter($teleporter);
}

private function getTeleporter($typeName)
{
if (! isset($this->teleporters[$typeName])) {
$factory = $this->factories[$typeName];
$this->teleporters[$typeName] = $factory();
}

return $this->teleporters[$typeName];
}

/**
Expand All @@ -61,19 +81,87 @@ public static function load()
{
$container = new static();

$container['stream-teleporter'] = $container->share(function () {
$container->factories['stream-teleporter'] = function () {
return StreamTeleporter::create();
});
$container['local-teleporter'] = $container->share(function () {
};

$container->factories['local-teleporter'] = function () {
return LocalTeleporter::create();
});
};

if (class_exists('Guzzle\Http\Client')) {
$container['guzzle-teleporter'] = $container->share(function () {
$container->factories['guzzle-teleporter'] = function () {
return GuzzleTeleporter::create();
});
};
}

return $container;
}

/**
* (PHP 5 &gt;= 5.0.0)<br/>
* Whether a offset exists
* @link http://php.net/manual/en/arrayaccess.offsetexists.php
* @param mixed $offset <p>
* An offset to check for.
* </p>
* @return boolean true on success or false on failure.
* </p>
* <p>
* The return value will be casted to boolean if non-boolean was returned.
*/
public function offsetExists($offset)
{
return isset($this->teleporters[$offset]);
}

/**
* (PHP 5 &gt;= 5.0.0)<br/>
* Offset to retrieve
* @link http://php.net/manual/en/arrayaccess.offsetget.php
* @param mixed $offset <p>
* The offset to retrieve.
* </p>
* @return mixed Can return all value types.
*/
public function offsetGet($offset)
{
return $this->getTeleporter($offset);
}

/**
* (PHP 5 &gt;= 5.0.0)<br/>
* Offset to set
* @link http://php.net/manual/en/arrayaccess.offsetset.php
* @param mixed $offset <p>
* The offset to assign the value to.
* </p>
* @param mixed $value <p>
* The value to set.
* </p>
* @return void
*/
public function offsetSet($offset, $value)
{
throw new \BadMethodCallException();
}

/**
* (PHP 5 &gt;= 5.0.0)<br/>
* Offset to unset
* @link http://php.net/manual/en/arrayaccess.offsetunset.php
* @param mixed $offset <p>
* The offset to unset.
* </p>
* @return void
*/
public function offsetUnset($offset)
{
throw new \BadMethodCallException();
}

public function count()
{
return count($this->teleporters);
}
}
Loading

0 comments on commit f17a447

Please sign in to comment.