From c02c83d4a7ad7eda25fee044c5cb2958f430aeed Mon Sep 17 00:00:00 2001 From: zYne Date: Thu, 28 Jun 2007 13:15:24 +0000 Subject: [PATCH] --- lib/Doctrine/Relation/Parser.php | 32 +++++++++++++++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) diff --git a/lib/Doctrine/Relation/Parser.php b/lib/Doctrine/Relation/Parser.php index b79275a83..a4a202615 100644 --- a/lib/Doctrine/Relation/Parser.php +++ b/lib/Doctrine/Relation/Parser.php @@ -108,10 +108,40 @@ class Doctrine_Relation_Parser if (substr($name, -8) === 'Template') { $name = substr($name, 0, -8); } + + $parent = new ReflectionClass($this->_table->getComponentName()); if ( ! class_exists($name)) { $template = new $templateName(); - print_r($template->getTable()->getColumns()); + + $conn = $this->_table->getConnection(); + + $refl = new ReflectionClass($templateName); + $file = file($refl->getFileName()); + + $parentMethods = $refl->getParentClass()->getMethods(); + + foreach ($parentMethods as $k => $method) { + $parentMethods[$k] = $method->getName(); + } + + $lines[] = 'class ' . $name . ' extends Doctrine_Record'; + $lines[] = '{'; + foreach ($refl->getMethods() as $method) { + if ($method->getDeclaringClass()->getName() === $refl->getName()) { + $start = $method->getStartLine() - 1; + $end = $method->getEndLine() - 1; + + $lines = array_merge($lines, array_slice($file, $start, ($end - $start) + 1)); + } + } + $lines[] = '}'; + $fileName = dirname($parent->getFileName()) . DIRECTORY_SEPARATOR . $name . '.php'; + + if (file_exists($fileName)) { + throw new Doctrine_Template_Exception("Couldn't generate class for template."); + } + eval(implode("\n", $lines)); } }