| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121 | 
							- <?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) . "\n";
 
-         $code .= $this->generateDeclaration($call->getName(), $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)
 
-             . ')' . "\n" . $this->indent . '{' . "\n";
 
-         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() . "';" . "\n";
 
-     }
 
-     public function generateCall(FactoryMethod $method)
 
-     {
 
-         $code = '';
 
-         if ($method->acceptsVariableArguments()) {
 
-             $code .= $this->indent . self::INDENT . '$args = func_get_args();' . "\n";
 
-         }
 
-         $code .= $this->indent . self::INDENT . 'return ';
 
-         if ($method->acceptsVariableArguments()) {
 
-             $code .= 'call_user_func_array(array(\''
 
-                 . '\\' . $method->getClassName() . '\', \''
 
-                 . $method->getName() . '\'), $args);' . "\n";
 
-         } else {
 
-             $code .= '\\' . $method->getClassName() . '::'
 
-                 . $method->getName() . '('
 
-                 . $method->getParameterInvocations() . ');' . "\n";
 
-         }
 
-         return $code;
 
-     }
 
-     public function generateClosing()
 
-     {
 
-         return $this->indent . '}' . "\n";
 
-     }
 
-     public function write()
 
-     {
 
-         file_put_contents($this->file, $this->code);
 
-     }
 
- }
 
 
  |