Version 1
[yaffs-website] / vendor / mikey179 / vfsStream / src / main / php / org / bovigo / vfs / visitor / vfsStreamPrintVisitor.php
diff --git a/vendor/mikey179/vfsStream/src/main/php/org/bovigo/vfs/visitor/vfsStreamPrintVisitor.php b/vendor/mikey179/vfsStream/src/main/php/org/bovigo/vfs/visitor/vfsStreamPrintVisitor.php
new file mode 100644 (file)
index 0000000..15b0bc0
--- /dev/null
@@ -0,0 +1,107 @@
+<?php
+/**
+ * This file is part of vfsStream.
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ *
+ * @package  org\bovigo\vfs
+ */
+namespace org\bovigo\vfs\visitor;
+use org\bovigo\vfs\vfsStreamContent;
+use org\bovigo\vfs\vfsStreamDirectory;
+use org\bovigo\vfs\vfsStreamFile;
+use org\bovigo\vfs\vfsStreamBlock;
+
+/**
+ * Visitor which traverses a content structure recursively to print it to an output stream.
+ *
+ * @since  0.10.0
+ * @see    https://github.com/mikey179/vfsStream/issues/10
+ */
+class vfsStreamPrintVisitor extends vfsStreamAbstractVisitor
+{
+    /**
+     * target to write output to
+     *
+     * @type  resource
+     */
+    protected $out;
+    /**
+     * current depth in directory tree
+     *
+     * @type  int
+     */
+    protected $depth;
+
+    /**
+     * constructor
+     *
+     * If no file pointer given it will fall back to STDOUT.
+     *
+     * @param   resource  $out  optional
+     * @throws  \InvalidArgumentException
+     * @api
+     */
+    public function __construct($out = STDOUT)
+    {
+        if (is_resource($out) === false || get_resource_type($out) !== 'stream') {
+            throw new \InvalidArgumentException('Given filepointer is not a resource of type stream');
+        }
+
+        $this->out = $out;
+    }
+
+    /**
+     * visit a file and process it
+     *
+     * @param   vfsStreamFile  $file
+     * @return  vfsStreamPrintVisitor
+     */
+    public function visitFile(vfsStreamFile $file)
+    {
+        $this->printContent($file->getName());
+        return $this;
+    }
+
+    /**
+     * visit a block device and process it
+     *
+     * @param   vfsStreamBlock  $block
+     * @return  vfsStreamPrintVisitor
+     */
+    public function visitBlockDevice(vfsStreamBlock $block)
+    {
+        $name = '[' . $block->getName() . ']';
+        $this->printContent($name);
+        return $this;
+    }
+
+    /**
+     * visit a directory and process it
+     *
+     * @param   vfsStreamDirectory  $dir
+     * @return  vfsStreamPrintVisitor
+     */
+    public function visitDirectory(vfsStreamDirectory $dir)
+    {
+        $this->printContent($dir->getName());
+        $this->depth++;
+        foreach ($dir as $child) {
+            $this->visit($child);
+        }
+
+        $this->depth--;
+        return $this;
+    }
+
+    /**
+     * helper method to print the content
+     *
+     * @param  string   $name
+     */
+    protected function printContent($name)
+    {
+        fwrite($this->out, str_repeat('  ', $this->depth) . '- ' . $name . "\n");
+    }
+}