Code Coverage
 
Classes and Traits
Functions and Methods
Lines
Total
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
8 / 8
CRAP
100.00% covered (success)
100.00%
18 / 18
Factory
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
8 / 8
10
100.00% covered (success)
100.00%
18 / 18
 __construct()
100.00% covered (success)
100.00%
1 / 1
3
100.00% covered (success)
100.00%
3 / 3
 getRoot()
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
1 / 1
 updateMetadata(Node $node)
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
3 / 3
 updateFileTimes(Node $node)
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
5 / 5
 updateOwnership(Node $node)
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
3 / 3
 getDir($basename)
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
1 / 1
 getFile($basename)
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
1 / 1
 getLink($basename, Node $destination)
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\Node;
use VirtualFileSystem\Structure\Root;
/**
 * Factory class to encapsulate object creation.
 *
 * @author Michael Donat <michael.donat@me.com>
 * @package php-vfs
 */
class Factory
{
    protected $userid;
    protected $groupid;
    /**
     * Class constructor. Sets user/group to current system user/group.
     *
     * On non POSIX systems both attributes will be set to 0
     *
     */
    public function __construct()
    {
        $this->userid = function_exists('posix_getuid') ? posix_getuid() : 0;
        $this->groupid = function_exists('posix_getgid') ? posix_getgid() : 0;
    }
    /**
     * Creates Root object.
     *
     * @return Root
     */
    public function getRoot()
    {
        return $this->updateMetadata(new Root());
    }
    /**
     * Updates time and ownership of a node
     *
     * @param Node $node
     *
     * @return Node
     */
    public function updateMetadata(Node $node)
    {
        $this->updateFileTimes($node);
        $this->updateOwnership($node);
        return $node;
    }
    /**
     * Update file a/c/m times
     *
     * @param  Node $node
     * @return Node
     */
    public function updateFileTimes(Node $node)
    {
        $time = time();
        $node->setAccessTime($time);
        $node->setModificationTime($time);
        $node->setChangeTime($time);
        return $node;
    }
    /**
     * Sets default (current) uid/gui on object.
     *
     * @param Node $node
     *
     * @return Node
     */
    protected function updateOwnership(Node $node)
    {
        $node->chown($this->userid);
        $node->chgrp($this->groupid);
        return $node;
    }
    /**
     * Creates Directory object.
     *
     * @param string $basename
     *
     * @return Directory
     */
    public function getDir($basename)
    {
        return $this->updateMetadata(new Directory($basename));
    }
    /**
     * Creates File object.
     *
     * @param string $basename
     *
     * @return File
     */
    public function getFile($basename)
    {
        return $this->updateMetadata(new File($basename));
    }
    /**
     * Creates Link object.
     *
     * @param string         $basename
     * @param Structure\Node $destination
     *
     * @return Link
     */
    public function getLink($basename, Node $destination)
    {
        return $this->updateMetadata(new Link($basename, $destination));
    }
}