Joli\Jane\JsonSchemaMerger::merge PHP Method

merge() public method

Create a new JsonSchema based on two merged schema
public merge ( Joli\Jane\Model\JsonSchema $left, Joli\Jane\Model\JsonSchema $right ) : Joli\Jane\Model\JsonSchema
$left Joli\Jane\Model\JsonSchema
$right Joli\Jane\Model\JsonSchema
return Joli\Jane\Model\JsonSchema
    public function merge(JsonSchema $left, JsonSchema $right)
    {
        $merged = clone $right;
        if ($left->getType() !== null && $right->getType() !== null && $left->getType() !== $right->getType()) {
            throw new \RuntimeException("Both types are defined and different, merge is not possible");
        }
        if ($right->getType() === null && $left->getType() !== null) {
            $merged->setType($left->getType());
        }
        $merged->setProperties($this->arrayMerge($left->getProperties(), $right->getProperties()));
        $merged->setRequired($this->arrayUnique($this->arrayMerge($left->getRequired(), $right->getRequired())));
        return $merged;
    }

Usage Example

Beispiel #1
0
 /**
  * {@inheritDoc}
  */
 public function guessClass($object, $name)
 {
     $classes = [];
     foreach ($object->getOneOf() as $oneOf) {
         $oneOfName = $name . 'Sub';
         $oneOfResolved = $oneOf;
         if ($oneOf instanceof Reference) {
             $oneOfName = array_pop(explode('/', $oneOf->getFragment()));
             $oneOfResolved = $this->resolver->resolve($oneOf);
         }
         $merged = $this->jsonSchemaMerger->merge($object, $oneOfResolved);
         $classes = array_merge($classes, $this->chainGuesser->guessClass($merged, $oneOfName));
         if ($oneOf instanceof Reference) {
             $oneOf->setResolved($merged);
         }
     }
     return $classes;
 }