/** * @param ModelTransformerInterface $modelTransformer * @param int $priority * * @return $this|ModelTransformerInterface * * @throws \RuntimeException */ public function addModelTransformer($modelTransformer, $priority = 0) { if (!($modelTransformer instanceof ModelTransformerInterface || $modelTransformer instanceof ContextualModelTransformerInterface || $modelTransformer instanceof ObjectTransformerInterface)) { throw new \RuntimeException(sprintf('Model transformer should be an instance of "%s", "%s" or "%s"', ModelTransformerInterface::class, ContextualModelTransformerInterface::class, ObjectTransformerInterface::class)); } if ($modelTransformer instanceof ObjectTransformerInterface) { if (!isset($this->objectTransformers[$modelTransformer->getSupportedClass()])) { $this->objectTransformers[$modelTransformer->getSupportedClass()] = []; } if (!isset($this->objectTransformers[$modelTransformer->getSupportedClass()][$modelTransformer->getTargetClass()])) { $this->objectTransformers[$modelTransformer->getSupportedClass()][$modelTransformer->getTargetClass()] = []; } $this->objectTransformers[$modelTransformer->getSupportedClass()][$modelTransformer->getTargetClass()][$priority] = $modelTransformer; unset($this->sortedObjectTransformers); return $this; } if (!isset($this->modelTransformers[$priority])) { $this->modelTransformers[$priority] = []; } $this->modelTransformers[$priority][] = $modelTransformer; unset($this->sortedModelTransformers); return $this; }
public function it_should_find_and_return_supported_model_transformer(ModelTransformerInterface $notSupportedModelTransformer, ModelTransformerInterface $supportedModelTransformer) { $notSupportedModelTransformer->supports(new \stdClass(), SomeClass::class)->willReturn(false); $supportedModelTransformer->supports(new \stdClass(), SomeClass::class)->willReturn(true); $this->addModelTransformer($notSupportedModelTransformer); $this->addModelTransformer($supportedModelTransformer); $this->findSupportedModelTransformer(new \stdClass(), SomeClass::class)->shouldBe($supportedModelTransformer); }