Add $storage->instanceOfStorage to handle instanceof for storage wrappers

This commit is contained in:
Robin Appelman 2014-05-29 13:45:50 +02:00
parent c0f02be50a
commit 8c5521fdfc
6 changed files with 47 additions and 2 deletions

View File

@ -7,6 +7,7 @@
*/
namespace OC\Files\Storage;
use OC\Files\Filesystem;
use OC\Files\Cache\Watcher;
@ -21,7 +22,6 @@ use OC\Files\Cache\Watcher;
* Some \OC\Files\Storage\Common methods call functions which are first defined
* in classes which extend it, e.g. $this->stat() .
*/
abstract class Common implements \OC\Files\Storage\Storage {
protected $cache;
protected $scanner;
@ -46,7 +46,7 @@ abstract class Common implements \OC\Files\Storage\Storage {
protected function remove($path) {
if ($this->is_dir($path)) {
return $this->rmdir($path);
} else if($this->is_file($path)) {
} else if ($this->is_file($path)) {
return $this->unlink($path);
} else {
return false;
@ -412,4 +412,14 @@ abstract class Common implements \OC\Files\Storage\Storage {
protected function removeCachedFile($path) {
unset($this->cachedFiles[$path]);
}
/**
* Check if the storage is an instance of $class or is a wrapper for a storage that is an instance of $class
*
* @param string $class
* @return bool
*/
public function instanceOfStorage($class) {
return is_a($this, $class);
}
}

View File

@ -440,4 +440,14 @@ class Wrapper implements \OC\Files\Storage\Storage {
public function isLocal() {
return $this->storage->isLocal();
}
/**
* Check if the storage is an instance of $class or is a wrapper for a storage that is an instance of $class
*
* @param string $class
* @return bool
*/
public function instanceOfStorage($class) {
return is_a($this, $class) or $this->storage->instanceOfStorage($class);
}
}

View File

@ -327,4 +327,12 @@ interface Storage {
* @return bool true if the files are stored locally, false otherwise
*/
public function isLocal();
/**
* Check if the storage is an instance of $class or is a wrapper for a storage that is an instance of $class
*
* @param string $class
* @return bool
*/
public function instanceOfStorage($class);
}

View File

@ -464,4 +464,10 @@ abstract class Storage extends \PHPUnit_Framework_TestCase {
$this->assertEquals('foo', $this->instance->file_get_contents('target/test1.txt'));
}
public function testInstanceOfStorage() {
$this->assertTrue($this->instance->instanceOfStorage('\OCP\Files\Storage'));
$this->assertTrue($this->instance->instanceOfStorage(get_class($this->instance)));
$this->assertFalse($this->instance->instanceOfStorage('\OC'));
}
}

View File

@ -155,4 +155,10 @@ class Quota extends \Test\Files\Storage\Storage {
$this->assertEquals(1024 - 50, $instance->free_space(''));
}
public function testInstanceOfStorageWrapper() {
$this->assertTrue($this->instance->instanceOfStorage('\OC\Files\Storage\Local'));
$this->assertTrue($this->instance->instanceOfStorage('\OC\Files\Storage\Wrapper\Wrapper'));
$this->assertTrue($this->instance->instanceOfStorage('\OC\Files\Storage\Wrapper\Quota'));
}
}

View File

@ -23,4 +23,9 @@ class Wrapper extends \Test\Files\Storage\Storage {
public function tearDown() {
\OC_Helper::rmdirr($this->tmpDir);
}
public function testInstanceOfStorageWrapper() {
$this->assertTrue($this->instance->instanceOfStorage('\OC\Files\Storage\Local'));
$this->assertTrue($this->instance->instanceOfStorage('\OC\Files\Storage\Wrapper\Wrapper'));
}
}