diff --git a/SpacesAPI/File.php b/SpacesAPI/File.php
index 6917d3e..789a9f0 100644
--- a/SpacesAPI/File.php
+++ b/SpacesAPI/File.php
@@ -224,6 +224,19 @@ class File
return new self($this->space, $newFilename);
}
+ /**
+ * @param string $newFilename
+ *
+ * @return \SpacesAPI\File
+ */
+ public function move(string $newFilename): File
+ {
+ $newFile = $this->copy($newFilename, $this->isPublic());
+ $this->delete();
+
+ return $newFile;
+ }
+
/**
* Get the public URL
* This URL will not work if the file is private
diff --git a/docs/File.md b/docs/File.md
index f347f44..bdca5b1 100644
--- a/docs/File.md
+++ b/docs/File.md
@@ -30,6 +30,7 @@ Rather obtain an instance from `\SpacesAPI\Space::list()`, `\SpacesAPI\Spaces::f
|[isPublic](#fileispublic)|Is this file publicly accessible|
|[makePrivate](#filemakeprivate)|Make file non-publicly accessible|
|[makePublic](#filemakepublic)|Make file publicly accessible|
+|[move](#filemove)|Move and/or rename file|
@@ -288,4 +289,28 @@ Make file publicly accessible
`void`
+
+
+
+### File::move
+
+**Description**
+
+```php
+public move (string $newFilename)
+```
+
+Move or rename a file
+The `File` instance on which you call `move` will become invalid and calling methods on it will result in a `FileDoesntExistException`
+
+
+**Parameters**
+
+* `(string) $newFilename`
+
+**Return Values**
+
+`\SpacesAPI\File` : An instance for the new file
+
+
diff --git a/tests/FileTest.php b/tests/FileTest.php
index f5c7f2c..aa5174b 100644
--- a/tests/FileTest.php
+++ b/tests/FileTest.php
@@ -62,6 +62,17 @@ class FileTest extends TestCase
self::$space->file('lorem-ipsum-2.txt');
}
+ public function testCanMoveRenameFile()
+ {
+ $file = self::$file->copy('test.txt');
+ $file->move('renamed-file.txt');
+
+ $this->assertEquals("Lorem ipsum", self::$space->file('renamed-file.txt')->getContents());
+
+ $this->expectException(FileDoesntExistException::class);
+ self::$space->file('test.txt');
+ }
+
public function testCanGetURL()
{
$this->assertStringContainsString('lorem-ipsum.txt', self::$file->getURL());