Skip to content

Commit

Permalink
Merge pull request #5 from sagikazarmark/serializer_aware
Browse files Browse the repository at this point in the history
Add serializer aware capabilities
  • Loading branch information
henrikbjorn committed May 3, 2016
2 parents 4d7352e + 62fc35e commit bbf3e49
Show file tree
Hide file tree
Showing 2 changed files with 42 additions and 1 deletion.
24 changes: 24 additions & 0 deletions spec/Normalt/Normalizer/AggregateNormalizerSpec.php
Original file line number Diff line number Diff line change
Expand Up @@ -87,4 +87,28 @@ function it_sets_itself_as_marshaller_if_marshaller_aware($normalizer)
$this->normalize('data');
$this->denormalize('data', 'string');
}

function it_is_serializer_aware()
{
$this->shouldImplement('Symfony\Component\Serializer\SerializerAwareInterface');
}

/**
* @param Symfony\Component\Serializer\Normalizer\NormalizerInterface $normalizer
* @param Symfony\Component\Serializer\Normalizer\NormalizerInterface $denormaNormalizer
* @param Symfony\Component\Serializer\SerializerInterface $serializer
*/
function it_sets_the_serializer_if_one_of_the_normalizers_is_serializer_aware($normalizer, $denormaNormalizer, $serializer)
{
$normalizer->implement('Symfony\Component\Serializer\SerializerAwareInterface');
$denormaNormalizer->implement('Symfony\Component\Serializer\SerializerAwareInterface');
$denormaNormalizer->implement('Symfony\Component\Serializer\Normalizer\DenormalizerInterface');

$normalizer->setSerializer($serializer)->shouldBeCalled();
$denormaNormalizer->setSerializer($serializer)->shouldBeCalledTimes(2);

$this->beConstructedWith(array($normalizer, $denormaNormalizer));

$this->setSerializer($serializer);
}
}
19 changes: 18 additions & 1 deletion src/Normalizer/AggregateNormalizer.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@

use Symfony\Component\Serializer\Normalizer\NormalizerInterface;
use Symfony\Component\Serializer\Normalizer\DenormalizerInterface;
use Symfony\Component\Serializer\SerializerAwareInterface;
use Symfony\Component\Serializer\SerializerInterface;
use UnexpectedValueException;

/**
Expand All @@ -13,7 +15,7 @@
*
* @package Normalt
*/
class AggregateNormalizer implements NormalizerInterface, DenormalizerInterface
class AggregateNormalizer implements NormalizerInterface, DenormalizerInterface, SerializerAwareInterface
{
protected $normalizers = array();
protected $denormalizers = array();
Expand Down Expand Up @@ -51,6 +53,21 @@ public function supportsDenormalization($data, $type, $format = null)
return (boolean) $this->getDenormalizer($data, $type, $format);
}

public function setSerializer(SerializerInterface $serializer)
{
foreach ($this->normalizers as $normalizer) {
if ($normalizer instanceof SerializerAwareInterface) {
$normalizer->setSerializer($serializer);
}
}

foreach ($this->denormalizers as $normalizer) {
if ($normalizer instanceof SerializerAwareInterface) {
$normalizer->setSerializer($serializer);
}
}
}

protected function getNormalizer($data, $format = null)
{
foreach ($this->normalizers as $normalizer) {
Expand Down

0 comments on commit bbf3e49

Please sign in to comment.