JamesRezo/WebHelper

View on GitHub
src/Factory.php

Summary

Maintainability
A
0 mins
Test Coverage
<?php

/**
 * This file is, guess what, part of WebHelper.
 *
 * (c) James <james@rezo.net>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

namespace JamesRezo\WebHelper;

use Symfony\Component\Yaml\Yaml;
use JamesRezo\WebHelper\WebServer\NullWebServer;
use JamesRezo\WebHelper\WebProject\NullWebProject;

/**
 * WebHelper Factory Class.
 *
 * @author James <james@rezo.net>
 */
class Factory
{
    private $webservers = [];

    public function __construct()
    {
        $file = '';
        foreach ([
            getenv('HOME').'/.config/webhelper/parameters.yml',
            __DIR__.'/../app/config/parameters.yml',
        ] as $file) {
            if (is_readable($file)) {
                break;
            }
        }

        if ($file) {
            $yaml = new Yaml();
            $config = $yaml->parse(file_get_contents($file));
            $this->webservers = $config['webservers'];
        }
    }

    /**
     * Create a WebServerInterface Object.
     *
     * @param string $name    a web server software name
     * @param string $version a web server software version
     *
     * @return WebServer\WebServerInterface a WebServer Object
     */
    public function createWebServer($name, $version = '')
    {
        if (in_array($name, $this->getKnownWebServers())) {
            $webserver = new $this->webservers[$name][0]($version);
            $webserver
                ->setBinaries($this->webservers[$name][1])
                ->setDetectionParameter($this->webservers[$name][2]);

            return $webserver;
        }

        return new NullWebServer($version);
    }

    public function getKnownWebServers()
    {
        return array_keys($this->webservers);
    }

    public function createWebProject($name, $version = '')
    {
        $name = '';

        return new NullWebProject($version);
    }
}