Updated to Drupal 8.5. Core Media not yet in use.
[yaffs-website] / vendor / consolidation / robo / src / Task / File / TmpFile.php
diff --git a/vendor/consolidation/robo/src/Task/File/TmpFile.php b/vendor/consolidation/robo/src/Task/File/TmpFile.php
new file mode 100644 (file)
index 0000000..4a18691
--- /dev/null
@@ -0,0 +1,72 @@
+<?php
+
+namespace Robo\Task\File;
+
+use Robo\Contract\CompletionInterface;
+
+/**
+ * Create a temporary file that is automatically cleaned up
+ * once the task collection is is part of completes. When created,
+ * it is given a random filename.
+ *
+ * This temporary file may be manipulated exacatly like taskWrite().
+ * It is deleted as soon as the collection it is a part of completes
+ * or rolls back.
+ *
+ * ``` php
+ * <?php
+ * $collection = $this->collectionBuilder();
+ * $tmpFilePath = $collection->taskTmpFile()
+ *      ->line('-----')
+ *      ->line(date('Y-m-d').' '.$title)
+ *      ->line('----')
+ *      ->getPath();
+ * $collection->run();
+ * ?>
+ * ```
+ */
+class TmpFile extends Write implements CompletionInterface
+{
+    /**
+     * @param string $filename
+     * @param string $extension
+     * @param string $baseDir
+     * @param bool $includeRandomPart
+     */
+    public function __construct($filename = 'tmp', $extension = '', $baseDir = '', $includeRandomPart = true)
+    {
+        if (empty($baseDir)) {
+            $baseDir = sys_get_temp_dir();
+        }
+        if ($includeRandomPart) {
+            $random = static::randomString();
+            $filename = "{$filename}_{$random}";
+        }
+        $filename .= $extension;
+        parent::__construct("{$baseDir}/{$filename}");
+    }
+
+    /**
+     * Generate a suitably random string to use as the suffix for our
+     * temporary file.
+     *
+     * @param int $length
+     *
+     * @return string
+     */
+    private static function randomString($length = 12)
+    {
+        return substr(str_shuffle('23456789abcdefghjkmnpqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ'), 0, $length);
+    }
+
+    /**
+     * Delete this file when our collection completes.
+     * If this temporary file is not part of a collection,
+     * then it will be deleted when the program terminates,
+     * presuming that it was created by taskTmpFile() or _tmpFile().
+     */
+    public function complete()
+    {
+        unlink($this->getPath());
+    }
+}