nginxsonarrradarrplexorganizrdashboardbookmarkapplication-dashboardmuximuxlandingpagestartpagelandinghtpcserverhomepagesabnzbdheimdallembycouchpotatonzbget
		
		
		
		
			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); | |
|     } | |
| }
 | |
| 
 |