mirror of
https://github.com/silverstripe/silverstripe-framework
synced 2024-10-22 12:05:37 +00:00
MINOR: Refactored ClassInfo::dataClassesFor() to use existing methods rather than creating the class array itself.
This commit is contained in:
parent
eba1a85ead
commit
f55cc7ec67
@ -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;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -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');
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user