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(); }