Loading CHANGELOG.md +4 −0 Original line number Diff line number Diff line Changelog ========= 7.2.1 ----- - Extraction d'un trait ColumnValueFilterConfigFactoryTrait permettant de configurer des filtres de colonnes pour autre chose qu'un import. 7.2.0 ----- - Suppression de la dépendance avec unicaen/app, et avec laminas/laminas-dependency-plugin. Loading src/UnicaenDbImport/Config/ColumnValueFilterConfigFactoryTrait.php 0 → 100644 +84 −0 Original line number Diff line number Diff line <?php namespace UnicaenDbImport\Config; use Assert\Assertion; use Assert\AssertionFailedException; use Psr\Container\ContainerInterface; use UnicaenDbImport\Filter\ColumnValue\ColumnValueFilterInterface; use UnicaenDbImport\Filter\ColumnValue\SameColumnValueFilter; trait ColumnValueFilterConfigFactoryTrait { /** * Instancie les éventuels {@see ColumnValueFilterInterface} spécifiés dans la config, dans la clé de config spécifié. * Un {@see ContainerInterface} doit être fourni pour obtenir les éventuels filtres spécifiés via un nom de service. * * @return \UnicaenDbImport\Filter\ColumnValue\ColumnValueFilterInterface[] * * @throws \Psr\Container\ContainerExceptionInterface * @throws \Psr\Container\NotFoundExceptionInterface * @throws \UnicaenDbImport\Config\ConfigException */ protected function getColumnValueFilters(array $sourceConfig, string $key, ContainerInterface $container): array { $columnValueFilter = $sourceConfig[$key] ?? []; $filterInstances = []; foreach ((array)$columnValueFilter as $nameOrIndex => $spec) { try { $filterInstance = $this->getColumnValueFilter($spec, $container); } catch (ConfigException $e) { throw ConfigException::invalidValueForKey($key, null, $e); } if ($filterInstance === NULL) { throw ConfigException::invalidValueForKey($key); } $filterInstances[$nameOrIndex] = $filterInstance; } return $filterInstances; } /** * @throws \Psr\Container\NotFoundExceptionInterface * @throws \Psr\Container\ContainerExceptionInterface * @throws \UnicaenDbImport\Config\ConfigException */ protected function getColumnValueFilter(ColumnValueFilterInterface|string|array $spec, ContainerInterface $container): ?ColumnValueFilterInterface { $filterInstance = NULL; if (is_array($spec)) { try { Assertion::keyExists($spec, $key = 'name'); } catch (AssertionFailedException $e) { throw ConfigException::missingKey($key); } $filterInstance = $this->getColumnValueFilter($spec[$key], $container); $filterParams = $spec['params'] ?? []; $filterInstance->setParams($filterParams); } elseif (is_string($spec)) { if ($container->has($spec)) { $filterInstance = $container->get($spec); if (!$filterInstance instanceof ColumnValueFilterInterface) { throw ConfigException::invalidValue($spec, "service implémentant " . ColumnValueFilterInterface::class); } } elseif (class_exists($spec)) { $filterInstance = new $spec(); if (!$filterInstance instanceof ColumnValueFilterInterface) { throw ConfigException::invalidValue($spec, "instance de type " . ColumnValueFilterInterface::class); } } else { $filterInstance = new SameColumnValueFilter(['column' => $spec]); } } elseif ($spec instanceof ColumnValueFilterInterface) { $filterInstance = $spec; } return $filterInstance; } } No newline at end of file src/UnicaenDbImport/Config/ConfigFactory.php +6 −61 Original line number Diff line number Diff line Loading @@ -13,11 +13,11 @@ use UnicaenDbImport\Domain\Source; use UnicaenDbImport\Domain\Synchro; use UnicaenDbImport\Filter\ColumnName\ArrayMapColumnNameFilter; use UnicaenDbImport\Filter\ColumnName\ColumnNameFilterInterface; use UnicaenDbImport\Filter\ColumnValue\ColumnValueFilterInterface; use UnicaenDbImport\Filter\ColumnValue\SameColumnValueFilter; class ConfigFactory { use ColumnValueFilterConfigFactoryTrait; const CONFIG_ROOT_KEY = 'import'; /** Loading Loading @@ -320,8 +320,8 @@ class ConfigFactory $connectionName = $sourceConfig['connection']; $sourceConfig['connection'] = $this->getConnectionByName($connectionName); $sourceConfig['computed_columns'] = $this->getColumnValueFilterInstances($sourceConfig, 'computed_columns'); $sourceConfig['column_value_filter'] = $this->getColumnValueFilterInstances($sourceConfig, 'column_value_filter'); $sourceConfig['computed_columns'] = $this->getColumnValueFilterInstances($sourceConfig, 'computed_columns', $this->container); $sourceConfig['column_value_filter'] = $this->getColumnValueFilterInstances($sourceConfig, 'column_value_filter', $this->container); $columnNameFilter = $sourceConfig['column_name_filter'] ?? null; if ($columnNameFilter !== null) { Loading @@ -343,7 +343,7 @@ class ConfigFactory $connectionName = $destinationConfig['connection']; $destinationConfig['connection'] = $this->getConnectionByName($connectionName); $destinationConfig['column_value_filter'] = $this->getColumnValueFilterInstances($destinationConfig, 'column_value_filter'); $destinationConfig['column_value_filter'] = $this->getColumnValueFilterInstances($destinationConfig, 'column_value_filter', $this->container); return Destination::fromConfig($destinationConfig); } Loading Loading @@ -522,61 +522,6 @@ class ConfigFactory */ private function getColumnValueFilterInstances(array $sourceConfig, string $key): array { $columnValueFilter = $sourceConfig[$key] ?? []; $filterInstances = []; foreach ((array) $columnValueFilter as $nameOrIndex => $spec) { try { $filterInstance = $this->getFilterInstance($spec); } catch (ConfigException $e) { throw ConfigException::invalidValueForKey($key, null, $e); } if ($filterInstance === NULL) { throw ConfigException::invalidValueForKey($key); } $filterInstances[$nameOrIndex] = $filterInstance; } return $filterInstances; } /** * @param string|ColumnValueFilterInterface $spec * @throws \Psr\Container\ContainerExceptionInterface * @throws \Psr\Container\NotFoundExceptionInterface * @throws \UnicaenDbImport\Config\ConfigException */ private function getFilterInstance($spec): ?ColumnValueFilterInterface { $filterInstance = NULL; if (is_array($spec)) { try { Assertion::keyExists($spec, $key = 'name'); } catch (AssertionFailedException $e) { throw ConfigException::missingKey($key); } $filterInstance = $this->getFilterInstance($spec[$key]); $filterParams = $spec['params'] ?? []; $filterInstance->setParams($filterParams); } elseif (is_string($spec)) { if ($this->container->has($spec)) { $filterInstance = $this->container->get($spec); if (!$filterInstance instanceof ColumnValueFilterInterface) { throw ConfigException::invalidValue($spec, "service implémentant " . ColumnValueFilterInterface::class); } } elseif (class_exists($spec)) { $filterInstance = new $spec; if (!$filterInstance instanceof ColumnValueFilterInterface) { throw ConfigException::invalidValue($spec, "instance de type " . ColumnValueFilterInterface::class); } } else { $filterInstance = new SameColumnValueFilter(['column' => $spec]); } } elseif ($spec instanceof ColumnValueFilterInterface) { $filterInstance = $spec; } return $filterInstance; return $this->getColumnValueFilters($sourceConfig, $key, $this->container); } } No newline at end of file Loading
CHANGELOG.md +4 −0 Original line number Diff line number Diff line Changelog ========= 7.2.1 ----- - Extraction d'un trait ColumnValueFilterConfigFactoryTrait permettant de configurer des filtres de colonnes pour autre chose qu'un import. 7.2.0 ----- - Suppression de la dépendance avec unicaen/app, et avec laminas/laminas-dependency-plugin. Loading
src/UnicaenDbImport/Config/ColumnValueFilterConfigFactoryTrait.php 0 → 100644 +84 −0 Original line number Diff line number Diff line <?php namespace UnicaenDbImport\Config; use Assert\Assertion; use Assert\AssertionFailedException; use Psr\Container\ContainerInterface; use UnicaenDbImport\Filter\ColumnValue\ColumnValueFilterInterface; use UnicaenDbImport\Filter\ColumnValue\SameColumnValueFilter; trait ColumnValueFilterConfigFactoryTrait { /** * Instancie les éventuels {@see ColumnValueFilterInterface} spécifiés dans la config, dans la clé de config spécifié. * Un {@see ContainerInterface} doit être fourni pour obtenir les éventuels filtres spécifiés via un nom de service. * * @return \UnicaenDbImport\Filter\ColumnValue\ColumnValueFilterInterface[] * * @throws \Psr\Container\ContainerExceptionInterface * @throws \Psr\Container\NotFoundExceptionInterface * @throws \UnicaenDbImport\Config\ConfigException */ protected function getColumnValueFilters(array $sourceConfig, string $key, ContainerInterface $container): array { $columnValueFilter = $sourceConfig[$key] ?? []; $filterInstances = []; foreach ((array)$columnValueFilter as $nameOrIndex => $spec) { try { $filterInstance = $this->getColumnValueFilter($spec, $container); } catch (ConfigException $e) { throw ConfigException::invalidValueForKey($key, null, $e); } if ($filterInstance === NULL) { throw ConfigException::invalidValueForKey($key); } $filterInstances[$nameOrIndex] = $filterInstance; } return $filterInstances; } /** * @throws \Psr\Container\NotFoundExceptionInterface * @throws \Psr\Container\ContainerExceptionInterface * @throws \UnicaenDbImport\Config\ConfigException */ protected function getColumnValueFilter(ColumnValueFilterInterface|string|array $spec, ContainerInterface $container): ?ColumnValueFilterInterface { $filterInstance = NULL; if (is_array($spec)) { try { Assertion::keyExists($spec, $key = 'name'); } catch (AssertionFailedException $e) { throw ConfigException::missingKey($key); } $filterInstance = $this->getColumnValueFilter($spec[$key], $container); $filterParams = $spec['params'] ?? []; $filterInstance->setParams($filterParams); } elseif (is_string($spec)) { if ($container->has($spec)) { $filterInstance = $container->get($spec); if (!$filterInstance instanceof ColumnValueFilterInterface) { throw ConfigException::invalidValue($spec, "service implémentant " . ColumnValueFilterInterface::class); } } elseif (class_exists($spec)) { $filterInstance = new $spec(); if (!$filterInstance instanceof ColumnValueFilterInterface) { throw ConfigException::invalidValue($spec, "instance de type " . ColumnValueFilterInterface::class); } } else { $filterInstance = new SameColumnValueFilter(['column' => $spec]); } } elseif ($spec instanceof ColumnValueFilterInterface) { $filterInstance = $spec; } return $filterInstance; } } No newline at end of file
src/UnicaenDbImport/Config/ConfigFactory.php +6 −61 Original line number Diff line number Diff line Loading @@ -13,11 +13,11 @@ use UnicaenDbImport\Domain\Source; use UnicaenDbImport\Domain\Synchro; use UnicaenDbImport\Filter\ColumnName\ArrayMapColumnNameFilter; use UnicaenDbImport\Filter\ColumnName\ColumnNameFilterInterface; use UnicaenDbImport\Filter\ColumnValue\ColumnValueFilterInterface; use UnicaenDbImport\Filter\ColumnValue\SameColumnValueFilter; class ConfigFactory { use ColumnValueFilterConfigFactoryTrait; const CONFIG_ROOT_KEY = 'import'; /** Loading Loading @@ -320,8 +320,8 @@ class ConfigFactory $connectionName = $sourceConfig['connection']; $sourceConfig['connection'] = $this->getConnectionByName($connectionName); $sourceConfig['computed_columns'] = $this->getColumnValueFilterInstances($sourceConfig, 'computed_columns'); $sourceConfig['column_value_filter'] = $this->getColumnValueFilterInstances($sourceConfig, 'column_value_filter'); $sourceConfig['computed_columns'] = $this->getColumnValueFilterInstances($sourceConfig, 'computed_columns', $this->container); $sourceConfig['column_value_filter'] = $this->getColumnValueFilterInstances($sourceConfig, 'column_value_filter', $this->container); $columnNameFilter = $sourceConfig['column_name_filter'] ?? null; if ($columnNameFilter !== null) { Loading @@ -343,7 +343,7 @@ class ConfigFactory $connectionName = $destinationConfig['connection']; $destinationConfig['connection'] = $this->getConnectionByName($connectionName); $destinationConfig['column_value_filter'] = $this->getColumnValueFilterInstances($destinationConfig, 'column_value_filter'); $destinationConfig['column_value_filter'] = $this->getColumnValueFilterInstances($destinationConfig, 'column_value_filter', $this->container); return Destination::fromConfig($destinationConfig); } Loading Loading @@ -522,61 +522,6 @@ class ConfigFactory */ private function getColumnValueFilterInstances(array $sourceConfig, string $key): array { $columnValueFilter = $sourceConfig[$key] ?? []; $filterInstances = []; foreach ((array) $columnValueFilter as $nameOrIndex => $spec) { try { $filterInstance = $this->getFilterInstance($spec); } catch (ConfigException $e) { throw ConfigException::invalidValueForKey($key, null, $e); } if ($filterInstance === NULL) { throw ConfigException::invalidValueForKey($key); } $filterInstances[$nameOrIndex] = $filterInstance; } return $filterInstances; } /** * @param string|ColumnValueFilterInterface $spec * @throws \Psr\Container\ContainerExceptionInterface * @throws \Psr\Container\NotFoundExceptionInterface * @throws \UnicaenDbImport\Config\ConfigException */ private function getFilterInstance($spec): ?ColumnValueFilterInterface { $filterInstance = NULL; if (is_array($spec)) { try { Assertion::keyExists($spec, $key = 'name'); } catch (AssertionFailedException $e) { throw ConfigException::missingKey($key); } $filterInstance = $this->getFilterInstance($spec[$key]); $filterParams = $spec['params'] ?? []; $filterInstance->setParams($filterParams); } elseif (is_string($spec)) { if ($this->container->has($spec)) { $filterInstance = $this->container->get($spec); if (!$filterInstance instanceof ColumnValueFilterInterface) { throw ConfigException::invalidValue($spec, "service implémentant " . ColumnValueFilterInterface::class); } } elseif (class_exists($spec)) { $filterInstance = new $spec; if (!$filterInstance instanceof ColumnValueFilterInterface) { throw ConfigException::invalidValue($spec, "instance de type " . ColumnValueFilterInterface::class); } } else { $filterInstance = new SameColumnValueFilter(['column' => $spec]); } } elseif ($spec instanceof ColumnValueFilterInterface) { $filterInstance = $spec; } return $filterInstance; return $this->getColumnValueFilters($sourceConfig, $key, $this->container); } } No newline at end of file