Code Coverage
 
Classes and Traits
Functions and Methods
Lines
Total
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
11 / 11
CRAP
100.00% covered (success)
100.00%
24 / 24
FileSystem
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
11 / 11
11
100.00% covered (success)
100.00%
24 / 24
 __construct()
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
6 / 6
 scheme()
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
1 / 1
 registerContextOptions(Container $container)
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
6 / 6
 __destruct()
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
2 / 2
 container()
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
1 / 1
 root()
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
1 / 1
 path($path)
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
2 / 2
 createDirectory($path, $recursive = false, $mode = null)
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
1 / 1
 createFile($path, $data = null)
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
1 / 1
 createStructure(array $structure)
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
2 / 2
 createLink($path, $destinationPath)
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
1 / 1
<?php
/*
 * This file is part of the php-vfs package.
 *
 * (c) Michael Donat <michael.donat@me.com>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */
namespace VirtualFileSystem;
use VirtualFileSystem\Structure\Directory;
use VirtualFileSystem\Structure\File;
use VirtualFileSystem\Structure\Link;
use VirtualFileSystem\Structure\Root;
/**
 * Main 'access' class to vfs implementation. It will register new stream wrapper on instantiation.
 *
 * This class provides methods to get access to Container as well as file URI helper.
 *
 * @author Michael Donat <michael.donat@me.com>
 * @package php-vfs
 */
class FileSystem
{
    protected $scheme;
    /**
     * @var Container
     */
    protected $container;
    /**
     * Class constructor. Will register both, the stream default options and wrapper handler.
     *
     * Note: Each FileSystem instance will create NEW stream wrapper/scheme.
     */
    public function __construct()
    {
        $this->scheme = uniqid('phpvfs');
        /* injecting components */
        $this->container = $container = new Container(new Factory());
        $this->container->root()->setScheme($this->scheme);
        $this->registerContextOptions($container);
        stream_wrapper_register($this->scheme, sprintf('\%s\%s', __NAMESPACE__, 'Wrapper'));
    }
    /**
     * Returns wrapper scheme.
     *
     * @return string
     */
    public function scheme()
    {
        return $this->scheme;
    }
    /**
     * Registers Container object as default context option for scheme associated with FileSystem instance.
     *
     * @param Container $container
     */
    protected function registerContextOptions(Container $container)
    {
        $defaultOptions = stream_context_get_options(stream_context_get_default());
        stream_context_set_default(array_merge(
            $defaultOptions,
            array($this->scheme => array('Container' => $container))
        ));
    }
    /**
     * Remoces wrapper registered for scheme associated with FileSystem instance.
     */
    public function __destruct()
    {
        stream_wrapper_unregister($this->scheme);
    }
    /**
     * Returns Container instance.
     *
     * @return Container
     */
    public function container()
    {
        return $this->container;
    }
    /**
     * Returns Root instance.
     *
     * @return Root
     */
    public function root()
    {
        return $this->container()->root();
    }
    /**
     * Returns absolute path to full URI path (with scheme)
     *
     * @param string $path - path without scheme
     *
     * @return string - path with scheme
     */
    public function path($path)
    {
        $path = ltrim($path, '/');
        return $this->scheme().'://'.$path;
    }
    /**
     * Creates and returns a directory
     *
     * @param string  $path
     * @param bool    $recursive
     * @param integer $mode
     *
     * @return Directory
     */
    public function createDirectory($path, $recursive = false, $mode = null)
    {
        return $this->container()->createDir($path, $recursive, $mode);
    }
    /**
     * Creates and returns a file
     *
     * @param string $path
     * @param string $data
     *
     * @return File
     */
    public function createFile($path, $data = null)
    {
        return $this->container()->createFile($path, $data);
    }
    /**
     * Creates fs structure
     *
     * @param array $structure
     */
    public function createStructure(array $structure)
    {
        $this->container()->createStructure($structure);
    }
    /**
     * Creates and returns a link
     *
     * @param string $path
     * @param string $destinationPath
     *
     * @return Link
     */
    public function createLink($path, $destinationPath)
    {
        return $this->container()->createLink($path, $destinationPath);
    }
}