sonarrradarrplexorganizrnginxdashboardlandingpagestartpagelandinghtpcserverhomepagesabnzbdheimdallembycouchpotatonzbgetbookmarkapplication-dashboardmuximux
		
		
		
		
			You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							122 lines
						
					
					
						
							3.0 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							122 lines
						
					
					
						
							3.0 KiB
						
					
					
				
								<?php
							 | 
						|
								
							 | 
						|
								/*
							 | 
						|
								 Copyright (c) 2009 hamcrest.org
							 | 
						|
								 */
							 | 
						|
								
							 | 
						|
								abstract class FactoryFile
							 | 
						|
								{
							 | 
						|
								    /**
							 | 
						|
								     * Hamcrest standard is two spaces for each level of indentation.
							 | 
						|
								     *
							 | 
						|
								     * @var string
							 | 
						|
								     */
							 | 
						|
								    const INDENT = '    ';
							 | 
						|
								
							 | 
						|
								    private $indent;
							 | 
						|
								
							 | 
						|
								    private $file;
							 | 
						|
								
							 | 
						|
								    private $code;
							 | 
						|
								
							 | 
						|
								    public function __construct($file, $indent)
							 | 
						|
								    {
							 | 
						|
								        $this->file = $file;
							 | 
						|
								        $this->indent = $indent;
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    abstract public function addCall(FactoryCall $call);
							 | 
						|
								
							 | 
						|
								    abstract public function build();
							 | 
						|
								
							 | 
						|
								    public function addFileHeader()
							 | 
						|
								    {
							 | 
						|
								        $this->code = '';
							 | 
						|
								        $this->addPart('file_header');
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    public function addPart($name)
							 | 
						|
								    {
							 | 
						|
								        $this->addCode($this->readPart($name));
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    public function addCode($code)
							 | 
						|
								    {
							 | 
						|
								        $this->code .= $code;
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    public function readPart($name)
							 | 
						|
								    {
							 | 
						|
								        return file_get_contents(__DIR__ . "/parts/$name.txt");
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    public function generateFactoryCall(FactoryCall $call)
							 | 
						|
								    {
							 | 
						|
								        $method = $call->getMethod();
							 | 
						|
								        $code = $method->getComment($this->indent) . PHP_EOL;
							 | 
						|
								        $code .= $this->generateDeclaration($call->getName(), $method);
							 | 
						|
								        // $code .= $this->generateImport($method);
							 | 
						|
								        $code .= $this->generateCall($method);
							 | 
						|
								        $code .= $this->generateClosing();
							 | 
						|
								        return $code;
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    public function generateDeclaration($name, FactoryMethod $method)
							 | 
						|
								    {
							 | 
						|
								        $code = $this->indent . $this->getDeclarationModifiers()
							 | 
						|
								            . 'function ' . $name . '('
							 | 
						|
								            . $this->generateDeclarationArguments($method)
							 | 
						|
								            . ')' . PHP_EOL . $this->indent . '{' . PHP_EOL;
							 | 
						|
								        return $code;
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    public function getDeclarationModifiers()
							 | 
						|
								    {
							 | 
						|
								        return '';
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    public function generateDeclarationArguments(FactoryMethod $method)
							 | 
						|
								    {
							 | 
						|
								        if ($method->acceptsVariableArguments()) {
							 | 
						|
								            return '/* args... */';
							 | 
						|
								        } else {
							 | 
						|
								            return $method->getParameterDeclarations();
							 | 
						|
								        }
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    public function generateImport(FactoryMethod $method)
							 | 
						|
								    {
							 | 
						|
								        return $this->indent . self::INDENT . "require_once '" . $method->getClass()->getFile() . "';" . PHP_EOL;
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    public function generateCall(FactoryMethod $method)
							 | 
						|
								    {
							 | 
						|
								        $code = '';
							 | 
						|
								        if ($method->acceptsVariableArguments()) {
							 | 
						|
								            $code .= $this->indent . self::INDENT . '$args = func_get_args();' . PHP_EOL;
							 | 
						|
								        }
							 | 
						|
								
							 | 
						|
								        $code .= $this->indent . self::INDENT . 'return ';
							 | 
						|
								        if ($method->acceptsVariableArguments()) {
							 | 
						|
								            $code .= 'call_user_func_array(array(\''
							 | 
						|
								                . '\\' . $method->getClassName() . '\', \''
							 | 
						|
								                . $method->getName() . '\'), $args);' . PHP_EOL;
							 | 
						|
								        } else {
							 | 
						|
								            $code .= '\\' . $method->getClassName() . '::'
							 | 
						|
								                . $method->getName() . '('
							 | 
						|
								                . $method->getParameterInvocations() . ');' . PHP_EOL;
							 | 
						|
								        }
							 | 
						|
								
							 | 
						|
								        return $code;
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    public function generateClosing()
							 | 
						|
								    {
							 | 
						|
								        return $this->indent . '}' . PHP_EOL;
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    public function write()
							 | 
						|
								    {
							 | 
						|
								        file_put_contents($this->file, $this->code);
							 | 
						|
								    }
							 | 
						|
								}
							 | 
						|
								
							 |