Skip to content

Commit

Permalink
store loaded default image in IImagesStorage [closes #3]
Browse files Browse the repository at this point in the history
  • Loading branch information
davidkudera committed Jun 24, 2015
1 parent 80372f7 commit c8362c2
Show file tree
Hide file tree
Showing 7 changed files with 160 additions and 6 deletions.
3 changes: 2 additions & 1 deletion composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,8 @@
"nette/tester": "~1.4",
"nette/mail": "~2.2",
"nette/safe-stream": "~2.2",
"tracy/tracy": "~2.2"
"tracy/tracy": "~2.2",
"mockery/mockery": "~0.9.0"
},
"autoload": {
"psr-4": {
Expand Down
40 changes: 38 additions & 2 deletions src/CachedImagesStorage.php
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,8 @@ public function getFullName($namespace, $name)
$name = parent::getFullName($namespace, $name);

if ($name === null) {
$fullName = $this->cache->load($namespace. '/'. $name);
$fullName = $this->cache->load('name/'. $namespace. '/'. $name);

if ($fullName) {
parent::storeAlias($namespace, $name, $fullName);
return $fullName;
Expand All @@ -58,7 +59,7 @@ public function storeAlias($namespace, $name, $fullName)
{
parent::storeAlias($namespace, $name, $fullName);

$this->cache->save($namespace. '/'. $name, $fullName, array(
$this->cache->save('name/'. $namespace. '/'. $name, $fullName, array(
Cache::TAGS => array($namespace. '/'. $fullName),
));
}
Expand All @@ -77,4 +78,39 @@ public function clear($namespace, $fullName)
));
}


/**
* @param string $namespace
* @param string $name
* @return string
*/
public function getDefault($namespace, $name)
{
$default = parent::getDefault($namespace, $name);

if ($default === null) {
$default = $this->cache->load('default/'. $namespace. '/'. $name);

if ($default) {
parent::storeDefault($namespace, $name, $default);
return $default;
}
}

return null;
}


/**
* @param string $namespace
* @param string $name
* @param string $default
*/
public function storeDefault($namespace, $name, $default)
{
parent::storeDefault($namespace, $name, $default);

$this->cache->save('default/'. $namespace. '/'. $name, $default);
}

}
16 changes: 16 additions & 0 deletions src/IImagesStorage.php
Original file line number Diff line number Diff line change
Expand Up @@ -32,4 +32,20 @@ public function storeAlias($namespace, $name, $fullName);
*/
public function clear($namespace, $fullName);


/**
* @param string $namespace
* @param string $name
* @return string
*/
public function getDefault($namespace, $name);


/**
* @param string $namespace
* @param string $name
* @param string $default
*/
public function storeDefault($namespace, $name, $default);

}
13 changes: 10 additions & 3 deletions src/ImagesManager.php
Original file line number Diff line number Diff line change
Expand Up @@ -240,7 +240,7 @@ public function addNamespace($name, NamespaceManager $namespaceManager)
$namespaceManager->setResizeFlag($this->getResizeFlag());
}

if (!$namespaceManager->getDefault()) {
if (!$namespaceManager->hasDefault()) {
$namespaceManager->setDefault($this->getDefault());
}

Expand Down Expand Up @@ -367,11 +367,18 @@ public function load($namespace, $name, $size = null, $resizeFlag = null, $defau
}

$image = $this->createImage($namespace, $name);
$translatedName = $namespaceManager->getNameResolver()->translateName($name);

if (($image === null || !$image->isExists()) && $default !== false) {
if ($default === null) {
if (($default = $namespaceManager->getNameResolver()->getDefaultName($name)) === null) {
$default = $namespaceManager->getDefault();
if (($default = $this->storage->getDefault($namespace, $translatedName)) === null) {
$default = $namespaceManager->getDefault();

if ($default !== null) {
$this->storage->storeDefault($namespace, $translatedName, $default);
}
}
}
}

Expand All @@ -381,7 +388,7 @@ public function load($namespace, $name, $size = null, $resizeFlag = null, $defau
}

if ($image === null || !$image->isExists()) {
throw new ImageNotExistsException('Image "'. $namespaceManager->getNameResolver()->translateName($name). '" does not exists.');
throw new ImageNotExistsException('Image "'. $translatedName. '" does not exists.');
}

if ($resizeFlag !== null) {
Expand Down
37 changes: 37 additions & 0 deletions src/MemoryImagesStorage.php
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,9 @@ class MemoryImagesStorage implements IImagesStorage
/** @var array */
private $names = [];

/** @var array */
private $defaults = [];


/**
* @param string $namespace
Expand Down Expand Up @@ -71,4 +74,38 @@ public function clear($namespace, $fullName)
}
}


/**
* @param string $namespace
* @param string $name
* @return string
*/
public function getDefault($namespace, $name)
{
if (!isset($this->defaults[$namespace])) {
$this->defaults[$namespace] = [];
}

if (isset($this->defaults[$namespace][$name])) {
return $this->defaults[$namespace][$name];
}

return null;
}


/**
* @param string $namespace
* @param string $name
* @param string $default
*/
public function storeDefault($namespace, $name, $default)
{
if (!isset($this->defaults[$namespace])) {
$this->defaults[$namespace] = [];
}

$this->defaults[$namespace][$name] = $default;
}

}
9 changes: 9 additions & 0 deletions src/NamespaceManager.php
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,15 @@ public function registerImagesManager(ImagesManager $imagesManager)
}


/**
* @return bool
*/
public function hasDefault()
{
return $this->default !== null;
}


/**
* @return string
*/
Expand Down
48 changes: 48 additions & 0 deletions tests/CarrooiTests/ImagesManager/ImagesManager.phpt
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,8 @@ require_once __DIR__. '/../bootstrap.php';
use Carrooi\ImagesManager\DefaultNameResolver;
use Carrooi\ImagesManager\ImagesManager;
use Carrooi\ImagesManager\MemoryImagesStorage;
use Carrooi\ImagesManager\NamespaceManager;
use Mockery;
use Tester\Assert;
use Nette\Utils\Image as NetteImage;
use Carrooi\ImagesManager\INameResolver;
Expand All @@ -27,6 +29,12 @@ class ImagesManagerTest extends TestCase
{


public function tearDown()
{
Mockery::close();
}


public function testLoad()
{
$storage = new MemoryImagesStorage;
Expand All @@ -51,6 +59,46 @@ class ImagesManagerTest extends TestCase
}


public function testLoad_default_random()
{
$storage = new MemoryImagesStorage;

$resolver = Mockery::mock('Carrooi\ImagesManager\INameResolver')
->shouldReceive('translateName')->andReturn('pink.jpg')->getMock()
->shouldReceive('getDefaultName')->andReturnNull()->getMock();

$manager = new ImagesManager($resolver, __DIR__. '/../www/images', '/', $storage);

$counter = 0;
$defaults = [
'black.jpg',
'white.png',
];

$namespace = Mockery::mock('Carrooi\ImagesManager\NamespaceManager')->makePartial()
->shouldReceive('translateName')->andReturn('pink.jpg')->getMock()
->shouldReceive('getDefault')->once()->andReturnUsing(function() use ($defaults, &$counter) {
return $defaults[$counter++];
})->getMock();

$namespace->setNameResolver($resolver);

$manager->addNamespace('dots', $namespace);

Assert::null($storage->getDefault('dots', 'pink.jpg'));

$image = $manager->load('dots', 'pink.jpg');

Assert::same('black.jpg', $image->getName());
Assert::same('black.jpg', $storage->getDefault('dots', 'pink.jpg'));

$image = $manager->load('dots', 'pink.jpg');

Assert::same('black.jpg', $image->getName());
Assert::same('black.jpg', $storage->getDefault('dots', 'pink.jpg'));
}


public function testLoad_not_exists()
{
$manager = new ImagesManager(new DefaultNameResolver, __DIR__. '/../www/images', '/', new MemoryImagesStorage);
Expand Down

0 comments on commit c8362c2

Please sign in to comment.