Skip to content

Commit

Permalink
Introduced normalizers for Generator state
Browse files Browse the repository at this point in the history
  • Loading branch information
Steveb-p committed Oct 8, 2024
1 parent 26fd4bb commit 264eb4f
Show file tree
Hide file tree
Showing 3 changed files with 23 additions and 3 deletions.
12 changes: 11 additions & 1 deletion src/lib/Output/Generator/Data/ArrayList.php
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ final class ArrayList extends \ArrayObject

public function __construct(
string $name,
?object $parent = null
object $parent
) {
$this->name = $name;
$this->parent = $parent;
Expand All @@ -29,4 +29,14 @@ public function getParent(): object
{
return $this->parent;
}

public function getName(): string
{
return $this->name;
}

public function setName(string $name): void
{
$this->name = $name;
}
}
3 changes: 3 additions & 0 deletions src/lib/Output/Generator/Json.php
Original file line number Diff line number Diff line change
Expand Up @@ -145,6 +145,9 @@ public function startObjectElement($name, $mediaTypeName = null)

if ($this->json instanceof Json\ArrayObject || $this->json instanceof Data\ArrayList) {
$this->json->append($object);
if ($this->json instanceof Data\ArrayList) {
$this->json->setName($name);
}
$this->json = $object;
} else {
$this->json->$name = $object;
Expand Down
11 changes: 9 additions & 2 deletions src/lib/Output/Normalizer/JsonObjectNormalizer.php
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@

namespace Ibexa\Rest\Output\Normalizer;

use Ibexa\Rest\Output\Generator\Data\ArrayList;
use Ibexa\Rest\Output\Generator\Json\JsonObject;
use Symfony\Component\Serializer\Normalizer\NormalizerAwareInterface;
use Symfony\Component\Serializer\Normalizer\NormalizerAwareTrait;
Expand All @@ -25,8 +26,14 @@ public function normalize($object, ?string $format = null, array $context = []):
{
$vars = get_object_vars($object);

foreach ($vars as $name => $value) {
$vars[$name] = $this->normalizer->normalize($value, $format, $context);
foreach ($vars as $key => $value) {
if ($value instanceof ArrayList) {
$name = $value->getName();
unset($vars[$key]);
$vars[$name] = $this->normalizer->normalize($value, $format, $context);
} else {
$vars[$key] = $this->normalizer->normalize($value, $format, $context);
}
}

return $vars;
Expand Down

0 comments on commit 264eb4f

Please sign in to comment.