예제 #1
0
function _propel_convert_yml_schema($check_schema = true, $prefix = '')
{
    $finder = pakeFinder::type('file')->name('*schema.yml');
    $dirs = array('config');
    if ($pluginDirs = glob(sfConfig::get('sf_root_dir') . '/plugins/*/config')) {
        $dirs = array_merge($dirs, $pluginDirs);
    }
    $schemas = $finder->in($dirs);
    if ($check_schema && !count($schemas)) {
        throw new Exception('You must create a schema.yml file.');
    }
    $db_schema = new sfPropelDatabaseSchema();
    foreach ($schemas as $schema) {
        $db_schema->loadYAML($schema);
        pake_echo_action('schema', 'converting "' . $schema . '"' . ' to XML');
        $localprefix = $prefix;
        // change prefix for plugins
        if (preg_match('#plugins[/\\\\]([^/\\\\]+)[/\\\\]#', $schema, $match)) {
            $localprefix = $prefix . $match[1] . '-';
        }
        // save converted xml files in original directories
        $xml_file_name = str_replace('.yml', '.xml', basename($schema));
        $file = str_replace(basename($schema), $localprefix . $xml_file_name, $schema);
        pake_echo_action('schema', 'putting ' . $file);
        file_put_contents($file, $db_schema->asXML());
    }
}
$t = new my_lime_test(409);
$t->diag('Classical YAML to XML conversion');
$p = new sfPropelDatabaseSchema();
$p->loadYAML(dirname(__FILE__) . '/fixtures/schema.yml');
$target = file_get_contents(dirname(__FILE__) . '/fixtures/schema.xml');
$t->is_line_by_line($p->asXML(), $target);
$t->diag('New YAML to XML conversion');
$p = new sfPropelDatabaseSchema();
$p->loadYAML(dirname(__FILE__) . '/fixtures/new_schema.yml');
$target = file_get_contents(dirname(__FILE__) . '/fixtures/schema.xml');
$t->is_line_by_line($p->asXML(), $target);
$t->diag('New YAML to Old YAML conversion');
$old_yml_target = sfYaml::load(dirname(__FILE__) . '/fixtures/schema.yml');
$p = new sfPropelDatabaseSchema();
$new_yml_transformed = $p->convertNewToOldYaml(sfYaml::load(dirname(__FILE__) . '/fixtures/new_schema.yml'));
$t->is_array_explicit($new_yml_transformed, $old_yml_target);
$t->diag('Old YAML to New YAML conversion');
$new_yml_target = sfYaml::load(dirname(__FILE__) . '/fixtures/new_schema.yml');
$p = new sfPropelDatabaseSchema();
$old_yml_transformed = $p->convertOldToNewYaml(sfYaml::load(dirname(__FILE__) . '/fixtures/schema.yml'));
$t->is_array_explicit($old_yml_transformed, $new_yml_target);
$t->todo('XML and classical YAML internal representation');
$p1 = new sfPropelDatabaseSchema();
$p1->loadXML(dirname(__FILE__) . '/fixtures/schema.xml');
$p2 = new sfPropelDatabaseSchema();
$p2->loadYAML(dirname(__FILE__) . '/fixtures/schema.yml');
//$t->is_array_explicit($p1->asArray(), $p2->asArray());
$t->todo('XML and classical YAML compared as XML');
//$t->is_line_by_line($p1->asXML(), $p2->asXML());
$t->todo('XML and classical YAML compared as YAML');
//$t->is_line_by_line($p1->asYAML(), $p2->asYAML());
 /**
  * Getting schema structure
  *
  * @param string $schema_path 
  * @return array
  * @author Sergey Startsev
  */
 private function getSchemaStructure($schema_path)
 {
     $dbSchema = new sfPropelDatabaseSchema();
     $dbSchema->loadYAML($schema_path);
     return $dbSchema->asArray();
 }