MINOR: Refactored ClassInfo::dataClassesFor() to use existing methods rather than creating the class array itself.

This commit is contained in:
ajshort 2011-02-19 15:35:59 +11:00
parent eba1a85ead
commit f55cc7ec67
2 changed files with 45 additions and 22 deletions

View File

@ -59,34 +59,29 @@ class ClassInfo {
}
/**
* Return the database tables linked to this class.
* Gets an array of the current class, it subclasses and its ancestors. It then filters that list
* to those with DB tables
* Returns an array of the current class and all its ancestors and children
* which have a DB table.
*
* @param mixed $class string of the classname or instance of the class
* @param string|object $class
* @todo Move this into data object
* @return array
*/
static function dataClassesFor($class) {
global $_ALL_CLASSES;
if (is_object($class)) $class = get_class($class);
public static function dataClassesFor($class) {
$result = array();
$dataClasses = array();
if(!$_ALL_CLASSES['parents'][$class]) user_error("ClassInfo::dataClassesFor() no parents for $class", E_USER_WARNING);
foreach($_ALL_CLASSES['parents'][$class] as $subclass) {
if(self::hasTable($subclass)) $dataClasses[] = $subclass;
if (is_object($class)) {
$class = get_class($class);
}
if(self::hasTable($class)) $dataClasses[] = $class;
$classes = array_merge(
self::ancestry($class),
self::subclassesFor($class));
if(isset($_ALL_CLASSES['children'][$class]))
foreach($_ALL_CLASSES['children'][$class] as $subclass)
{
if(self::hasTable($subclass)) $dataClasses[] = $subclass;
foreach ($classes as $class) {
if (self::hasTable($class)) $result[$class] = $class;
}
return $dataClasses;
return $result;
}
/**

View File

@ -66,6 +66,26 @@ class ClassInfoTest extends SapphireTest {
ClassInfo::ancestry(42);
}
/**
* @covers ClassInfo::dataClassesFor()
*/
public function testDataClassesFor() {
$expect = array(
'ClassInfoTest_BaseDataClass' => 'ClassInfoTest_BaseDataClass',
'ClassInfoTest_HasFields' => 'ClassInfoTest_HasFields'
);
$classes = array(
'ClassInfoTest_BaseDataClass',
'ClassInfoTest_NoFields',
'ClassInfoTest_HasFields'
);
foreach ($classes as $class) {
$this->assertEquals($expect, ClassInfo::dataClassesFor($class));
}
}
}
class ClassInfoTest_BaseClass extends DataObject {
@ -79,3 +99,11 @@ class ClassInfoTest_ChildClass extends ClassInfoTest_BaseClass {
class ClassInfoTest_GrandChildClass extends ClassInfoTest_ChildClass {
}
class ClassInfoTest_BaseDataClass extends DataObject {
public static $db = array('Title' => 'Varchar');
}
class ClassInfoTest_NoFields extends ClassInfoTest_BaseDataClass {}
class ClassInfoTest_HasFields extends ClassInfoTest_NoFields {
public static $db = array('Description' => 'Varchar');
}