public function testAddSchema() { $schema100 = new SchemaDescriptor('pbj:vendor:package:category:message:1-0-0'); $schema101 = new SchemaDescriptor('pbj:vendor:package:category:message:1-0-1'); $schema200 = new SchemaDescriptor('pbj:vendor:package:category:message:2-0-0'); SchemaStore::addSchema($schema100->getId(), $schema100); SchemaStore::addSchema($schema101->getId(), $schema101); SchemaStore::addSchema($schema200->getId(), $schema200); $this->assertEquals(SchemaStore::getSchemaById('pbj:vendor:package:category:message:1-0-0'), $schema100); $this->assertEquals(SchemaStore::getPreviousSchema($schema101->getId()), $schema100); $this->assertTrue(SchemaStore::hasOtherSchemaMajorRev($schema100->getId())); $this->assertEquals(SchemaStore::getOtherSchemaMajorRev($schema101->getId()), [$schema101, $schema200]); }
/** * {@inheritdoc} */ public function generateManifest(array $schemas) { $messages = []; if (!($filename = $this->compileOptions->getManifest())) { return; } // extract previous schemas if (file_exists($filename)) { $content = file_get_contents($filename); if (preg_match_all('/\'([a-z0-9-]+:[a-z0-9\\.-]+:[a-z0-9-]+?:[a-z0-9-]+(:v[0-9]+)?)\' => \'(.*)\'/', $content, $matches) !== false) { foreach ($matches[1] as $key => $value) { $messages[$value] = $matches[3][$key]; } } } // merge with selected schemas (only non-mixin schema's) /** @var SchemaDescriptor $schema */ foreach ($schemas as $schema) { if ($schema->isMixinSchema()) { continue; } if (!array_key_exists($schema->getId()->getCurie(), $messages)) { $messages[$schema->getId()->getCurie()] = sprintf('%s\\%sV%d', $schema->getLanguage('php')->get('namespace'), StringUtils::toCamelFromSlug($schema->getId()->getMessage()), $schema->getId()->getVersion()->getMajor()); } if (SchemaStore::hasOtherSchemaMajorRev($schema->getId())) { /** @var SchemaDescriptor $s */ foreach (SchemaStore::getOtherSchemaMajorRev($schema->getId()) as $s) { if (!array_key_exists($s->getId()->getCurieWithMajorRev(), $messages)) { $messages[$s->getId()->getCurieWithMajorRev()] = sprintf('%s\\%sV%d', $s->getLanguage('php')->get('namespace'), StringUtils::toCamelFromSlug($s->getId()->getMessage()), $s->getId()->getVersion()->getMajor()); } } } } // delete invalid schemas foreach ($messages as $key => $value) { if (!SchemaStore::getSchemaById($key, true)) { unset($messages[$key]); } } $response = new GeneratorResponse(); $response->addFile($this->renderFile('manifest.twig', $filename, ['messages' => $messages])); return $response; }
/** * @param SchemaId $schemaId * @param string $curieWithMajorRev * * @return SchemaDescriptor|null * * @throws \InvalidArgumentException * @throws MissingSchema */ private function getMixin(SchemaId $schemaId, $curieWithMajorRev) { if ($curieWithMajorRev == $schemaId->getCurieWithMajorRev()) { throw new \InvalidArgumentException(sprintf('Cannot add yourself "%s" as to mixins.', $schemaId->toString())); } if (!($schema = SchemaStore::getSchemaById($curieWithMajorRev, true))) { throw new MissingSchema($curieWithMajorRev); } return $schema; }