public function register(Application $app) { $configuration = $app['mandango.configuration']; if (!isset($configuration['metadata_factory_class'])) { throw new \Exception("Missing param 'metadata_factory_class' in 'mandango.configuration'"); } if (!isset($configuration['metadata_factory_output'])) { throw new \Exception("Missing param 'metadata_factory_output' in 'mandango.configuration'"); } if (!isset($configuration['default_output'])) { throw new \Exception("Missing param 'default_output' in 'mandango.configuration'"); } if (!isset($configuration['schema_file'])) { throw new \Exception("Missing param 'schema_file' in 'mandango.configuration'"); } if (!isset($app['mandango.token'])) { throw new \Exception("Missing param 'mandango.token'"); } $app['mandango'] = $app->share(function () use($app) { $connections = isset($app['mandango.connections']) ? $app['mandango.connections'] : array('local' => array('host' => 'mongodb://localhost:27017', 'database' => 'test')); $default = isset($app['mandango.default_connection']) ? $app['mandango.default_connection'] : 'local'; $logging = isset($app['mandango.logging']) ? (bool) $app['mandango.logging'] : false; $cache_dir = isset($app['mandango.cache_dir']) ? $app['mandango.cache_dir'] : sys_get_tempd_dir(); $metadata = new $app['mandango.configuration']['metadata_factory_class'](); $mandango = new Mandango($metadata, new FilesystemCache($cache_dir)); foreach ($connections as $name => $config) { $connections[$name] = new Connection($config['host'], $config['database']); } $mandango->setConnections($connections); $mandango->setDefaultConnectionName($default); return $mandango; }); $app['mandango.mondator'] = $app->share(function () use($app, $configuration) { $mondator = new Mondator(); $mondator->setConfigClasses(require $configuration['schema_file']); $mondator->setExtensions(array(new \Mandango\Extension\Core(array('metadata_factory_class' => $configuration['metadata_factory_class'], 'metadata_factory_output' => $configuration['metadata_factory_output'], 'default_output' => $configuration['default_output'])))); return $mondator; }); $app->get('/_mandango/generate/{token}', function ($token) use($app) { if ($token !== $app['mandango.token']) { return 'Access Denied!'; } $app['mandango.mondator']->process(); return 'Successfull generated models'; }); // autoloading Mandango library if (isset($app['mandango.class_path'])) { $app['autoloader']->registerNamespace('Mandango', $app['mandango.class_path']); $app['autoloader']->registerNamespace('Mandango\\Mondator', $app['mandango.class_path'] . '/../vendor/mondator/src'); } if (isset($configuration['default_output'])) { $outputDir = rtrim($configuration['default_output'], DIRECTORY_SEPARATOR); $outputDir = dirname($outputDir); $app['autoloader']->registerNamespace(isset($configuration['model_namespace']) ? $configuration['model_namespace'] : 'Model', $outputDir); } }
/** * Execute the console command. * * @return void */ public function fire() { // Get the schema $schema = \Config::get('laravel-mandango::mandango.schema'); $mondator = new Mondator(); $mondator->setConfigClasses($schema); $directory = app_path() . '/mandango'; $this->info('Writing Mondango classes to ' . $directory); $mondator->setExtensions(array(new \Mandango\Extension\Core(array('metadata_factory_class' => 'Model\\Mapping\\Metadata', 'metadata_factory_output' => $directory . '/models/Mapping', 'default_output' => $directory . '/models')), new \Mandango\Extension\DocumentPropertyOverloading(), new \Mandango\Extension\DocumentArrayAccess())); $mondator->process(); }
public function testGenerateContainersNewConfigClasses() { $mondator = new Mondator(); $mondator->setConfigClasses(array('Article' => array('name' => 'MyArticle', 'extensions' => array(array('class' => 'Mandango\\Mondator\\Tests\\Fixtures\\Extension\\NewConfigClass', 'options' => array('suffix' => 'Translation', 'name' => 'translation', 'multiple' => true, 'multiple_suffix' => 'Multiple', 'multiple_name' => 'multiplex')))), 'Category' => array('name' => 'MyCategory'))); $mondator->setExtensions(array(new \Mandango\Mondator\Tests\Fixtures\Extension\Name(), new \Mandango\Mondator\Tests\Fixtures\Extension\ProcessOthersFromArray())); $containers = $mondator->generateContainers(); $this->assertSame(5, count($containers)); $this->assertTrue(isset($containers['_global'])); $this->assertTrue(isset($containers['Article'])); $this->assertTrue(isset($containers['ArticleTranslation'])); $this->assertTrue(isset($containers['ArticleTranslationMultiple'])); $this->assertTrue(isset($containers['Category'])); }
public function register(Container $app) { $app['mondator'] = function ($app) { if (!$app['mongator.models.output']) { throw new \LogicException('You must register "mongator.models.output" to this provider'); } if (!$app['mongator.metadata.class']) { throw new \LogicException('You must register "mongator.metadata.class" to this provider'); } $extensions = array(new Core(array('metadata_factory_class' => $app['mongator.metadata.class'], 'metadata_factory_output' => $app['mongator.models.output'], 'default_output' => $app['mongator.models.output']))); $mondator = new Mondator(); $mondator->setExtensions(array_merge($extensions, $app['mongator.extensions'])); return $mondator; }; $app['mongator.extensions'] = array(); $app['mongator.models.output'] = null; }
public function mondatorProcessAction() { // Config $config = $this->getServiceLocator()->get('Config'); $configMandango = $config['skar']['mandango']; // Start Mondator $mondator = new Mondator(); // Assign the config classes if (is_array($configMandango['config_classes'])) { $mondator->setConfigClasses($configMandango['config_classes']); } else { $mondator->setConfigClasses($config[$configMandango['config_classes']]); } // Assign extensions $mondator->setExtensions(array(new MandangoCore(array('metadata_factory_class' => $configMandango['metadata_factory_class'], 'metadata_factory_output' => $configMandango['metadata_factory_output'], 'default_output' => $configMandango['default_output'])))); // Process $mondator->process(); }
public function testTwigSupport() { $mondator = new Mondator(); $mondator->setConfigClasses(array('Model\\Article' => array('fields' => array('title' => array(), 'content' => array())))); $mondator->addExtension(new \Mandango\Mondator\Tests\Fixtures\Extension\Twig\MandangoTestsTwigExtension()); $containers = $mondator->generateContainers(); $article = $containers['Model\\Article']->getDefinition('document'); // properties $this->assertTrue($article->hasPropertyByName('publicProperty')); $this->assertSame('public', $article->getPropertyByName('publicProperty')->getVisibility()); $this->assertTrue($article->hasPropertyByName('protectedProperty')); $this->assertSame('protected', $article->getPropertyByName('protectedProperty')->getVisibility()); $this->assertTrue($article->hasPropertyByName('privateProperty')); $this->assertSame('private', $article->getPropertyByName('privateProperty')->getVisibility()); $this->assertTrue($article->hasPropertyByName('staticProperty')); $this->assertTrue($article->getPropertyByName('staticProperty')->isStatic()); $this->assertTrue($article->hasPropertyByName('anotherPublicProperty')); $this->assertSame('public', $article->getPropertyByName('anotherPublicProperty')->getVisibility()); $this->assertTrue($article->hasPropertyByName('anotherProtectedProperty')); $this->assertSame('protected', $article->getPropertyByName('anotherProtectedProperty')->getVisibility()); $this->assertTrue($article->hasPropertyByName('anotherPrivateProperty')); $this->assertSame('private', $article->getPropertyByName('anotherPrivateProperty')->getVisibility()); // methods $this->assertTrue($article->hasMethodByName('publicMethod')); $this->assertSame('public', $article->getMethodbyName('publicMethod')->getVisibility()); $this->assertTrue($article->hasMethodByName('protectedMethod')); $this->assertSame('protected', $article->getMethodbyName('protectedMethod')->getVisibility()); $this->assertTrue($article->hasMethodByName('privateMethod')); $this->assertSame('private', $article->getMethodbyName('privateMethod')->getVisibility()); $this->assertTrue($article->hasMethodByName('methodWithPhpDoc')); $this->assertSame(<<<EOF /** * phpDoc */ EOF , $article->getMethodbyName('methodWithPhpDoc')->getDocComment()); $this->assertTrue($article->hasMethodByName('methodWithArguments')); $this->assertSame('$name, $value', $article->getMethodbyName('methodWithArguments')->getArguments()); $this->assertTrue($article->hasMethodByName('methodWithCode')); $this->assertTrue($article->hasMethodByName('methodWithCode')); $this->assertSame(<<<EOF return null; EOF , $article->getMethodbyName('methodWithCode')->getCode()); $this->assertTrue($article->hasMethodByName('staticMethod')); $this->assertTrue($article->getMethodByName('staticMethod')->isStatic()); $this->assertTrue($article->hasMethodByName('methodWithObjectProperties')); $this->assertSame('\\ArrayObject $array, \\Mandango\\Query $query', $article->getMethodbyName('methodWithObjectProperties')->getArguments()); }
<?php $loader = (require __DIR__ . '/../vendor/.composer/autoload.php'); $loader->add('Mandango\\Tests', __DIR__); $loader->add('Model', __DIR__); // mondator $configClasses = (require __DIR__ . '/config_classes.php'); use Mandango\Mondator\Mondator; $mondator = new Mondator(); $mondator->setConfigClasses($configClasses); $mondator->setExtensions(array(new Mandango\Extension\Core(array('metadata_factory_class' => 'Model\\Mapping\\MetadataFactory', 'metadata_factory_output' => __DIR__ . '/Model/Mapping', 'default_output' => __DIR__ . '/Model')))); $mondator->process();
<?php $loader = (require __DIR__ . '/../vendor/autoload.php'); $loader->add('Mongator\\Tests', __DIR__); $loader->add('Model', __DIR__); use Mandango\Mondator\Mondator; $mondator = new Mondator(); $mondator->setConfigClasses(array()); $mondator->setExtensions(array(new Mongator\Extension\Core(array('metadata_factory_class' => 'Model\\Mapping\\Metadata', 'metadata_factory_output' => __DIR__, 'default_output' => __DIR__)))); $mondator->process();
public function testProcessUsesNamespaceSeparatorForNestingClassFilesInDirectories() { $tmpDir = sys_get_temp_dir(); $expectedFile = $tmpDir . '/MiClase/Test.php'; if (file_exists($expectedFile)) { unlink($expectedFile); } $mondator = new Mondator(); $mondator->setConfigClass('Foo', array()); $mondator->setExtensions(array(new \Mandango\Mondator\Tests\Fixtures\Extension\InitDefinition(array('definition_name' => 'myclass', 'class_name' => 'MiClase\\Test', 'output_dir' => $tmpDir)), new \Mandango\Mondator\Extension\NamespaceSeparatorOutputFixerExtension())); $mondator->process(); $this->assertFileExists($expectedFile); }
<?php $vendorDir = __DIR__ . '/../vendor'; require_once $vendorDir . '/symfony/src/Symfony/Component/ClassLoader/UniversalClassLoader.php'; use Symfony\Component\ClassLoader\UniversalClassLoader; $loader = new UniversalClassLoader(); $loader->registerNamespaces(array('Mandango' => __DIR__ . '/../src', 'Mandango\\Tests' => __DIR__, 'Mandango\\Mondator' => $vendorDir . '/mondator/src', 'Model' => __DIR__)); $loader->registerPrefixes(array('Twig_' => $vendorDir . '/twig/lib')); $loader->register(); // mondator $configClasses = (require __DIR__ . '/config_classes.php'); use Mandango\Mondator\Mondator; $mondator = new Mondator(); $mondator->setConfigClasses($configClasses); $mondator->setExtensions(array(new Mandango\Extension\Core(array('metadata_factory_class' => 'Model\\Mapping\\Metadata', 'metadata_factory_output' => __DIR__ . '/Model/Mapping', 'default_output' => __DIR__ . '/Model')), new Mandango\Extension\DocumentArrayAccess(), new Mandango\Extension\DocumentPropertyOverloading())); $mondator->process();
<?php /** * This file is part of Minventar. * * @category inventory software * @package Minventar_Service * * @author Daniel Schulz <*****@*****.**> * * @copyright (c) 2015 by fashion4home GmbH <www.fashionforhome.de> * @license GPL-3.0 * @license http://opensource.org/licenses/GPL-3.0 GNU GENERAL PUBLIC LICENSE * * @version 0.1.0 * * Date: 22.09.2015 * Time: 14:10 */ // this script can be used to generate new mappings for mandango echo $_SERVER['DOCUMENT_ROOT'] . "/vendor/autoload.php"; require_once $_SERVER['DOCUMENT_ROOT'] . "/vendor/autoload.php"; use Mandango\Mondator\Mondator; $modelDir = $_SERVER['DOCUMENT_ROOT'] . "/src/AppBundle/Model"; $mondator = new Mondator(); $mondator->setConfigClasses(array('Model\\Attribute' => array('isEmbedded' => true, 'fields' => array('name' => 'string', 'value' => 'string')), 'Model\\AttributeType' => array('isEmbedded' => true, 'fields' => array('name' => 'string', 'type' => 'string')), 'Model\\Resource' => array('collection' => 'resource', 'fields' => array('name' => 'string'), 'referencesOne' => array('type' => array('class' => 'Model\\ResourceType')), 'embeddedsMany' => array('attributes' => array('class' => 'Model\\Attribute')), 'referencesMany' => array('resources' => array('class' => 'Model\\Resource'))), 'Model\\ResourceType' => array('collection' => 'resource_type', 'fields' => array('name' => 'string', 'is_bundle' => 'boolean'), 'embeddedsMany' => array('attributes' => array('class' => 'Model\\AttributeType'))))); $mondator->setExtensions(array(new Mandango\Extension\Core(array('metadata_factory_class' => 'Model\\Mapping\\MetadataFactory', 'metadata_factory_output' => $modelDir . '/Mapping', 'default_output' => $modelDir)))); $mondator->process();
<?php $loader = (require __DIR__ . "/../vendor/autoload.php"); $loader->add('Model', __DIR__); // mondator use Mandango\Mondator\Mondator; $configClasses = array('Model\\Article' => array('columns' => array('id' => array('id' => 'auto', 'type' => 'integer'), 'title' => array('type' => 'string', 'length' => 100), 'slug' => array('name' => 'titleSlug', 'type' => 'string', 'length' => 110, 'unique' => true), 'content' => 'text', 'source' => array('type' => 'string', 'length' => 255, 'nullable' => true), 'isActive' => array('type' => 'boolean', 'default' => true), 'score' => array('type' => 'decimal', 'precision' => 2, 'scale' => 4), 'date' => 'date'), 'many_to_one' => array('category' => array('class' => 'Model\\Category', 'inversedBy' => 'articles')), 'indexes' => array('my_slug_index' => array('columns' => array('titleSlug'), 'unique' => true), 'isActive_date' => array('columns' => array('isActive', 'date')))), 'Model\\Category' => array('columns' => array('id' => array('id' => 'auto', 'type' => 'integer'), 'name' => array('type' => 'string', 'length' => 100)), 'one_to_many' => array('articles' => array('class' => 'Model\\Article', 'mappedBy' => 'category'))), 'Model\\Simple' => array('columns' => array('id' => array('id' => 'auto', 'type' => 'integer'), 'column' => array('type' => 'string', 'length' => 255), 'column2' => array('type' => 'string', 'length' => 255, 'nullable' => true))), 'Model\\Student' => array('columns' => array('id' => array('id' => 'auto', 'type' => 'integer'), 'name' => array('type' => 'string', 'length' => 255)), 'many_to_one' => array('school' => array('class' => 'Model\\School', 'inversedBy' => 'students'))), 'Model\\School' => array('columns' => array('id' => array('id' => 'auto', 'type' => 'integer'), 'name' => array('type' => 'string', 'length' => 255)), 'one_to_many' => array('students' => array('class' => 'Model\\Student', 'mappedBy' => 'school'))), 'Model\\Person' => array('columns' => array('id' => array('id' => 'auto', 'type' => 'integer'), 'name' => array('type' => 'string', 'length' => 255)), 'many_to_many' => array('likings' => array('class' => 'Model\\Liking', 'inversedBy' => 'persons'))), 'Model\\Liking' => array('columns' => array('id' => array('id' => 'auto', 'type' => 'integer'), 'name' => array('type' => 'string', 'length' => 255)), 'many_to_many' => array('persons' => array('class' => 'Model\\Person', 'mappedBy' => 'likings'))), 'Model\\IdentifierStrategyIdentity' => array('columns' => array('id' => array('id' => array('strategy' => 'identity'), 'type' => 'integer'))), 'Model\\IdentifierStrategyNone' => array('columns' => array('id' => array('id' => array('strategy' => 'none'), 'type' => 'integer'))), 'Model\\Hashable' => array('columns' => array('id' => array('id' => 'auto', 'type' => 'integer'), 'title' => 'string'), 'behaviors' => array(array('class' => 'Doctrator\\Behavior\\Hashable'))), 'Model\\Ipable' => array('columns' => array('id' => array('id' => 'auto', 'type' => 'integer'), 'title' => 'string'), 'behaviors' => array(array('class' => 'Doctrator\\Behavior\\Ipable'))), 'Model\\Sluggable' => array('columns' => array('id' => array('id' => 'auto', 'type' => 'integer'), 'title' => 'string'), 'behaviors' => array(array('class' => 'Doctrator\\Behavior\\Sluggable', 'options' => array('from_column' => 'title')))), 'Model\\SluggableUpdate' => array('columns' => array('id' => array('id' => 'auto', 'type' => 'integer'), 'title' => 'string', 'body' => array('type' => 'text', 'nullable' => true)), 'behaviors' => array(array('class' => 'Doctrator\\Behavior\\Sluggable', 'options' => array('from_column' => 'title', 'update' => true)))), 'Model\\Sortable' => array('columns' => array('id' => array('id' => 'auto', 'type' => 'integer'), 'title' => 'string'), 'behaviors' => array(array('class' => 'Doctrator\\Behavior\\Sortable'))), 'Model\\Taggable' => array('columns' => array('id' => array('id' => 'auto', 'type' => 'integer'), 'title' => 'string'), 'behaviors' => array(array('class' => 'Doctrator\\Behavior\\Taggable'))), 'Model\\Timestampable' => array('columns' => array('id' => array('id' => 'auto', 'type' => 'integer'), 'title' => 'string'), 'behaviors' => array(array('class' => 'Doctrator\\Behavior\\Timestampable'))), 'Model\\Translatable' => array('columns' => array('id' => array('id' => 'auto', 'type' => 'integer'), 'title' => array('type' => 'string', 'length' => 255), 'body' => array('type' => 'text'), 'date' => array('type' => 'datetime'), 'isActive' => array('type' => 'boolean', 'default' => true)), 'behaviors' => array(array('class' => 'Doctrator\\Behavior\\Translatable', 'options' => array('columns' => array('title', 'body')))))); $mondator = new Mondator(); $mondator->setConfigClasses($configClasses); $mondator->setExtensions(array(new Doctrator\Extension\Core(array('default_output' => __DIR__ . '/Model')), new Doctrator\Extension\ActiveRecord(), new Doctrator\Extension\ArrayAccess(), new Doctrator\Extension\PropertyOverloading(), new Doctrator\Extension\Behaviors())); $mondator->process(); /* * Not ActiveRecord */ $mondator = new Mondator(); $mondator->setConfigClasses($configClasses); $mondator->setExtensions(array(new Doctrator\Extension\Core(array('default_output' => __DIR__ . '/ModelNotAR')))); $mondator->process();
protected function registerMondator() { $this->app['mondator'] = $this->app->share(function ($app) { if (!$app['config']['mongator::models_output']) { throw new \LogicException('You must register "mongator::models_output" to this provider'); } if (!$app['config']['mongator::metadata_class']) { throw new \LogicException('You must register "mongator::metadata_class" to this provider'); } $extensions = array(new Core(array('metadata_factory_class' => $app['config']['mongator::metadata_class'], 'metadata_factory_output' => $app['config']['mongator::models_output'], 'default_output' => $app['config']['mongator::models_output']))); $mondator = new Mondator(); $mondator->setExtensions(array_merge($extensions, $app['config']['mongator::extensions'])); return $mondator; }); }