diff --git a/src/Storm/FileSystem/Disk.php b/src/Storm/FileSystem/Disk.php index c9248e3a269850446c224c7176a3fc06a801829e..5a66a28e1212de2663bfb84aa718d2a152adac55 100644 --- a/src/Storm/FileSystem/Disk.php +++ b/src/Storm/FileSystem/Disk.php @@ -30,6 +30,11 @@ class Storm_FileSystem_Disk extends Storm_FileSystem_Abstract { } + public function rmdir(string $path) :bool { + return rmdir($path); + } + + public function fileExists($path) { return file_exists($path); } @@ -129,4 +134,11 @@ class Storm_FileSystem_Disk extends Storm_FileSystem_Abstract { asort($files); return $files; } + + + public function deleteFilesAt(string $path) : self { + foreach ($this->fileNamesAt($path) as $filename) + $this->delete($path. '/' .$filename); + return $this; + } } diff --git a/src/Storm/FileSystem/Volatile.php b/src/Storm/FileSystem/Volatile.php index c2efb0e8b01b8a9ebcbfccf7c36b8fb4c6ef4b43..da128b2a62ca656a38104aa553e498bc3ce7dbb8 100644 --- a/src/Storm/FileSystem/Volatile.php +++ b/src/Storm/FileSystem/Volatile.php @@ -97,7 +97,6 @@ class Storm_FileSystem_Volatile extends Storm_FileSystem_Abstract { public function rename(string $from, string $to) : bool { if (!$this->fileExists($from)) return false; - $this->filePutContents($to, $this->fileGetContents($from)) ->rm($from); @@ -126,7 +125,13 @@ class Storm_FileSystem_Volatile extends Storm_FileSystem_Abstract { } - public function rm($path) { + public function rm($path) : self { + $this->asPath($path)->rm(); + return $this; + } + + + public function rmdir(string $path) : self { $this->asPath($path)->rm(); return $this; } @@ -171,6 +176,11 @@ class Storm_FileSystem_Volatile extends Storm_FileSystem_Abstract { } + public function isDirectory(string $path) : bool { + return $this->entryAt($path)->isDirectory(); + } + + public function directoryNamesAt($path) { $collection = $this->entryAt($path)->select( function ($entry) { @@ -189,6 +199,13 @@ class Storm_FileSystem_Volatile extends Storm_FileSystem_Abstract { array_walk($collection, function (&$entry) {$entry = $entry->getName();}); return $collection; } + + + public function deleteFilesAt(string $path) :self { + foreach ($this->fileNamesAt($path) as $filename) + $this->delete($path. '/' .$filename); + return $this; + } } diff --git a/tests/Storm/FileSystem/DiskTest.php b/tests/Storm/FileSystem/DiskTest.php index 091720bd0158dabf369f5b3c314ee1d14694373b..677344fec7ec6b70ec12f07ae378cc7217b569ed 100644 --- a/tests/Storm/FileSystem/DiskTest.php +++ b/tests/Storm/FileSystem/DiskTest.php @@ -42,10 +42,14 @@ class Storm_FileSystem_DiskBasicTest extends Storm_FileSystem_DiskTestCase { } public function tearDown() { - chmod($this->_directory.'/testfile',0700); - unlink($this->_directory.'/testfile'); - chmod($this->_directory.'/'.$this->_subdirectory,0700); - rmdir($this->_directory.'/'.$this->_subdirectory); + if (file_exists($this->_directory. '/testfile')){ + chmod($this->_directory . '/testfile', 0700); + unlink($this->_directory . '/testfile'); + } + if (file_exists($this->_directory. '/'. $this->_subdirectory)){ + chmod($this->_directory . '/' . $this->_subdirectory, 0700); + rmdir($this->_directory . '/' . $this->_subdirectory); + } rmdir($this->_directory); parent::tearDown(); } @@ -114,4 +118,20 @@ class Storm_FileSystem_DiskBasicTest extends Storm_FileSystem_DiskTestCase { $this->assertEquals('buy some butter and some coffee', $this->_fs->fileGetContents($this->_directory . '/testfile')); } + + + /** @test */ + public function deleteFilesAtShouldDeleteTestFile() { + $this->_fs->filePutContents($this->_directory . '/testfile2', + 'buy some butter'); + $this->_fs->deleteFilesAt($this->_directory); + $this->assertEmpty($this->_fs->fileNamesAt($this->_directory)); + } + + + /** @test */ + public function rmdirShouldDeleteSubDirectory() { + $this->_fs->rmdir($this->_directory .'/'. $this->_subdirectory); + $this->assertFalse($this->_fs->fileExists($this->_directory .'/'. $this->_subdirectory)); + } }