Skip to content

Commit

Permalink
Merge pull request #150 from tedivm/namespace_additions
Browse files Browse the repository at this point in the history
Namespace Additions
  • Loading branch information
tedivm committed May 8, 2014
2 parents 25511b8 + 5ca6c93 commit 9f487b4
Show file tree
Hide file tree
Showing 3 changed files with 96 additions and 42 deletions.
9 changes: 6 additions & 3 deletions src/Stash/Pool.php
Original file line number Diff line number Diff line change
Expand Up @@ -180,11 +180,14 @@ public function flush()
}

try {

$driver = $this->getDriver();
if (isset($this->namespace)) {
$results = $this->getDriver()->clear(array($this->namespace));
$normalizedNamespace = strtolower($this->namespace);
$results = $driver->clear(array('cache', $normalizedNamespace))
&& $driver->clear(array('sp', $normalizedNamespace));

} else {
$results = $this->getDriver()->clear();
$results = $driver->clear();
}

} catch (\Exception $e) {
Expand Down
88 changes: 88 additions & 0 deletions tests/Stash/Test/PoolNamespaceTest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
<?php

/*
* This file is part of the Stash package.
*
* (c) Robert Hafner <tedivm@tedivm.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/

namespace Stash\Test;

use Stash\Pool;
use Stash\Driver\Ephemeral;

/**
* @package Stash
* @author Robert Hafner <tedivm@tedivm.com>
*/
class PoolNamespaceTest extends PoolTest
{

protected function getTestPool($skipNametest = false)
{
$driver = new Ephemeral(array());
$pool = new Pool();
$pool->setDriver($driver);

if (!$skipNametest) {
$pool->setNamespace('TestSpace');
}

return $pool;
}

public function testFlushNamespacedCache()
{
$pool = $this->getTestPool(true);

// No Namespace
$item = $pool->getItem(array('base', 'one'));
$item->set($this->data);

// TestNamespace
$pool->setNamespace('TestNamespace');
$item = $pool->getItem(array('test', 'one'));
$item->set($this->data);

// TestNamespace2
$pool->setNamespace('TestNamespace2');
$item = $pool->getItem(array('test', 'one'));
$item->set($this->data);

// Flush TestNamespace
$pool->setNamespace('TestNamespace');
$this->assertTrue($pool->flush(), 'Flush succeeds with namespace selected.');

// Return to No Namespace
$pool->setNamespace();
$item = $pool->getItem(array('base', 'one'));
$this->assertFalse($item->isMiss(), 'Base item exists after other namespace was flushed.');
$this->assertEquals($this->data, $item->get(), 'Base item returns data after other namespace was flushed.');

// Flush All
$this->assertTrue($pool->flush(), 'Flush succeeds with no namespace.');

// Return to TestNamespace2
$pool->setNamespace('TestNamespace2');
$item = $pool->getItem(array('base', 'one'));
$this->assertTrue($item->isMiss(), 'Namespaced item disappears after complete flush.');
}

public function testNamespacing()
{
$pool = $this->getTestPool(true);

$this->assertAttributeEquals(null, 'namespace', $pool, 'Namespace starts empty.');
$this->assertTrue($pool->setNamespace('TestSpace'), 'setNamespace returns true.');
$this->assertAttributeEquals('TestSpace', 'namespace', $pool, 'setNamespace sets the namespace.');
$this->assertEquals('TestSpace', $pool->getNamespace(), 'getNamespace returns current namespace.');

$this->assertTrue($pool->setNamespace(), 'setNamespace returns true when setting null.');
$this->assertAttributeEquals(null, 'namespace', $pool, 'setNamespace() empties namespace.');
$this->assertFalse($pool->getNamespace(), 'getNamespace returns false when no namespace is set.');
}

}
41 changes: 2 additions & 39 deletions tests/Stash/Test/PoolTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -115,48 +115,11 @@ public function testFlushCache()

$stash = $pool->getItem('base', 'one');
$stash->set($this->data);
$this->assertTrue($pool->flush(), 'clear returns true');
$this->assertTrue($pool->flush(), 'flush returns true');

$stash = $pool->getItem('base', 'one');
$this->assertNull($stash->get(), 'clear removes item');
$this->assertTrue($stash->isMiss(), 'clear causes cache miss');
}

public function testFlushNamespacedCache()
{
$pool = $this->getTestPool();

// No Namespace
$item = $pool->getItem(array('base', 'one'));
$item->set($this->data);

// TestNamespace
$pool->setNamespace('TestNamespace');
$item = $pool->getItem(array('test', 'one'));
$item->set($this->data);

// TestNamespace2
$pool->setNamespace('TestNamespace2');
$item = $pool->getItem(array('test', 'one'));
$item->set($this->data);

// Flush TestNamespace
$pool->setNamespace('TestNamespace');
$this->assertTrue($pool->flush(), 'Flush succeeds with namespace selected.');

// Return to No Namespace
$pool->setNamespace();
$item = $pool->getItem(array('base', 'one'));
$this->assertFalse($item->isMiss(), 'Base item exists after other namespace was flushed.');
$this->assertEquals($this->data, $item->get(), 'Base item returns data after other namespace was flushed.');

// Flush All
$this->assertTrue($pool->flush(), 'Flush succeeds with no namespace.');

// Return to TestNamespace2
$pool->setNamespace('TestNamespace2');
$item = $pool->getItem(array('base', 'one'));
$this->assertTrue($item->isMiss(), 'Namespaced item disappears after complete flush.');
$this->assertTrue($stash->isMiss(), 'flush causes cache miss');
}

public function testPurgeCache()
Expand Down

0 comments on commit 9f487b4

Please sign in to comment.