Skip to content

Commit

Permalink
Add DenormalizationFieldMappingFactoryFactory
Browse files Browse the repository at this point in the history
  • Loading branch information
dominikzogg committed Dec 30, 2023
1 parent 615c6a7 commit 668a07f
Show file tree
Hide file tree
Showing 9 changed files with 131 additions and 8 deletions.
16 changes: 9 additions & 7 deletions README.md
Expand Up @@ -43,7 +43,7 @@ A simple deserialization.
Through [Composer](http://getcomposer.org) as [chubbyphp/chubbyphp-deserialization][1].

```sh
composer require chubbyphp/chubbyphp-deserialization "^4.0"
composer require chubbyphp/chubbyphp-deserialization "^4.1"
```

## Usage
Expand Down Expand Up @@ -182,9 +182,10 @@ echo $model->getName();

#### chubbyphp-laminas-config-factory

* [DenormalizerFactory][41]
* [DenormalizerObjectMappingRegistryFactory][42]
* [DeserializerFactory][43]
* [DenormalizationFieldMappingFactoryFactory][41]
* [DenormalizerFactory][42]
* [DenormalizerObjectMappingRegistryFactory][43]
* [DeserializerFactory][44]

### ServiceProvider

Expand Down Expand Up @@ -237,6 +238,7 @@ echo $model->getName();

[34]: doc/ServiceProvider/DeserializationServiceProvider.md

[41]: doc/ServiceFactory/DenormalizerFactory.md
[42]: doc/ServiceFactory/DenormalizerObjectMappingRegistryFactory.md
[43]: doc/ServiceFactory/DeserializerFactory.md
[41]: doc/ServiceFactory/DenormalizationFieldMappingFactoryFactory.md
[42]: doc/ServiceFactory/DenormalizerFactory.md
[43]: doc/ServiceFactory/DenormalizerObjectMappingRegistryFactory.md
[44]: doc/ServiceFactory/DeserializerFactory.md
2 changes: 1 addition & 1 deletion composer.json
Expand Up @@ -50,7 +50,7 @@
},
"extra": {
"branch-alias": {
"dev-master": "4.0-dev"
"dev-master": "4.1-dev"
}
},
"scripts": {
Expand Down
39 changes: 39 additions & 0 deletions doc/ServiceFactory/DenormalizationFieldMappingFactoryFactory.md
@@ -0,0 +1,39 @@
# DenormalizationFieldMappingFactoryFactory

## without name (default)

```php
<?php

use Chubbyphp\Deserialization\Decoder\TypeDecoderInterface;
use Chubbyphp\Deserialization\ServiceFactory\DenormalizationFieldMappingFactoryFactory;
use Psr\Container\ContainerInterface;

/** @var ContainerInterface $container */
$container = ...;

// $container->get(TypeDecoderInterface::class.'[]')

$factory = new DenormalizationFieldMappingFactoryFactory();

$decoder = $factory($container);
```

## with name `default`

```php
<?php

use Chubbyphp\Deserialization\Decoder\TypeDecoderInterface;
use Chubbyphp\Deserialization\ServiceFactory\DenormalizationFieldMappingFactoryFactory;
use Psr\Container\ContainerInterface;

/** @var ContainerInterface $container */
$container = ...;

// $container->get(TypeDecoderInterface::class.'[]default')

$factory = [DenormalizationFieldMappingFactoryFactory::class, 'default'];

$decoder = $factory($container);
```
18 changes: 18 additions & 0 deletions src/ServiceFactory/DenormalizationFieldMappingFactoryFactory.php
@@ -0,0 +1,18 @@
<?php

declare(strict_types=1);

namespace Chubbyphp\Deserialization\ServiceFactory;

use Chubbyphp\Deserialization\Mapping\DenormalizationFieldMappingFactory;
use Chubbyphp\Deserialization\Mapping\DenormalizationFieldMappingFactoryInterface;
use Chubbyphp\Laminas\Config\Factory\AbstractFactory;
use Psr\Container\ContainerInterface;

final class DenormalizationFieldMappingFactoryFactory extends AbstractFactory
{
public function __invoke(ContainerInterface $container): DenormalizationFieldMappingFactoryInterface
{
return new DenormalizationFieldMappingFactory();
}
}
2 changes: 2 additions & 0 deletions src/ServiceFactory/DeserializationServiceFactory.php
Expand Up @@ -8,6 +8,7 @@
use Chubbyphp\Deserialization\Denormalizer\Denormalizer;
use Chubbyphp\Deserialization\Denormalizer\DenormalizerObjectMappingRegistry;
use Chubbyphp\Deserialization\Deserializer;
use Chubbyphp\Deserialization\Mapping\DenormalizationFieldMappingFactory;
use Psr\Container\ContainerInterface;

final class DeserializationServiceFactory
Expand All @@ -28,6 +29,7 @@ public function __invoke(): array
$container->get('deserializer.denormalizer.objectmappingregistry'),
$container->has('logger') ? $container->get('logger') : null
),
'deserializer.denormalizer.fieldmappingfactory' => static fn () => new DenormalizationFieldMappingFactory(),
'deserializer.denormalizer.objectmappingregistry' => static fn (ContainerInterface $container) => new DenormalizerObjectMappingRegistry(
$container->get('deserializer.denormalizer.objectmappings')
),
Expand Down
3 changes: 3 additions & 0 deletions src/ServiceProvider/DeserializationServiceProvider.php
Expand Up @@ -8,6 +8,7 @@
use Chubbyphp\Deserialization\Denormalizer\Denormalizer;
use Chubbyphp\Deserialization\Denormalizer\DenormalizerObjectMappingRegistry;
use Chubbyphp\Deserialization\Deserializer;
use Chubbyphp\Deserialization\Mapping\DenormalizationFieldMappingFactory;
use Pimple\Container;
use Pimple\ServiceProviderInterface;

Expand All @@ -26,6 +27,8 @@ public function register(Container $container): void
$container['logger'] ?? null
);

$container['deserializer.denormalizer.fieldmappingfactory'] = static fn () => new DenormalizationFieldMappingFactory();

$container['deserializer.denormalizer.objectmappingregistry'] = static fn () => new DenormalizerObjectMappingRegistry($container['deserializer.denormalizer.objectmappings']);

$container['deserializer.denormalizer.objectmappings'] = static fn () => [];
Expand Down
@@ -0,0 +1,45 @@
<?php

declare(strict_types=1);

namespace Chubbyphp\Tests\Deserialization\Unit\ServiceFactory;

use Chubbyphp\Deserialization\Mapping\DenormalizationFieldMappingFactoryInterface;
use Chubbyphp\Deserialization\ServiceFactory\DenormalizationFieldMappingFactoryFactory;
use Chubbyphp\Mock\MockByCallsTrait;
use PHPUnit\Framework\TestCase;
use Psr\Container\ContainerInterface;

/**
* @covers \Chubbyphp\Deserialization\ServiceFactory\DenormalizationFieldMappingFactoryFactory
*
* @internal
*/
final class DenormalizationFieldMappingFactoryFactoryTest extends TestCase
{
use MockByCallsTrait;

public function testInvoke(): void
{
/** @var ContainerInterface $container */
$container = $this->getMockByCalls(ContainerInterface::class, []);

$factory = new DenormalizationFieldMappingFactoryFactory();

$service = $factory($container);

self::assertInstanceOf(DenormalizationFieldMappingFactoryInterface::class, $service);
}

public function testCallStatic(): void
{
/** @var ContainerInterface $container */
$container = $this->getMockByCalls(ContainerInterface::class, []);

$factory = [DenormalizationFieldMappingFactoryFactory::class, 'default'];

$service = $factory($container);

self::assertInstanceOf(DenormalizationFieldMappingFactoryInterface::class, $service);
}
}
Expand Up @@ -9,6 +9,7 @@
use Chubbyphp\Deserialization\Denormalizer\Denormalizer;
use Chubbyphp\Deserialization\Denormalizer\DenormalizerObjectMappingRegistry;
use Chubbyphp\Deserialization\Deserializer;
use Chubbyphp\Deserialization\Mapping\DenormalizationFieldMappingFactory;
use Chubbyphp\Deserialization\ServiceFactory\DeserializationServiceFactory;
use Chubbyphp\Mock\MockByCallsTrait;
use PHPUnit\Framework\MockObject\MockObject;
Expand Down Expand Up @@ -36,6 +37,7 @@ public function testRegister(): void
self::assertTrue($container->has('deserializer.decodertypes'));

self::assertTrue($container->has('deserializer.denormalizer'));
self::assertTrue($container->has('deserializer.denormalizer.fieldmappingfactory'));
self::assertTrue($container->has('deserializer.denormalizer.objectmappingregistry'));
self::assertTrue($container->has('deserializer.denormalizer.objectmappings'));

Expand All @@ -44,6 +46,11 @@ public function testRegister(): void
self::assertInstanceOf(Decoder::class, $container->get('deserializer.decoder'));
self::assertIsArray($container->get('deserializer.decodertypes'));

self::assertInstanceOf(
DenormalizationFieldMappingFactory::class,
$container->get('deserializer.denormalizer.fieldmappingfactory')
);

self::assertInstanceOf(
DenormalizerObjectMappingRegistry::class,
$container->get('deserializer.denormalizer.objectmappingregistry')
Expand Down
Expand Up @@ -8,6 +8,7 @@
use Chubbyphp\Deserialization\Denormalizer\Denormalizer;
use Chubbyphp\Deserialization\Denormalizer\DenormalizerObjectMappingRegistry;
use Chubbyphp\Deserialization\Deserializer;
use Chubbyphp\Deserialization\Mapping\DenormalizationFieldMappingFactory;
use Chubbyphp\Deserialization\ServiceProvider\DeserializationServiceProvider;
use Chubbyphp\Mock\MockByCallsTrait;
use PHPUnit\Framework\MockObject\MockObject;
Expand Down Expand Up @@ -36,6 +37,7 @@ public function testRegister(): void
self::assertTrue(isset($container['deserializer.decodertypes']));

self::assertTrue(isset($container['deserializer.denormalizer']));
self::assertTrue(isset($container['deserializer.denormalizer.fieldmappingfactory']));
self::assertTrue(isset($container['deserializer.denormalizer.objectmappingregistry']));
self::assertTrue(isset($container['deserializer.denormalizer.objectmappings']));

Expand All @@ -44,6 +46,11 @@ public function testRegister(): void
self::assertInstanceOf(Decoder::class, $container['deserializer.decoder']);
self::assertIsArray($container['deserializer.decodertypes']);

self::assertInstanceOf(
DenormalizationFieldMappingFactory::class,
$container['deserializer.denormalizer.fieldmappingfactory']
);

self::assertInstanceOf(
DenormalizerObjectMappingRegistry::class,
$container['deserializer.denormalizer.objectmappingregistry']
Expand Down

0 comments on commit 668a07f

Please sign in to comment.