diff --git a/.docker/compose.yaml b/.docker/compose.yaml new file mode 100644 index 00000000..bc72ae34 --- /dev/null +++ b/.docker/compose.yaml @@ -0,0 +1,14 @@ +x-build-args: &build-args + UID: "${UID:-1000}" + GID: "${GID:-1000}" + +name: cleverage-process-bundle + +services: + php: + build: + context: php + args: + <<: *build-args + volumes: + - ../:/var/www diff --git a/.docker/php/Dockerfile b/.docker/php/Dockerfile new file mode 100644 index 00000000..f98c3ba0 --- /dev/null +++ b/.docker/php/Dockerfile @@ -0,0 +1,29 @@ +FROM php:8.2-fpm-alpine + +ARG UID +ARG GID + +RUN mv "$PHP_INI_DIR/php.ini-development" "$PHP_INI_DIR/php.ini" +COPY /conf.d/ "$PHP_INI_DIR/conf.d/" + +RUN apk update && apk add \ + tzdata \ + shadow \ + nano \ + bash \ + icu-dev \ + && docker-php-ext-configure intl \ + && docker-php-ext-install intl opcache \ + && docker-php-ext-enable opcache + +RUN ln -s /usr/share/zoneinfo/Europe/Paris /etc/localtime \ + && sed -i "s/^;date.timezone =.*/date.timezone = Europe\/Paris/" $PHP_INI_DIR/php.ini + +COPY --from=composer:2 /usr/bin/composer /usr/bin/composer + +RUN usermod -u $UID www-data \ + && groupmod -g $GID www-data + +USER www-data:www-data + +WORKDIR /var/www diff --git a/.docker/php/conf.d/dev.ini b/.docker/php/conf.d/dev.ini new file mode 100644 index 00000000..2a141bea --- /dev/null +++ b/.docker/php/conf.d/dev.ini @@ -0,0 +1,5 @@ +display_errors = 1 +error_reporting = E_ALL + +opcache.validate_timestamps = 1 +opcache.revalidate_freq = 0 diff --git a/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md similarity index 100% rename from ISSUE_TEMPLATE.md rename to .github/ISSUE_TEMPLATE.md diff --git a/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md similarity index 100% rename from PULL_REQUEST_TEMPLATE.md rename to .github/PULL_REQUEST_TEMPLATE.md diff --git a/.github/workflows/notifications.yml b/.github/workflows/notifications.yml index 00aa3926..dc3d0581 100644 --- a/.github/workflows/notifications.yml +++ b/.github/workflows/notifications.yml @@ -13,10 +13,10 @@ jobs: steps: - name: Get the tag short reference id: get_tag - run: echo ::set-output name=TAG::${GITHUB_REF/refs\/tags\//} + run: echo "TAG=${GITHUB_REF/refs\/tags\//}" >> $GITHUB_OUTPUT - name: Rocket.Chat Notification - uses: RocketChat/Rocket.Chat.GitHub.Action.Notification@1.1.1 + uses: madalozzo/Rocket.Chat.GitHub.Action.Notification@master with: type: success job_name: "[cleverage/process-bundle](https://github.com/cleverage/process-bundle) : ${{ steps.get_tag.outputs.TAG }} has been released" diff --git a/.github/workflows/quality.yml b/.github/workflows/quality.yml new file mode 100644 index 00000000..9f1580fe --- /dev/null +++ b/.github/workflows/quality.yml @@ -0,0 +1,62 @@ +name: Quality + +on: + push: + branches: + - main + pull_request: + +permissions: + contents: read + +jobs: + phpstan: + name: PHPStan + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + - name: Install PHP with extensions + uses: shivammathur/setup-php@v2 + with: + php-version: '8.2' + coverage: none + tools: composer:v2 + - name: Install Composer dependencies (locked) + uses: ramsey/composer-install@v3 + - name: PHPStan + run: vendor/bin/phpstan --no-progress --memory-limit=1G analyse --error-format=github + + php-cs-fixer: + name: PHP-CS-Fixer + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + - name: Install PHP with extensions + uses: shivammathur/setup-php@v2 + with: + php-version: '8.2' + coverage: none + tools: composer:v2 + - name: Install Composer dependencies (locked) + uses: ramsey/composer-install@v3 + - name: PHP-CS-Fixer + run: vendor/bin/php-cs-fixer fix --diff --dry-run --show-progress=none + + rector: + name: Rector + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@v4 + - name: Install PHP with extensions + uses: shivammathur/setup-php@v2 + with: + php-version: '8.2' + coverage: none + tools: composer:v2 + - name: Install Composer dependencies (locked) + uses: ramsey/composer-install@v3 + - name: Rector + run: vendor/bin/rector --no-progress-bar --dry-run diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml new file mode 100644 index 00000000..2d7e7a41 --- /dev/null +++ b/.github/workflows/test.yml @@ -0,0 +1,74 @@ +name: Test + +on: + push: + branches: + - main + pull_request: + +permissions: + contents: read + +jobs: + test: + name: PHP ${{ matrix.php-version }} + ${{ matrix.dependencies }} + ${{ matrix.variant }} + runs-on: ubuntu-latest + continue-on-error: ${{ matrix.allowed-to-fail }} + env: + SYMFONY_REQUIRE: ${{matrix.symfony-require}} + + strategy: + matrix: + php-version: + - '8.2' + - '8.3' + dependencies: [highest] + allowed-to-fail: [false] + symfony-require: [''] + variant: [normal] + include: + - php-version: '8.2' + dependencies: highest + allowed-to-fail: false + symfony-require: 6.4.* + variant: symfony/symfony:"6.4.*" + - php-version: '8.2' + dependencies: highest + allowed-to-fail: false + symfony-require: 7.1.* + variant: symfony/symfony:"7.1.*" + - php-version: '8.3' + dependencies: highest + allowed-to-fail: false + symfony-require: 6.4.* + variant: symfony/symfony:"6.4.*" + - php-version: '8.3' + dependencies: highest + allowed-to-fail: false + symfony-require: 7.1.* + variant: symfony/symfony:"7.1.*" + + steps: + - name: Checkout + uses: actions/checkout@v4 + - name: Install PHP with extensions + uses: shivammathur/setup-php@v2 + with: + php-version: ${{ matrix.php-version }} + coverage: pcov + tools: composer:v2, flex + - name: Add PHPUnit matcher + run: echo "::add-matcher::${{ runner.tool_cache }}/phpunit.json" + - name: Install variant + if: matrix.variant != 'normal' && !startsWith(matrix.variant, 'symfony/symfony') + run: composer require ${{ matrix.variant }} --no-update + - name: Install Composer dependencies (${{ matrix.dependencies }}) + uses: ramsey/composer-install@v3 + with: + dependency-versions: ${{ matrix.dependencies }} + - name: Run Tests with coverage + run: vendor/bin/phpunit -c phpunit.xml.dist --coverage-clover build/logs/clover.xml + #- name: Send coverage to Codecov + # uses: codecov/codecov-action@v4 + # with: + # files: build/logs/clover.xml diff --git a/.php-cs-fixer.dist.php b/.php-cs-fixer.dist.php index 4f96866e..b994793f 100644 --- a/.php-cs-fixer.dist.php +++ b/.php-cs-fixer.dist.php @@ -3,7 +3,7 @@ /* * This file is part of the CleverAge/ProcessBundle package. * - * Copyright (c) 2017-2024 Clever-Age + * Copyright (c) Clever-Age * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. @@ -14,17 +14,18 @@ } $fileHeaderComment = <<<'EOF' -This file is part of the CleverAge/ProcessBundle package. + This file is part of the CleverAge/ProcessBundle package. -Copyright (c) 2017-2024 Clever-Age + Copyright (c) Clever-Age -For the full copyright and license information, please view the LICENSE -file that was distributed with this source code. -EOF; + For the full copyright and license information, please view the LICENSE + file that was distributed with this source code. + EOF; return (new PhpCsFixer\Config()) ->setRules([ '@PHP71Migration' => true, + '@PHP82Migration' => true, '@PHPUnit75Migration:risky' => true, '@Symfony' => true, '@Symfony:risky' => true, @@ -38,6 +39,7 @@ ->setFinder( (new PhpCsFixer\Finder()) ->in(__DIR__.'/src') + ->in(__DIR__.'/tests') ->append([__FILE__]) ) ->setCacheFile('.php-cs-fixer.cache') diff --git a/CHANGELOG.md b/CHANGELOG.md index 4129a633..7ae40b24 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,73 @@ +v4.0 +------ + +## BC breaks + +* [#142](https://github.com/cleverage/process-bundle/issues/142) Remove FileFetchTask, use `cleverage/flysystem-process-bundle` instead. +* [#142](https://github.com/cleverage/process-bundle/issues/142) YamlReaderTask & YamlWriterTask namespaces changed to `CleverAge\ProcessBundle\Task\File\Yaml` +* [#142](https://github.com/cleverage/process-bundle/issues/142) Array***Transformers namespaces changed to `CleverAge\ProcessBundle\Transformer\Array` +* [#142](https://github.com/cleverage/process-bundle/issues/142) NormalizeTransformer & DenormalizeTransformer namespaces changed to `CleverAge\ProcessBundle\Transformer\Serialization` +* [#142](https://github.com/cleverage/process-bundle/issues/142) DateFormatTransformer & DateParserTransformer namespaces changed to `CleverAge\ProcessBundle\Transformer\Date` +* [#142](https://github.com/cleverage/process-bundle/issues/142) ExplodeTransformer, HashTransformer, ImplodeTransformer, SlugifyTransformer, SprintfTransformer & TrimTransformer namespaces changed to `CleverAge\ProcessBundle\Transformer\String` +* [#142](https://github.com/cleverage/process-bundle/issues/142) InstantiateTransformer, PropertyAccessorTransformer RecursivePropertySetterTransformer namespaces changed to `CleverAge\ProcessBundle\Transformer\Object` +* [#147](https://github.com/cleverage/process-bundle/issues/147) Replace `Symfony\Component\Form\Exception\InvalidConfigurationException` by `Symfony\Component\Config\Definition\Exception\InvalidConfigurationException` +* [#148](https://github.com/cleverage/process-bundle/issues/148) Update services (step 1) according to Symfony best practices. Services should not use autowiring or autoconfiguration. Instead, all services should be defined explicitly. +Services must be prefixed with the bundle alias instead of using fully qualified class names => `cleverage_process` +* [#150](https://github.com/cleverage/process-bundle/issues/150) The class `\CleverAge\ProcessBundle\Task\Debug\MemInfoDumpTask` has been deleted without suggested replacement +* [#115](https://github.com/cleverage/process-bundle/issues/115) New mandatory configuration `default_error_strategy` on `clever_age_process` level. See [Quick Start/Global configuration](docs/01-quick_start.md#global-configuration) +### Changes + +* [#139](https://github.com/cleverage/process-bundle/issues/139) Update Makefile & .docker for local standalone usage +* [#139](https://github.com/cleverage/process-bundle/issues/139) Update rector, phpstan & php-cs-fixer configurations & apply it +* [#141](https://github.com/cleverage/process-bundle/issues/141) `league/flysystem-bundle` is not required anymore +* [#130](https://github.com/cleverage/process-bundle/issues/130) EventDispatcherInterface service declaration breaks dependency injection +* [#147](https://github.com/cleverage/process-bundle/issues/147) Add missing dependencies on `symfony/dotenv` and `symfony/runtime` +* [#147](https://github.com/cleverage/process-bundle/issues/147) Remove dependencies on `symfony/form`, `symfony/messenger` & `symfony/scheduler` +* [#146](https://github.com/cleverage/process-bundle/issues/146) eav-process-bundle, enqueue-process-bundle, cache-process-bundle and process-soap-bundle were deprecated / archived. +* [#141](https://github.com/cleverage/process-bundle/issues/141) Add a default value to the node "default_error_strategy" + +### Fixes + +* [#129](https://github.com/cleverage/process-bundle/issues/129) Remove wrong replace configuration on composer.json. Add missing suggest +* Miscellaneous fixes, show full diff : https://github.com/cleverage/process-bundle/compare/v4.0.0-rc2...v4.0.0 + +v4.0-RC2 +------ + +## BC breaks + +* Bump php version to >=8.2 +* Bump symfony version to ^6.4|^7.1 + +### Fixes + +* Miscellaneous fixes, show full diff : https://github.com/cleverage/process-bundle/compare/v4.0.0-rc1...v4.0.0-rc2 + +v4.0-RC1 +------ + +## BC breaks + +* Bump php version to >=8.1 +* Bump symfony version to ^6.3 + +## Changes +* Add some phpunit tests +* Apply Rector & Phpstan +* Add StopwatchTask +* Change directory structure. Move Symfony code to /src, documentation to /doc, and tests to /tests + +### Fixes + +* Miscellaneous fixes, show full diff : https://github.com/cleverage/process-bundle/compare/v3.2.9...v4.0.0-rc1 + +v3.2.9 +------ + +### Fixes + +https://github.com/cleverage/process-bundle/compare/v3.2.8...v3.2.9 + v3.2.8 ------ diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 06b24c8f..d5f790d9 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,10 +1,44 @@ Contributing ============ -Every contributions are welcomed. This bundle aims to provide a standalone set of generic component. -If a contribution is too specific or requires dependencies, it might be put in a separated sub-bundle. +First of all, **thank you** for contributing, **you are awesome**! -Ideally every PR should contain documentation and unit test updates. +Here are a few rules to follow in order to ease code reviews, and discussions before +maintainers accept and merge your work. + +You MUST run the quality & test suites. + +You SHOULD write (or update) unit tests. + +You SHOULD write documentation. + +Please, write [commit messages that make sense](https://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html), +and [rebase your branch](https://git-scm.com/book/en/v2/Git-Branching-Rebasing) before submitting your Pull Request. + +One may ask you to [squash your commits](https://gitready.com/advanced/2009/02/10/squashing-commits-with-rebase.html) +too. This is used to "clean" your Pull Request before merging it (we don't want +commits such as `fix tests`, `fix 2`, `fix 3`, etc.). + +Thank you! + +## Running the quality & test suites + +Tests suite uses Docker environments in order to be idempotent to OS's. More than this +PHP version is written inside the Dockerfile; this assures to test the bundle with +the same resources. No need to have PHP installed. + +You only need Docker set it up. + +To allow testing environments more smooth we implemented **Makefile**. +You have two commands available: + +```bash +make quality +``` + +```bash +make tests +``` ## Deprecations notices @@ -14,5 +48,5 @@ When a feature should be deprecated, or when you have a breaking change for a fu * Trigger a deprecation error: `@trigger_error('This feature will be deprecated in v4.0', E_USER_DEPRECATED);` You can check which deprecation notice is triggered in tests -* `make shell` +* `make bash` * `SYMFONY_DEPRECATIONS_HELPER=0 ./vendor/bin/phpunit` diff --git a/Dockerfile b/Dockerfile deleted file mode 100644 index 5ed590e7..00000000 --- a/Dockerfile +++ /dev/null @@ -1,29 +0,0 @@ -ARG PHP_VERSION=8.1 -FROM php:${PHP_VERSION}-cli - -# Basic tools -RUN apt-get update -RUN apt-get install -y wget git zip unzip - -# Composer install -COPY --from=composer:latest /usr/bin/composer /usr/bin/composer - -# PHP setup -RUN mv "$PHP_INI_DIR/php.ini-production" "$PHP_INI_DIR/php.ini" -COPY Resources/tests/environment/php/conf.ini "$PHP_INI_DIR/conf.d/" - -# Basic sample symfony app install -ARG SF_ENV=sf5 -ENV APP_ENV test -RUN mkdir /app -WORKDIR /app -ENV HOME /app -COPY Resources/tests/environment/${SF_ENV}/composer.json /app -RUN composer install - -# Additionnal config files for a test env -COPY phpstan.neon /app/ -COPY Resources/tests/environment/${SF_ENV} /app/ - -# Drop the process-bundle sources into this folder -RUN mkdir /src-cleverage_process diff --git a/Makefile b/Makefile index e9e753c2..0a58e32f 100644 --- a/Makefile +++ b/Makefile @@ -1,11 +1,54 @@ .ONESHELL: SHELL := /bin/bash -test: - php -dxdebug.mode=coverage vendor/bin/phpunit --coverage-html coverage-report +DOCKER_RUN_PHP = docker compose -f .docker/compose.yaml run --rm php "bash" "-c" +DOCKER_COMPOSE = docker compose -f .docker/compose.yaml -linter: #[Linter] - vendor/bin/php-cs-fixer fix +start: upd #[Global] Start application -phpstan: #[Phpstan] - vendor/bin/phpstan +src/vendor: #[Composer] install dependencies + $(DOCKER_RUN_PHP) "composer install --no-interaction" + +upd: #[Docker] Start containers detached + touch .docker/.env + make src/vendor + $(DOCKER_COMPOSE) up --remove-orphans --detach + +up: #[Docker] Start containers + touch .docker/.env + make src/vendor + $(DOCKER_COMPOSE) up --remove-orphans + +stop: #[Docker] Down containers + $(DOCKER_COMPOSE) stop + +down: #[Docker] Down containers + $(DOCKER_COMPOSE) down + +build: #[Docker] Build containers + $(DOCKER_COMPOSE) build + +ps: # [Docker] Show running containers + $(DOCKER_COMPOSE) ps + +bash: #[Docker] Connect to php container with current host user + $(DOCKER_COMPOSE) exec php bash + +logs: #[Docker] Show logs + $(DOCKER_COMPOSE) logs -f + +quality: phpstan php-cs-fixer rector #[Quality] Run all quality checks + +phpstan: #[Quality] Run PHPStan + $(DOCKER_RUN_PHP) "vendor/bin/phpstan --no-progress --memory-limit=1G analyse" + +php-cs-fixer: #[Quality] Run PHP-CS-Fixer + $(DOCKER_RUN_PHP) "vendor/bin/php-cs-fixer fix --diff --verbose" + +rector: #[Quality] Run Rector + $(DOCKER_RUN_PHP) "vendor/bin/rector" + +tests: phpunit #[Tests] Run all tests + +phpunit: #[Tests] Run PHPUnit + $(DOCKER_RUN_PHP) "vendor/bin/phpunit" diff --git a/README.md b/README.md index da35666a..8c2b601b 100644 --- a/README.md +++ b/README.md @@ -1,63 +1,24 @@ CleverAge/ProcessBundle ======================= -## Introduction - This bundle allows to configure series of tasks to be performed on a certain order. Basically, it will greatly ease the configuration of import and exports but can do much more. -Compatible with every [currently supported Symfony versions](https://symfony.com/releases). - -## Index - -- [Quick start](doc/01-quick_start.md) -- [Task types](doc/02-task_types.md) -- [Custom tasks and development](doc/03-custom_tasks.md) -- [Advanced workflow](doc/04-advanced_workflow.md) -- [Contribute](CONTRIBUTING.md) -- Cookbooks - - [Common Setup](doc/cookbooks/01-common_setup.md) - - [Transformations] - - [Flow manipulation] - - [Dummy tasks] - - [Debugging] - - [Logging] - - [Subprocess] - - [File manipulation] - - [Direct call (in controller)] - - [Performances monitoring](doc/cookbooks/performances_monitoring.md) - - [Memory usage analysis](doc/cookbooks/memory_usage_graph.md) -- Reference - - [Process definition](doc/reference/01-process_definition.md) - - [Task definition](doc/reference/02-task_definition.md) - - Basic and debug - - [ConstantOutputTask](doc/reference/tasks/constant_output_task.md) - - [ConstantIterableOutputTask](doc/reference/tasks/constant_iterable_output_task.md) - - [DebugTask](doc/reference/tasks/debug_task.md) - - [DieTask](doc/reference/tasks/die_task.md) - - [DummyTask](doc/reference/tasks/dummy_task.md) - - [EventDispatcherTask](doc/reference/tasks/event_dispatcher_task.md) - - Data manipulation and transformations - - [DenormalizerTask](doc/reference/tasks/denormalizer_task.md) - - [NormalizerTask](doc/reference/tasks/normalizer_task.md) - - [PropertyGetterTask](doc/reference/tasks/property_getter_task.md) - - [PropertySetterTask](doc/reference/tasks/property_setter_task.md) - - [TransformerTask](doc/reference/tasks/transformer_task.md) - - File/CSV - - [CsvReaderTask](doc/reference/tasks/csv_reader_task.md) - - [CsvWriterTask](doc/reference/tasks/csv_writer_task.md) - - File/XML - - [XmlReaderTask](doc/reference/tasks/xml_reader_task.md) - - [XmlWriterTask](doc/reference/tasks/xml_writer_task.md) - - Flow manipulation - - [AggregateIterableTask](doc/reference/tasks/aggregate_iterable_task.md) - - [InputAggregatorTask](doc/reference/tasks/input_aggregator_task.md) - - [InputIteratorTask](doc/reference/tasks/input_iterator_task.md) - - Transformers - - [ArrayFilterTransformer](doc/reference/transformers/array_filter_transformer.md) - - [MappingTransformer](doc/reference/transformers/mapping_transformer.md) - - [RulesTransformer](doc/reference/transformers/rules_transformer.md) - - [DateFormatTransformer](doc/reference/transformers/date_format.md) - - [DateParserTransformer](doc/reference/transformers/date_parser.md) - - [XpathEvaluatorTransformer](doc/reference/transformers/xpath_evaluator.md) - - [Generic transformers definition](doc/reference/03-generic_transformers_definition.md) +Compatible with [Symfony stable version and latest Long-Term Support (LTS) release](https://symfony.com/releases). + +Demo project can be found on [there](https://github.com/cleverage/process-bundle-demo). + +## Documentation + +For usage documentation, see: +[docs/index.md](docs/index.md) + +## Support & Contribution + +For general support and questions, please use [Github](https://github.com/cleverage/process-bundle/issues). +If you think you found a bug or you have a feature idea to propose, feel free to open an issue after looking at the [contributing](CONTRIBUTING.md) guide. + +## License + +This bundle is under the MIT license. +For the whole copyright, see the [LICENSE](LICENSE) file distributed with this source code. diff --git a/composer.json b/composer.json index a1d4119c..5286b57a 100644 --- a/composer.json +++ b/composer.json @@ -47,36 +47,26 @@ "CleverAge\\ProcessBundle\\Tests\\": "tests/" } }, - "replace": { - "symfony/polyfill-ctype": "*", - "symfony/polyfill-iconv": "*", - "symfony/polyfill-php72": "*", - "symfony/polyfill-php73": "*", - "symfony/polyfill-php74": "*", - "symfony/polyfill-php80": "*", - "symfony/polyfill-php81": "*" - }, "require": { "php": ">=8.1", - "ext-json": "*", "ext-dom": "*", "ext-intl": "*", + "ext-json": "*", "ext-mbstring": "*", "psr/cache": "^1|^2|^3", - "league/flysystem-bundle": "^3.1", "symfony/config": "^6.4|^7.1", "symfony/console": "^6.4|^7.1", "symfony/dependency-injection": "^6.4|^7.1", + "symfony/dotenv": "^6.4|^7.1", "symfony/event-dispatcher-contracts": "^3", "symfony/expression-language": "^6.4|^7.1", - "symfony/form": "^6.4|^7.1", "symfony/framework-bundle": "^6.4|^7.1", - "symfony/messenger": "^6.4|^7.1", + "symfony/monolog-bridge": "^6.4|^7.1", "symfony/monolog-bundle": "~3.3", "symfony/options-resolver": "^6.4|^7.1", "symfony/process": "^6.4|^7.1", "symfony/property-access": "^6.4|^7.1", - "symfony/scheduler": "^6.4|^7.1", + "symfony/runtime": "^6.4|^7.1", "symfony/serializer": "^6.4|^7.1", "symfony/stopwatch": "^6.4|^7.1", "symfony/validator": "^6.4|^7.1", @@ -87,17 +77,17 @@ "phpstan/extension-installer": "*", "phpstan/phpstan": "*", "phpstan/phpstan-symfony": "*", - "phpunit/phpunit": "*", + "phpunit/phpunit": "<10.0", "rector/rector": "*", "roave/security-advisories": "dev-latest", "symfony/test-pack": "^1.1" }, "suggest": { "cleverage/doctrine-process-bundle": "Dedicated bundle for Doctrine dependencies for the process bundle", - "cleverage/flysystem-process-bundle": "Dedicated bundle for Flysystem dependencies for the process bundle", - "cleverage/rest-process-bundle": "Dedicated bundle for Rest dependencies for the process bundle", "cleverage/soap-process-bundle": "Dedicated bundle for Soap dependencies for the process bundle", - "cleverage/enqueue-process-bundle": "Manage asynchronous events within the process bundle" + "cleverage/rest-process-bundle": "Dedicated bundle for Rest dependencies for the process bundle", + "cleverage/flysystem-process-bundle": "Dedicated bundle for Flysystem dependencies for the process bundle", + "cleverage/ui-process-bundle": "UI for the process bundle" }, "config": { "allow-plugins": { diff --git a/config/services/command.yaml b/config/services/command.yaml new file mode 100644 index 00000000..947bce64 --- /dev/null +++ b/config/services/command.yaml @@ -0,0 +1,27 @@ +services: + cleverage_process.command.execute_process: + class: CleverAge\ProcessBundle\Command\ExecuteProcessCommand + public: false + tags: + - { name: console.command } + arguments: + - '@cleverage_process.manager.process' + - '@event_dispatcher' + - '@cleverage_process.registry.process_configuration' + + cleverage_process.command.list_process: + class: CleverAge\ProcessBundle\Command\ListProcessCommand + public: false + tags: + - { name: console.command } + arguments: + - '@cleverage_process.registry.process_configuration' + + cleverage_process.command.process_help: + class: CleverAge\ProcessBundle\Command\ProcessHelpCommand + public: false + tags: + - { name: console.command } + arguments: + - '@cleverage_process.registry.process_configuration' + - '@service_container' diff --git a/config/services/event.yaml b/config/services/event.yaml new file mode 100644 index 00000000..8bb1ae18 --- /dev/null +++ b/config/services/event.yaml @@ -0,0 +1,6 @@ +services: + cleverage_process.event_listener.data_queue: + class: CleverAge\ProcessBundle\EventListener\DataQueueEventListener + public: false + tags: + - { name: kernel.event_listener, event: cleverage_process.data_queue, method: pushData } diff --git a/config/services/expression_language.yaml b/config/services/expression_language.yaml new file mode 100644 index 00000000..125d3312 --- /dev/null +++ b/config/services/expression_language.yaml @@ -0,0 +1,12 @@ +services: + cleverage_process.expression_language.php_function_provider: + class: CleverAge\ProcessBundle\ExpressionLanguage\PhpFunctionProvider + public: false + arguments: + - [ 'preg_match' ] + + cleverage_process.expression_language: + class: Symfony\Component\ExpressionLanguage\ExpressionLanguage + public: false + calls: + - ['registerProvider', ['@cleverage_process.expression_language.php_function_provider']] diff --git a/config/services/logger.yaml b/config/services/logger.yaml new file mode 100644 index 00000000..96401ec9 --- /dev/null +++ b/config/services/logger.yaml @@ -0,0 +1,40 @@ +services: + cleverage_process.logger.process_processor: + class: CleverAge\ProcessBundle\Logger\ProcessProcessor + public: false + tags: + - { name: monolog.processor, channel: cleverage_process } + arguments: + - '@cleverage_process.manager.process' + + cleverage_process.logger.task_processor: + class: CleverAge\ProcessBundle\Logger\TaskProcessor + public: false + tags: + - { name: monolog.processor, channel: cleverage_process_task } + arguments: + - '@cleverage_process.manager.process' + + cleverage_process.logger.transformer_processor: + class: CleverAge\ProcessBundle\Logger\TransformerProcessor + public: false + tags: + - { name: monolog.processor, channel: cleverage_process_transformer } + arguments: + - '@cleverage_process.manager.process' + + cleverage_process.logger.process_logger: + class: CleverAge\ProcessBundle\Logger\ProcessLogger + public: false + tags: + - { name: monolog.logger, channel: cleverage_process } + arguments: + - '@logger' + + cleverage_process.logger.task_logger: + class: CleverAge\ProcessBundle\Logger\TaskLogger + public: false + tags: + - { name: monolog.logger, channel: cleverage_process_task } + arguments: + - '@logger' diff --git a/config/services/manager.yaml b/config/services/manager.yaml new file mode 100644 index 00000000..396d7d9f --- /dev/null +++ b/config/services/manager.yaml @@ -0,0 +1,15 @@ +services: + cleverage_process.manager.process: + class: CleverAge\ProcessBundle\Manager\ProcessManager + public: false + arguments: + - '@service_container' + - '@cleverage_process.logger.process_logger' + - '@cleverage_process.logger.task_logger' + - '@cleverage_process.registry.process_configuration' + - '@cleverage_process.context.contextual_option_resolver' + - '@event_dispatcher' + + cleverage_process.context.contextual_option_resolver: + class: CleverAge\ProcessBundle\Context\ContextualOptionResolver + public: false diff --git a/config/services/registry.yaml b/config/services/registry.yaml new file mode 100644 index 00000000..48d5e469 --- /dev/null +++ b/config/services/registry.yaml @@ -0,0 +1,11 @@ +services: + cleverage_process.registry.process_configuration: + class: CleverAge\ProcessBundle\Registry\ProcessConfigurationRegistry + public: false + arguments: + - ~ + - ~ + + cleverage_process.registry.transformer: + class: CleverAge\ProcessBundle\Registry\TransformerRegistry + public: false diff --git a/config/services/task.yaml b/config/services/task.yaml new file mode 100644 index 00000000..9fb96b4e --- /dev/null +++ b/config/services/task.yaml @@ -0,0 +1,14 @@ +services: + _defaults: + bind: + $processManager: '@cleverage_process.manager.process' + $processRegistry: '@cleverage_process.registry.process_configuration' + $transformerRegistry: '@cleverage_process.registry.transformer' + + CleverAge\ProcessBundle\Task\: + resource: '../../src/Task/*' + autowire: true + public: true + shared: false + tags: + - { name: monolog.logger, channel: cleverage_process_task } diff --git a/src/Resources/config/services/transformer.yaml b/config/services/transformer.yaml similarity index 65% rename from src/Resources/config/services/transformer.yaml rename to config/services/transformer.yaml index 63741e56..6d2c40ee 100644 --- a/src/Resources/config/services/transformer.yaml +++ b/config/services/transformer.yaml @@ -1,14 +1,15 @@ services: _defaults: - autowire: true - autoconfigure: true - public: true bind: $language: '@cleverage_process.expression_language' + $transformerRegistry: '@cleverage_process.registry.transformer' CleverAge\ProcessBundle\Transformer\: - resource: '../../../Transformer/*' - exclude: '../../../Transformer/GenericTransformer.php' + resource: '../../src/Transformer/*' + exclude: '../../src/Transformer/GenericTransformer.php' + autowire: true + autoconfigure: true + public: true tags: - { name: cleverage.transformer } - { name: monolog.logger, channel: cleverage_process_transformer } diff --git a/doc/reference/tasks/constant_iterable_output_task.md b/doc/reference/tasks/constant_iterable_output_task.md deleted file mode 100644 index b5cbb2b1..00000000 --- a/doc/reference/tasks/constant_iterable_output_task.md +++ /dev/null @@ -1,27 +0,0 @@ -ConstantIterableOutputTask -========================== - -Same as ConstantOutputTask but only accepts an array of values and iterates over each element. - -Task reference --------------- - -* **Service**: `CleverAge\ProcessBundle\Task\ConstantIterableOutputTask` - -Accepted inputs ---------------- - -Input is ignored - -Possible outputs ----------------- - -`any`: iterate on the `output` option - -Options -------- - -| Code | Type | Required | Default | Description | -| ---- | ---- | :------: | ------- | ----------- | -| `output` | `array` | **X** | | Array of values to iterate onto | - diff --git a/doc/reference/tasks/constant_output_task.md b/doc/reference/tasks/constant_output_task.md deleted file mode 100644 index 3fbff205..00000000 --- a/doc/reference/tasks/constant_output_task.md +++ /dev/null @@ -1,44 +0,0 @@ -ConstantOutputTask -================== - -Simply outputs the same configured value all the time, ignores any input - -Task reference --------------- - -* **Service**: `CleverAge\ProcessBundle\Task\ConstantOutputTask` - -Accepted inputs ---------------- - -Input is ignored - -Possible outputs ----------------- - -`any`: directly output given `output` option - -Options -------- - -| Code | Type | Required | Default | Description | -| ---- | ---- | :------: | ------- | ----------- | -| `output` | `any` | **X** | | Value to output | - -Example -------- - -```yaml -clever_age_process: - configurations: - project_prefix.process_name: - tasks: - constant_output_example: - service: '@CleverAge\ProcessBundle\Task\ConstantOutputTask' - options: - output: - id: 123 - firstname: Test1 - lastname: Test2 - outputs: [XXXX] -``` diff --git a/doc/reference/tasks/csv_reader_task.md b/doc/reference/tasks/csv_reader_task.md deleted file mode 100644 index b5df5a40..00000000 --- a/doc/reference/tasks/csv_reader_task.md +++ /dev/null @@ -1,34 +0,0 @@ -CsvReaderTask -============= - -Reads a CSV file and iterate on each line, returning an array of key -> values. Skips empty lines. - -Task reference --------------- - -* **Service**: `CleverAge\ProcessBundle\Task\File\Csv\CsvReaderTask` -* **Iterable task** - -Accepted inputs ---------------- - -Input is ignored - -Possible outputs ----------------- - -`array`: foreach line, it will return a php array where key comes from headers and values are strings. -Underlying method is [fgetcsv](https://secure.php.net/manual/en/function.fgetcsv.php). - -Options -------- - -| Code | Type | Required | Default | Description | -| ---- | ---- | :------: | ------- | ----------- | -| `file_path` | `string` | **X** | | Path of the file to read from (relative to symfony root or absolute) | -| `delimiter` | `string` | | `;` | CSV delimiter | -| `enclosure` | `string` | | `"` | CSV enclosure character | -| `escape` | `string` | | `\\` | CSV escape character | -| `headers` | `array` or `null` | | `null` | Static list of CSV headers, without the option, it will be dynamically read from first input | -| `mode` | `string` | | `rb` | File open mode (see [fopen mode parameter](https://secure.php.net/manual/en/function.fopen.php)) | -| `log_empty_lines` | `bool` | | `false` | Log when the output is empty | diff --git a/doc/reference/tasks/dummy_task.md b/doc/reference/tasks/dummy_task.md deleted file mode 100644 index fe8a5321..00000000 --- a/doc/reference/tasks/dummy_task.md +++ /dev/null @@ -1,19 +0,0 @@ -DummyTask -========= - -Passes the input to the output, can be used as an entry point allow multiple tasks to be run at the entry point - -Task reference --------------- - -* **Service**: `CleverAge\ProcessBundle\Task\DummyTask` - -Accepted inputs ---------------- - -`any` - -Possible outputs ----------------- - -`any`: re-output given input diff --git a/doc/reference/tasks/event_dispatcher_task.md b/doc/reference/tasks/event_dispatcher_task.md deleted file mode 100644 index 9b6862e2..00000000 --- a/doc/reference/tasks/event_dispatcher_task.md +++ /dev/null @@ -1,29 +0,0 @@ -EventDispatcherTask -=================== - -Call the Symfony event dispatcher - -Task reference --------------- - -* **Service**: `CleverAge\ProcessBundle\Task\Event\EventDispatcherTask` - -Accepted inputs ---------------- - -`any` - -Possible outputs ----------------- - -* `any` when `passive` option is set to true -* `null` in other cases - -Options -------- - -| Code | Type | Required | Default | Description | -| ---- | ---- | :------: | ------- | ----------- | -| `event_name` | `string` | **X** | | Format for normalization ("json", "xml", ... an empty string should also work) | -| `passive` | `bool` | | `true` | Pass input to output | - diff --git a/doc/reference/tasks/transformer_task.md b/doc/reference/tasks/transformer_task.md deleted file mode 100644 index 4a8b5b21..00000000 --- a/doc/reference/tasks/transformer_task.md +++ /dev/null @@ -1,29 +0,0 @@ -TransformerTask -=============== - -Pass an input into a chain of transformers. - -See transformers references. - -Task reference --------------- - -* **Service**: `CleverAge\ProcessBundle\Task\TransformerTask` - -Accepted inputs ---------------- - -`any`: it should match the 1st expected input of the transform chain - -Possible outputs ----------------- - -`any`: result of the transform chain - -Options -------- - -| Code | Type | Required | Default | Description | -| ---- | ---- | :------: | ------- | ----------- | -| `transformers` | `array` | **X** | | List of transformers, see [TransformerTrait](../traits/transformer_trait.md) | - diff --git a/doc/reference/transformers/mapping_transformer.md b/doc/reference/transformers/mapping_transformer.md deleted file mode 100644 index 9830542d..00000000 --- a/doc/reference/transformers/mapping_transformer.md +++ /dev/null @@ -1,143 +0,0 @@ -MappingTransformer -================== - -Transform a set of properties into a (possibly) new output. - -Basically, the algorithm is: -* determine destination (from `initial_value` or `keep_input`) -* foreach property - - get value(s) from the source(s) (from `code`, `constant` or `set_null`) - - use additional transformers on the value - - merge the property and its value into the destination (with `merge_callback`, the property accessor, or as a simple array index) - -Task reference --------------- - -* **Service**: `CleverAge\ProcessBundle\Transformer\MappingTransformer` -* **Transformer code**: `mapping` - -Accepted inputs ---------------- - -`array` or `object` that can be accessed by the property accessor - -Possible outputs ----------------- - -`array` or `object` (the "destination") containing the property manipulated by the transformer - -Options -------- - -| Code | Type | Required | Default | Description | -| ---- | ---- | :------: | ------- | ----------- | -| `mapping` | `array` | **X** | | List of property => sub-mapping options. The property code can be a single string to be used as an array index, or a writable property path | -| `ignore_missing` | `bool` | | `false` | Ignore property accessor errors for the whole mapping | -| `keep_input` | `bool` | | `false` | Use input as the mapping destination (takes precedence on `initial_value`). Keep in mind that due to PHP behavior, arrays are cloned while objects are passed by reference | -| `initial_value` | `any` | | `[]` | Set the mapping destination | -| `merge_callback` | `callable` or `null` | | `null` | Allow to change how a property can be set in the destination | - -Foreach property there is the following options. - -| Code | Type | Required | Default | Description | -| ---- | ---- | :------: | ------- | ----------- | -| `code` | `string` or `array` or `null` | | `null` | A property path, or a list of property path. By default it would be the same as the destination property. Will be used as a source. The special value '.' access the whole object. | -| `constant` | `any` | | `null` | If not `null`, will be directly used as a source (takes precedence on `code`) | -| `set_null` | `bool` | | `false` | If `true`, `null` will be directly used as a source (takes precedence on `code`) | -| `ignore_missing` | `bool` | | `false` | Ignore property accessor errors for this source | -| `transformers` | `array` | | `[]` | List of sub-transformers, see [TransformerTrait](../traits/transformer_trait.md) | - -Examples --------- - -* Simple transformation, will output an array with keys "code", "label", "type", "reference", "required" and "slug" - - required input: an array with keys "Code", "label", "Type", "Name" and "ID" - - output: an array with keys "code", "label", "type", "reference", "required" and "slug" - -```yaml -transform_data: # Task level - service: '@CleverAge\ProcessBundle\Task\TransformerTask' - options: - transformers: - mapping: - mapping: - code: # Simple mapping from "Code" to "code" - code: '[Code]' - "[label]": ~ # Value from "label" will be kept with the same name - type: # Get value from "type" and map values (with a default) - code: '[Type]' - transformers: - convert_value: - ignore_missing: true - map: - TEXTE: text - NUMERIQUE: number - LISTE_DEROULANTE: simpleselect - CHOIX_MULTIPLES: multiselect - DATE: date - default: - value: unknown - reference: # "null" column - set_null: true - required: # "true" column - constant: true - slug: # Get multiple sources, slugify them, and merge them - code: - name: '[Name]' - id: '[ID]' - transformers: - array_map: - transformers: - slugify: ~ - implode: - separator: '_' - outputs: [next_task] -``` - -* Mapping in depth, using objects - - required input: an object with an iterable property "productItems", containing objects with property "longName" - - output: an array with key "items", containing a list of array with key "name" - -```yaml -transform_data: # Task level - service: '@CleverAge\ProcessBundle\Task\TransformerTask' - options: - transformers: # TransformerTask options - mapping: # Transformer code - mapping: # MappingTransformer options - items: # property code - code: 'productItems' # property options - transformers: # property options - array_map: # Transformer code - transformers: # ArrayMapTransformer options - mapping: # Transformer code - mapping: # MappingTransformer options - name: # property code - code: 'longName' # property options - - outputs: [next_task] -``` - -* Advanced property setter - - required input: an object with a property "address", containing an object with properties "postCode" and "customer", itself containing an object with property "hasFlag" - - output: same object, with a modified "address.customer.hasFlag" - -```yaml -transform_data: # Task level - service: '@CleverAge\ProcessBundle\Task\TransformerTask' - options: - transformers: - mapping: - keep_input: true - mapping: - address.customer.hasFlag: - code: address.postCode - transformers: - convert_value: - ignore_missing: true - map: - 69005: true - default: - value: false - outputs: [next_task] -``` diff --git a/doc/reference/transformers/rules_transformer.md b/doc/reference/transformers/rules_transformer.md deleted file mode 100644 index fd65827a..00000000 --- a/doc/reference/transformers/rules_transformer.md +++ /dev/null @@ -1,93 +0,0 @@ -RulesTransformer -================ - -Uses a set of rules to apply some set of transformers on a value. Basically behaves like a `if/elseif/else` block. - -By default a rule uses a variable named `value` containing anything you passed in input (`array`, `string`, ...). But this -can be overridden using options `use_value_as_variables` as `true` and setting `expression_variables` to a static list of -input variables. - -Note that `expression_variables` can also be set to `null` for more flexibility, but this disable initial parsing and decrease -performances. - -See [The ExpressionLanguage Component Reference](https://symfony.com/doc/current/components/expression_language.html) for -more information. - -Task reference --------------- - -* **Service**: `CleverAge\ProcessBundle\Transformer\RulesTransformer` -* **Transformer code**: `rules` - -Accepted inputs ---------------- - -`any` or an `array` of `variable code => value` injectable into an expression - -Possible outputs ----------------- - -`any` resulting from a transformation set. - -Without any matching rules, the value itself is returned. - -Options -------- - -| Code | Type | Required | Default | Description | -| ---- | ---- | :------: | ------- | ----------- | -| `rules_set` | `array` | **X** | | Ordered list of rules, see bellow for details | -| `use_value_as_variables` | `bool` | | `false` | Use given value as an array of variable to inject in expression | -| `expression_variables` | `array` or `null` | | `[value]` | Name of variables injected in the expression at initialization time | - -Foreach rule there is the following options. - -| Code | Type | Required | Default | Description | -| ---- | ---- | :------: | ------- | ----------- | -| `condition` | `string` or `null` | | `null` | An expression used to match a value | -| `default` | `bool` | | `false` | Mark this rule as a default rule. The given rule must be the last, cannot have a condition, and there cannot have 2 default in the same time | -| `transformers` | `array` | | `[]` | List of sub-transformers, see [TransformerTrait](../traits/transformer_trait.md) | -| `constant` | `any` | | `null` | If not `null`, given value will be directly output (takes precedence on `transformers`) | -| `set_null` | `bool` | | `false` | If `true`, `null` will be directly output (takes precedence on `constant`) | - -Examples --------- - -* Simple rules with default value - - input value is an array containing an `order` object and a `customer` object - - output will be either a value from customer, or a numeric constant, or null - -```yaml -# Transformer options level -rules: - rules_set: - - condition: 'value["order"].origin === "marketplace"' - transformers: - property_accessor: - property_path: '[customer].id' - - condition: 'value["order"].origin === "e-commerce"' - constant: 1234 - - default: true - set_null: true -``` - -* Use value as variables - - same example as above - - can be useful for more verbose expression - - transformers still get the input as the initial array - -```yaml -# Transformer options level -rules: - use_value_as_variables: true - expression_variables: [order, customer] - rules_set: - - condition: 'order.origin === "marketplace"' - transformers: - property_accessor: - property_path: '[customer].id' - - condition: 'order.origin === "e-commerce"' - constant: 1234 - - default: true - set_null: true -``` diff --git a/doc/01-quick_start.md b/docs/01-quick_start.md similarity index 89% rename from doc/01-quick_start.md rename to docs/01-quick_start.md index 0bab2f4f..efcc83c7 100644 --- a/doc/01-quick_start.md +++ b/docs/01-quick_start.md @@ -20,13 +20,16 @@ The most common example is the ETL. It's a kind of application whose main purpos ## Installation -This bundle requires Symfony 6.3 minimum. You can install it using composer: +Make sure Composer is installed globally, as explained in the [installation chapter](https://getcomposer.org/doc/00-intro.md) +of the Composer documentation. + +Open a command console, enter your project directory and install it using composer: ```bash composer require cleverage/process-bundle ``` -Remember to add the following line to bundles.php (not required if Symfony Flex is used) +Remember to add the following line to config/bundles.php (not required if Symfony Flex is used) ```php CleverAge\ProcessBundle\CleverAgeProcessBundle::class => ['all' => true], @@ -97,11 +100,11 @@ Then you can add tasks in this array. They consist of a `service`, optionally co ``` Below you can see a minimal working ETL example. It consist of 3 tasks: -- the first *extract* some data (the [constant output task](./reference/tasks/constant_output_task.md) outputs... a constant value): it's an array with 3 +- the first *extract* some data (the [constant output task](reference/tasks/constant_output_task.md) outputs... a constant value): it's an array with 3 keys/values -- the second *transform* the given value (the [transformer task](./reference/tasks/transformer_task.md) is one of the most important!): the output is then an +- the second *transform* the given value (the [transformer task](reference/tasks/transformer_task.md) is one of the most important!): the output is then an array with 2 keys/values, created using the value from previous task -- finally, the last will just display the result (it's a cheap *load*, using the [debug task](./reference/tasks/debug_task.md), only for development +- finally, the last will just display the result (it's a cheap *load*, using the [debug task](reference/tasks/debug_task.md), only for development purpose!) ```yaml @@ -193,4 +196,4 @@ Once everything is working fine, you may want to automate your processes. The st To check if everything went fine, logs are stored in database: - `clever_process_history`: logs process started, with `process_code`, `start_date`, `end_date` and `statut` -- `clever_task_history`: logs custom tasks logs (see [logging]()), with `task_code`, `message`, `logged_at` date, `level`, a `reference` and `context` +- `clever_task_history`: logs custom tasks logs (see [logging]), with `task_code`, `message`, `logged_at` date, `level`, a `reference` and `context` diff --git a/doc/02-task_types.md b/docs/02-task_types.md similarity index 98% rename from doc/02-task_types.md rename to docs/02-task_types.md index 9ebfd21e..6639f027 100644 --- a/doc/02-task_types.md +++ b/docs/02-task_types.md @@ -81,7 +81,7 @@ Transformers are a special subset of this bundle. They're not tasks strictly spe point for Transformers is the `CleverAge\ProcessBundle\Task\TransformerTask`, whose only purpose is to take some input, pass it to a transformer and transfer the output to next task. -The idea is to allow a great flexibility (especially using the [MappingTransformer]()), without using too much code. +The idea is to allow a great flexibility (especially using the [MappingTransformer]), without using too much code. They implement `CleverAge\ProcessBundle\Transformer\TransformerInterface` or `CleverAge\ProcessBundle\Transformer\ConfigurableTransformerInterface`. diff --git a/doc/03-custom_tasks.md b/docs/03-custom_tasks.md similarity index 95% rename from doc/03-custom_tasks.md rename to docs/03-custom_tasks.md index b6bc6372..607ac3b0 100644 --- a/doc/03-custom_tasks.md +++ b/docs/03-custom_tasks.md @@ -25,11 +25,11 @@ method will be called and the `$state` will contain a new input (`ProcessState:: may pass a new output to the next task (`ProcessState::setOutput`). The State also provide reporting tools: -* `ProcessState::log`: register a new log message (see[logging]()) +* `ProcessState::log`: register a new log message (see[logging]) * `ProcessState::getConsoleOutput`: direct link to Symfony's Console Output (deprecated, prefer log) Sometimes, when you execute a task, you need to change how the process may continue. It will be detailed in depth in -the [next chapter about error management]() but here are the main methods +the [next chapter about error management] but here are the main methods * `ProcessState::setSkipped`: process won't continue to next step * `ProcessState::setStopped`: process will fully stop * `ProcessState::setErrorOutput`: allow to direct an output to an error branch from your workflow @@ -50,14 +50,14 @@ Defining your tasks as Iterable or Blocking is as simple as implementing one of * `CleverAge\ProcessBundle\Model\IterableTaskInterface`: the `next` method should behave almost the same as PHP's native [next](https://secure.php.net/manual/en/function.next.php) function for arrays (except it only returns a boolean) * `CleverAge\ProcessBundle\Model\BlockingTaskInterface`: every `execute` method call should only accumulate data from -the input and once every previous task is _resolved_, the `proceed` method should provide an output (see [TODO]() for +the input and once every previous task is _resolved_, the `proceed` method should provide an output (see [TODO] for the exact definition of a resolved method) It's up to you to know when you should be using one of those, but basically: * When you loop over a collection of independent elements, you should use an Iterable task. It may help you reduce the memory footprint. * When you need to collect, upload, ... data as a whole, then you might need a Blocking task. Be sure to read [previous -chapter's notice]() about performance. +chapter's notice] about performance. Tasks cannot be both Iterable and Blocking. diff --git a/doc/04-advanced_workflow.md b/docs/04-advanced_workflow.md similarity index 98% rename from doc/04-advanced_workflow.md rename to docs/04-advanced_workflow.md index bef6e3f1..f31ce2a3 100644 --- a/doc/04-advanced_workflow.md +++ b/docs/04-advanced_workflow.md @@ -25,5 +25,4 @@ You can also use [EventDispatcherTask](reference/tasks/event_dispatcher_task.md) _TODO_ * ProcessLauncherTask -* EnqueueBundle * pthread diff --git a/doc/05-good_practices.md b/docs/05-good_practices.md similarity index 100% rename from doc/05-good_practices.md rename to docs/05-good_practices.md diff --git a/doc/06-testing.md b/docs/06-testing.md similarity index 100% rename from doc/06-testing.md rename to docs/06-testing.md diff --git a/doc/basic-etl.png b/docs/basic-etl.png similarity index 100% rename from doc/basic-etl.png rename to docs/basic-etl.png diff --git a/doc/cookbooks/01-common_setup.md b/docs/cookbooks/01-common_setup.md similarity index 100% rename from doc/cookbooks/01-common_setup.md rename to docs/cookbooks/01-common_setup.md diff --git a/doc/cookbooks/memory_usage_graph.md b/docs/cookbooks/memory_usage_graph.md similarity index 100% rename from doc/cookbooks/memory_usage_graph.md rename to docs/cookbooks/memory_usage_graph.md diff --git a/doc/cookbooks/performances_monitoring.md b/docs/cookbooks/performances_monitoring.md similarity index 100% rename from doc/cookbooks/performances_monitoring.md rename to docs/cookbooks/performances_monitoring.md diff --git a/docs/index.md b/docs/index.md new file mode 100644 index 00000000..96f54c07 --- /dev/null +++ b/docs/index.md @@ -0,0 +1,135 @@ +## Documentation + +- [Quick start](01-quick_start.md) +- [Task types](02-task_types.md) +- [Custom tasks and development](03-custom_tasks.md) +- [Advanced workflow](04-advanced_workflow.md) +- Cookbooks + - [Common Setup](cookbooks/01-common_setup.md) + - [Transformations] + - [Flow manipulation] + - [Dummy tasks] + - [Debugging] + - [Logging] + - [Subprocess] + - [File manipulation] + - [Direct call (in controller)] + - [Performances monitoring](cookbooks/performances_monitoring.md) + - [Memory usage analysis](cookbooks/memory_usage_graph.md) +- Reference + - [Process definition](reference/01-process_definition.md) + - [Task definition](reference/02-task_definition.md) + - Basic and debug + - [ConstantOutputTask](reference/tasks/constant_output_task.md) + - [ConstantIterableOutputTask](reference/tasks/constant_iterable_output_task.md) + - [CounterTask](reference/tasks/counter_task.md) + - [DebugTask](reference/tasks/debug_task.md) + - [DieTask](reference/tasks/die_task.md) + - [DummyTask](reference/tasks/dummy_task.md) + - [ErrorForwarderTask](reference/tasks/error_forwarder_task.md) + - [EventDispatcherTask](reference/tasks/event_dispatcher_task.md) + - [StopwatchTask](reference/tasks/stopwatch_task.md) + - Data manipulation and transformations + - [DenormalizerTask](reference/tasks/denormalizer_task.md) + - [NormalizerTask](reference/tasks/normalizer_task.md) + - [DeserializerTask] + - [SerializerTask] + - [PropertyGetterTask](reference/tasks/property_getter_task.md) + - [PropertySetterTask](reference/tasks/property_setter_task.md) + - [ObjectUpdaterTask] + - [SplitJoinLineTask] + - [TransformerTask](reference/tasks/transformer_task.md) + - [ValidatorTask] + - File/CSV + - [CsvReaderTask](reference/tasks/csv_reader_task.md) + - [CsvWriterTask](reference/tasks/csv_writer_task.md) + - [CSVSplitterTask] + - [InputCsvReaderTask](reference/tasks/input_csv_reader_task.md) + - File/JsonStream + - [JsonStreamReaderTask] + - File/XML + - [XmlReaderTask](reference/tasks/xml_reader_task.md) + - [XmlWriterTask](reference/tasks/xml_writer_task.md) + - File/Yaml + - [YamlReaderTask] + - [YamlWriterTask] + - File + - [FileMoverTask] + - [FileReaderTask] + - [FileRemoverTask] + - [FileWriterTask] + - [FolderBrowserTask] + - [InputFolderBrowserTask] + - Flow manipulation + - [AggregateIterableTask](reference/tasks/aggregate_iterable_task.md) + - [InputAggregatorTask](reference/tasks/input_aggregator_task.md) + - [InputIteratorTask](reference/tasks/input_iterator_task.md) + - [ArrayMergeTask] + - [ColumnAggregatorTask] + - [RowAggregatorTask] + - [FilterTask] + - [GroupByAggregateIterableTask] + - [SimpleBatchTask] + - [IterableBatchTask] + - [SkipEmptyTask] + - [StopTask] + - Process + - [CommandRunnerTask] + - [ProcessExecutorTask] + - [ProcessLauncherTask] + - Reporting + - [AdvancedStatCounterTask] + - [LoggerTask](reference/tasks/logger_task.md) + - [StatCounterTask] + - Transformers + - Basic and debug + - [CachedTransformer] + - [CallbackTransformer] + - [CastTransformer] + - [ConstantTransformer] + - [ConvertValueTransformer] + - [DebugTransformer] + - [DefaultTransformer] + - [GenericTransformer] + - [EvaluatorTransformer] + - [ExpressionLanguageMapTransformer] + - [MappingTransformer](reference/transformers/mapping_transformer.md) + - [MultiReplaceTransformer] + - [PregFilterTransformer] + - [RulesTransformer](reference/transformers/rules_transformer.md) + - [TypeSetterTransformer] + - [UnsetTransformer] + - [WrapperTransformer] + - Array + - [ArrayElementTransformer] + - [ArrayFilterTransformer](reference/transformers/array_filter_transformer.md) + - [ArrayFirstTransformer] + - [ArrayLastTransformer] + - [ArrayMapTransformer] + - [ArrayUnsetTransformer] + - Date + - [DateFormatTransformer](reference/transformers/date_format.md) + - [DateParserTransformer](reference/transformers/date_parser.md) + - Object + - [InstantiateTransformer] + - [PropertyAccessorTransformer] + - [RecursivePropertySetterTransformer] + - Serialization + - [DenormalizeTransformer] + - [NormalizeTransformer] + - String + - [ExplodeTransformer] + - [HashTransformer] + - [ImplodeTransformer](reference/transformers/implode_transformer.md) + - [SlugifyTransformer](reference/transformers/slugify_transformer.md) + - [SprintfTransformer] + - [TrimTransformer](reference/transformers/trim_transformer.md) + - XML + - [XpathEvaluatorTransformer](reference/transformers/xpath_evaluator.md) + - Other bridges + - [Doctrine](https://github.com/cleverage/doctrine-process-bundle) + - [Soap](https://github.com/cleverage/soap-process-bundle) + - [Rest](https://github.com/cleverage/rest-process-bundle) + - [Flysystem](https://github.com/cleverage/flysystem-process-bundle) + - [Generic transformers definition](reference/03-generic_transformers_definition.md) +- [UI](https://github.com/cleverage/ui-process-bundle) diff --git a/doc/reference/01-process_definition.md b/docs/reference/01-process_definition.md similarity index 100% rename from doc/reference/01-process_definition.md rename to docs/reference/01-process_definition.md diff --git a/doc/reference/02-task_definition.md b/docs/reference/02-task_definition.md similarity index 100% rename from doc/reference/02-task_definition.md rename to docs/reference/02-task_definition.md diff --git a/doc/reference/03-generic_transformers_definition.md b/docs/reference/03-generic_transformers_definition.md similarity index 92% rename from doc/reference/03-generic_transformers_definition.md rename to docs/reference/03-generic_transformers_definition.md index 68b40ca1..9615761c 100644 --- a/doc/reference/03-generic_transformers_definition.md +++ b/docs/reference/03-generic_transformers_definition.md @@ -27,6 +27,6 @@ For each contextual option, you can define | `default` | `any` | | `null` | If not `null`, define the default value | | `default_is_null` | `bool` | | `false` | If you need `null` to be the default value, use this option | -The transformer options are the same than any other transformer using a sub-list of transformers (see [TransformerTrait](../traits/transformer_trait.md)). +The transformer options are the same than any other transformer using a sub-list of transformers (see [TransformerTrait](traits/transformer_trait.md)). You can use the syntax for contextual values (`{{ contextual_option_code }}`) to put placeholders that will be filled by those contextual options. diff --git a/doc/reference/tasks/_template.md b/docs/reference/tasks/_template.md similarity index 76% rename from doc/reference/tasks/_template.md rename to docs/reference/tasks/_template.md index ed1d4a57..842c5f37 100644 --- a/doc/reference/tasks/_template.md +++ b/docs/reference/tasks/_template.md @@ -20,9 +20,8 @@ _Description of possible types_ Options ------- - -| Code | Type | Required | Default | Description | -| ---- | ---- | :------: | ------- | ----------- | +| Code | Type | Required | Default | Description | +|--------|--------|--------------------|--------------------------------|---------------| | `code` | `type` | **X** _or nothing_ | `default value` _if available_ | _description_ | Examples diff --git a/doc/reference/tasks/aggregate_iterable_task.md b/docs/reference/tasks/aggregate_iterable_task.md similarity index 100% rename from doc/reference/tasks/aggregate_iterable_task.md rename to docs/reference/tasks/aggregate_iterable_task.md diff --git a/docs/reference/tasks/constant_iterable_output_task.md b/docs/reference/tasks/constant_iterable_output_task.md new file mode 100644 index 00000000..30b04829 --- /dev/null +++ b/docs/reference/tasks/constant_iterable_output_task.md @@ -0,0 +1,40 @@ +ConstantIterableOutputTask +========================== + +Same as ConstantOutputTask but only accepts an array of values and iterates over each element. + +Task reference +-------------- + +* **Service**: `CleverAge\ProcessBundle\Task\ConstantIterableOutputTask` + +Accepted inputs +--------------- + +Input is ignored + +Possible outputs +---------------- + +`any`: iterate on the `output` option + +Options +------- + +| Code | Type | Required | Default | Description | +|----------|---------|:--------:|---------|---------------------------------| +| `output` | `array` | **X** | | Array of values to iterate onto | + +Example +------- + +```yaml +# Task configuration level +code: + service: '@CleverAge\ProcessBundle\Task\ConstantIterableOutputTask' + options: + output: + id: 123 + firstname: Test1 + lastname: Test2 +``` diff --git a/docs/reference/tasks/constant_output_task.md b/docs/reference/tasks/constant_output_task.md new file mode 100644 index 00000000..ed2f042f --- /dev/null +++ b/docs/reference/tasks/constant_output_task.md @@ -0,0 +1,40 @@ +ConstantOutputTask +================== + +Simply outputs the same configured value all the time, ignores any input + +Task reference +-------------- + +* **Service**: `CleverAge\ProcessBundle\Task\ConstantOutputTask` + +Accepted inputs +--------------- + +Input is ignored + +Possible outputs +---------------- + +`any`: directly output given `output` option + +Options +------- + +| Code | Type | Required | Default | Description | +|----------|-------|:---------|---------|-----------------| +| `output` | `any` | **X** | | Value to output | + +Example +------- + +```yaml +# Task configuration level +code: + service: '@CleverAge\ProcessBundle\Task\ConstantOutputTask' + options: + output: + id: 123 + firstname: Test1 + lastname: Test2 +``` diff --git a/docs/reference/tasks/counter_task.md b/docs/reference/tasks/counter_task.md new file mode 100644 index 00000000..455539e4 --- /dev/null +++ b/docs/reference/tasks/counter_task.md @@ -0,0 +1,39 @@ +CounterTask +================== + +Count the number of times the task is processed and continue every N iteration (skip the rest of the time) + +Flush at the end with the actual count. + +Task reference +-------------- + +* **Service**: `CleverAge\ProcessBundle\Task\CounterTask` + +Accepted inputs +--------------- + +`any`, must implement IterableTaskInterface + +Possible outputs +---------------- + +`int`: outputs the number of times the counter is called + +Options +------- + +| Code | Type | Required | Default | Description | +|---------------|-------|----------|----------|---------------------------------------------------| +| `flush_every` | `int` | **X** | | The period at which the task will produce outputs | + +Example +------- + +```yaml +# Task configuration level +code: + service: '@CleverAge\ProcessBundle\Task\CounterTask' + options: + flush_every: 2 +``` diff --git a/docs/reference/tasks/csv_reader_task.md b/docs/reference/tasks/csv_reader_task.md new file mode 100644 index 00000000..0e7b4c3a --- /dev/null +++ b/docs/reference/tasks/csv_reader_task.md @@ -0,0 +1,48 @@ +CsvReaderTask +============= + +Reads a CSV file and iterate on each line, returning an array of key -> values. Skips empty lines. + +Task reference +-------------- + +* **Service**: `CleverAge\ProcessBundle\Task\File\Csv\CsvReaderTask` +* **Iterable task** + +Accepted inputs +--------------- + +Input is ignored + +Possible outputs +---------------- + +`array`: foreach line, it will return a php array where key comes from headers and values are strings. +Underlying method is [fgetcsv](https://secure.php.net/manual/en/function.fgetcsv.php). + +Options +------- + +| Code | Type | Required | Default | Description | +|-------------------|-------------------|:---------:|----------|--------------------------------------------------------------------------------------------------| +| `file_path` | `string` | **X** | | Path of the file to read from (relative to symfony root or absolute) | +| `delimiter` | `string` | | `;` | CSV delimiter | +| `enclosure` | `string` | | `"` | CSV enclosure character | +| `escape` | `string` | | `\\` | CSV escape character | +| `headers` | `array` or `null` | | `null` | Static list of CSV headers, without the option, it will be dynamically read from first input | +| `mode` | `string` | | `rb` | File open mode (see [fopen mode parameter](https://secure.php.net/manual/en/function.fopen.php)) | +| `log_empty_lines` | `bool` | | `false` | Log when the output is empty | + +Example +------- + +```yaml +# Task configuration level +code: + service: '@CleverAge\ProcessBundle\Task\File\Csv\CsvReaderTask' + options: + file_path: 'path/to/file.csv' + delimiter: '{{ delimiter }}' ## delimiter is contextualized you must add -c delimiter:";" on console execute +``` + + diff --git a/doc/reference/tasks/csv_writer_task.md b/docs/reference/tasks/csv_writer_task.md similarity index 100% rename from doc/reference/tasks/csv_writer_task.md rename to docs/reference/tasks/csv_writer_task.md diff --git a/doc/reference/tasks/debug_task.md b/docs/reference/tasks/debug_task.md similarity index 68% rename from doc/reference/tasks/debug_task.md rename to docs/reference/tasks/debug_task.md index 1a98b263..cfaf44d7 100644 --- a/doc/reference/tasks/debug_task.md +++ b/docs/reference/tasks/debug_task.md @@ -20,7 +20,21 @@ Possible outputs `any`: re-output given input +Options +------- + +None + Example ---------------- -https://github.com/cleverage/process-bundle-ui-demo/blob/main/config/packages/process/demo.debug.yaml \ No newline at end of file +```yaml +# Task configuration level +code: + service: '@CleverAge\ProcessBundle\Task\ConstantOutputTask' + options: + output: + id: 123 + firstname: Test1 + lastname: Test2 +``` diff --git a/doc/reference/tasks/denormalizer_task.md b/docs/reference/tasks/denormalizer_task.md similarity index 100% rename from doc/reference/tasks/denormalizer_task.md rename to docs/reference/tasks/denormalizer_task.md diff --git a/doc/reference/tasks/die_task.md b/docs/reference/tasks/die_task.md similarity index 66% rename from doc/reference/tasks/die_task.md rename to docs/reference/tasks/die_task.md index cdde437e..741fdeed 100644 --- a/doc/reference/tasks/die_task.md +++ b/docs/reference/tasks/die_task.md @@ -19,7 +19,16 @@ Possible outputs None +Options +------- + +None + Example ---------------- -https://github.com/cleverage/process-bundle-ui-demo/blob/main/config/packages/process/demo.die.yaml \ No newline at end of file +```yaml +# Task configuration level +code: + service: '@CleverAge\ProcessBundle\Task\Debug\DieTask' +``` diff --git a/docs/reference/tasks/dummy_task.md b/docs/reference/tasks/dummy_task.md new file mode 100644 index 00000000..323cafc5 --- /dev/null +++ b/docs/reference/tasks/dummy_task.md @@ -0,0 +1,48 @@ +DummyTask +========= + +Passes the input to the output, can be used as an entry point allow multiple tasks to be run at the entry point + +Task reference +-------------- + +* **Service**: `CleverAge\ProcessBundle\Task\DummyTask` + +Accepted inputs +--------------- + +`any` + +Possible outputs +---------------- + +`any`: re-output given input + +Options +------- + +None + +Example +------- + +```yaml +# Task configuration level +dummy: + service: '@CleverAge\ProcessBundle\Task\DummyTask' + outputs: [output1, output2] +output1: + service: '@CleverAge\ProcessBundle\Task\ConstantOutputTask' + options: + output: + id: 123 + firstname: Test1 + lastname: Test2 +output2: + service: '@CleverAge\ProcessBundle\Task\ConstantOutputTask' + options: + output: + id: 456 + firstname: Test3 + lastname: Test4 +``` diff --git a/docs/reference/tasks/error_forwarder_task.md b/docs/reference/tasks/error_forwarder_task.md new file mode 100644 index 00000000..592c9cb2 --- /dev/null +++ b/docs/reference/tasks/error_forwarder_task.md @@ -0,0 +1,35 @@ +CounterTask +================== + +This is a dummy task mostly intended for testing purpose. + +Forward any input to the error output. + +Task reference +-------------- + +* **Service**: `CleverAge\ProcessBundle\Task\Debug\ErrorForwarderTask` + +Accepted inputs +--------------- + +`any` + +Possible outputs +---------------- + +`any`: directly error_output given `output` option + +Options +------- + +None + +Example +------- + +```yaml +# Task configuration level +code: + service: '@CleverAge\ProcessBundle\Task\Debug\ErrorForwarderTask' +``` diff --git a/docs/reference/tasks/event_dispatcher_task.md b/docs/reference/tasks/event_dispatcher_task.md new file mode 100644 index 00000000..88c87e98 --- /dev/null +++ b/docs/reference/tasks/event_dispatcher_task.md @@ -0,0 +1,39 @@ +EventDispatcherTask +=================== + +Call the Symfony event dispatcher + +Task reference +-------------- + +* **Service**: `CleverAge\ProcessBundle\Task\Event\EventDispatcherTask` + +Accepted inputs +--------------- + +`any` + +Possible outputs +---------------- + +* `any` when `passive` option is set to true +* `null` in other cases + +Options +------- + +| Code | Type | Required | Default | Description | +|--------------|----------|:---------:|----------|----------------------| +| `event_name` | `string` | **X** | | | +| `passive` | `bool` | | `true` | Pass input to output | + +Example +------- + +```yaml +# Task configuration level +code: + service: '@CleverAge\ProcessBundle\Task\Event\EventDispatcherTask' + options: + event_name: 'myapp.myevent' +``` diff --git a/doc/reference/tasks/input_aggregator_task.md b/docs/reference/tasks/input_aggregator_task.md similarity index 100% rename from doc/reference/tasks/input_aggregator_task.md rename to docs/reference/tasks/input_aggregator_task.md diff --git a/docs/reference/tasks/input_csv_reader_task.md b/docs/reference/tasks/input_csv_reader_task.md new file mode 100644 index 00000000..59e67d2a --- /dev/null +++ b/docs/reference/tasks/input_csv_reader_task.md @@ -0,0 +1,46 @@ +InputCsvReaderTask +============= + +Reads a CSV file and iterate on each line, returning an array of key -> values. Skips empty lines. + +Task reference +-------------- + +* **Service**: `CleverAge\ProcessBundle\Task\File\Csv\InputCsvReaderTask` +* **Iterable task** + +Accepted inputs +--------------- + +`string`: file path + +Possible outputs +---------------- + +`array`: foreach line, it will return a php array where key comes from headers and values are strings. +Underlying method is [fgetcsv](https://secure.php.net/manual/en/function.fgetcsv.php). + +Options +------- + +Same as [CsvReaderTask](reference/tasks/csv_reader_task.md) except following : + +| Code | Type | Required | Default | Description | +|-------------|----------|:--------:|---------|----------------------------| +| `file_path` | | | | Removed, use input instead | +| `base_path` | `string` | | `` | | + +Example +------- + +```yaml +clever_age_process: + configurations: + process.name: + entry_point: entrypoint # for upload_and_run process entry_point is required + tasks: + entrypoint: + service: '@CleverAge\ProcessBundle\Task\File\Csv\InputCsvReaderTask' + options: + delimiter: '{{ delimiter }}' ## delimiter is contextualized you must add -c delimiter:";" on console execute +``` diff --git a/doc/reference/tasks/input_iterator_task.md b/docs/reference/tasks/input_iterator_task.md similarity index 100% rename from doc/reference/tasks/input_iterator_task.md rename to docs/reference/tasks/input_iterator_task.md diff --git a/doc/reference/tasks/iterable_batch_task.md b/docs/reference/tasks/iterable_batch_task.md similarity index 100% rename from doc/reference/tasks/iterable_batch_task.md rename to docs/reference/tasks/iterable_batch_task.md diff --git a/docs/reference/tasks/logger_task.md b/docs/reference/tasks/logger_task.md new file mode 100644 index 00000000..ffcc51ac --- /dev/null +++ b/docs/reference/tasks/logger_task.md @@ -0,0 +1,41 @@ +LoggerTask +============= + +Log a specific message with context. + +Task reference +-------------- + +* **Service**: `CleverAge\ProcessBundle\Task\Reporting\LoggerTask` + +Accepted inputs +--------------- + +`any` + +Possible outputs +---------------- + +`any` : forwarded input + +Options +------- + +| Code | Type | Required | Default | Description | +|-------------|--------------------|:---------:|-------------------|---------------------------------| +| `level` | `string` | **X** | `debug` | Use `Psr\Log\LogLevel` values | +| `message` | `string` | | `Log state input` | | +| `context` | `array` | | `['input']` | | +| `reference` | `string` or `null` | | `null` | Override `context['reference']` | + +Example +------- + +```yaml +# Task configuration level +code: + service: '@CleverAge\ProcessBundle\Task\Reporting\LoggerTask' + options: + level: warning + message: DEMO LOGGER +``` diff --git a/doc/reference/tasks/normalizer_task.md b/docs/reference/tasks/normalizer_task.md similarity index 100% rename from doc/reference/tasks/normalizer_task.md rename to docs/reference/tasks/normalizer_task.md diff --git a/doc/reference/tasks/property_getter_task.md b/docs/reference/tasks/property_getter_task.md similarity index 100% rename from doc/reference/tasks/property_getter_task.md rename to docs/reference/tasks/property_getter_task.md diff --git a/doc/reference/tasks/property_setter_task.md b/docs/reference/tasks/property_setter_task.md similarity index 100% rename from doc/reference/tasks/property_setter_task.md rename to docs/reference/tasks/property_setter_task.md diff --git a/docs/reference/tasks/stopwatch_task.md b/docs/reference/tasks/stopwatch_task.md new file mode 100644 index 00000000..4953239b --- /dev/null +++ b/docs/reference/tasks/stopwatch_task.md @@ -0,0 +1,33 @@ +StopwatchTask +============= + +Log all the __root__ events of the Stopwatch component. + +Task reference +-------------- + +* **Service**: `CleverAge\ProcessBundle\Task\Debug\StopwatchTask` + +Accepted inputs +--------------- + +`any` + +Possible outputs +---------------- + +None + +Options +------- + +None + +Example +------- + +```yaml +# Task configuration level +code: + service: '@CleverAge\ProcessBundle\Task\Debug\StopwatchTask' +``` diff --git a/docs/reference/tasks/transformer_task.md b/docs/reference/tasks/transformer_task.md new file mode 100644 index 00000000..efc98bcd --- /dev/null +++ b/docs/reference/tasks/transformer_task.md @@ -0,0 +1,40 @@ +TransformerTask +=============== + +Pass an input into a chain of transformers. + +See transformers references. + +Task reference +-------------- + +* **Service**: `CleverAge\ProcessBundle\Task\TransformerTask` + +Accepted inputs +--------------- + +`any`: it should match the 1st expected input of the transform chain + +Possible outputs +---------------- + +`any`: result of the transform chain + +Options +------- + +| Code | Type | Required | Default | Description | +|----------------|---------|:---------:|----------|------------------------------------------------------------------------------| +| `transformers` | `array` | **X** | | List of transformers, see [TransformerTrait](../traits/transformer_trait.md) | + +Example +------- + +```yaml +# Task configuration level +code: + service: '@CleverAge\ProcessBundle\Task\TransformerTask' + options: + transformers: + slugify: ~ +``` diff --git a/doc/reference/tasks/xml_reader_task.md b/docs/reference/tasks/xml_reader_task.md similarity index 100% rename from doc/reference/tasks/xml_reader_task.md rename to docs/reference/tasks/xml_reader_task.md diff --git a/doc/reference/tasks/xml_writer_task.md b/docs/reference/tasks/xml_writer_task.md similarity index 100% rename from doc/reference/tasks/xml_writer_task.md rename to docs/reference/tasks/xml_writer_task.md diff --git a/doc/reference/traits/condition_trait.md b/docs/reference/traits/condition_trait.md similarity index 100% rename from doc/reference/traits/condition_trait.md rename to docs/reference/traits/condition_trait.md diff --git a/doc/reference/traits/transformer_trait.md b/docs/reference/traits/transformer_trait.md similarity index 100% rename from doc/reference/traits/transformer_trait.md rename to docs/reference/traits/transformer_trait.md diff --git a/doc/reference/transformers/_template.md b/docs/reference/transformers/_template.md similarity index 100% rename from doc/reference/transformers/_template.md rename to docs/reference/transformers/_template.md diff --git a/doc/reference/transformers/array_filter_transformer.md b/docs/reference/transformers/array_filter_transformer.md similarity index 100% rename from doc/reference/transformers/array_filter_transformer.md rename to docs/reference/transformers/array_filter_transformer.md diff --git a/doc/reference/transformers/date_format.md b/docs/reference/transformers/date_format.md similarity index 100% rename from doc/reference/transformers/date_format.md rename to docs/reference/transformers/date_format.md diff --git a/doc/reference/transformers/date_parser.md b/docs/reference/transformers/date_parser.md similarity index 100% rename from doc/reference/transformers/date_parser.md rename to docs/reference/transformers/date_parser.md diff --git a/docs/reference/transformers/implode_transformer.md b/docs/reference/transformers/implode_transformer.md new file mode 100644 index 00000000..dad93ac2 --- /dev/null +++ b/docs/reference/transformers/implode_transformer.md @@ -0,0 +1,38 @@ +ImplodeTransformer +========================= + +Join array elements with a string + +This transformer uses the php internal function: https://www.php.net/manual/en/function.implode.php + +Task reference +-------------- + +* **Service**: `CleverAge\ProcessBundle\Transformer\String\ImplodeTransformer` +* **Transformer code**: `implode` + +Accepted inputs +--------------- + +`array` + +Possible outputs +---------------- + +`string` + +Options +------- + +| Code | Type | Required | Default | Description | +|-------------|----------|:--------:|---------|-------------| +| `separator` | `string` | **X** | `|` | | + +Examples +-------- + +```yaml +# Transformer options level +implode: + separator: '-' +``` diff --git a/docs/reference/transformers/mapping_transformer.md b/docs/reference/transformers/mapping_transformer.md new file mode 100644 index 00000000..4971f66b --- /dev/null +++ b/docs/reference/transformers/mapping_transformer.md @@ -0,0 +1,130 @@ +MappingTransformer +================== + +Transform a set of properties into a (possibly) new output. + +Basically, the algorithm is: +* determine destination (from `initial_value` or `keep_input`) +* foreach property + - get value(s) from the source(s) (from `code`, `constant` or `set_null`) + - use additional transformers on the value + - merge the property and its value into the destination (with `merge_callback`, the property accessor, or as a simple array index) + +Task reference +-------------- + +* **Service**: `CleverAge\ProcessBundle\Transformer\MappingTransformer` +* **Transformer code**: `mapping` + +Accepted inputs +--------------- + +`array` or `object` that can be accessed by the property accessor + +Possible outputs +---------------- + +`array` or `object` (the "destination") containing the property manipulated by the transformer + +Options +------- + +| Code | Type | Required | Default | Description | +|------------------|----------------------|:---------:|---------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| `mapping` | `array` | **X** | | List of property => sub-mapping options. The property code can be a single string to be used as an array index, or a writable property path | +| `ignore_missing` | `bool` | | `false` | Ignore property accessor errors for the whole mapping | +| `keep_input` | `bool` | | `false` | Use input as the mapping destination (takes precedence on `initial_value`). Keep in mind that due to PHP behavior, arrays are cloned while objects are passed by reference | +| `initial_value` | `any` | | `[]` | Set the mapping destination | +| `merge_callback` | `callable` or `null` | | `null` | Allow to change how a property can be set in the destination | + +Foreach property there is the following options. + +| Code | Type | Required | Default | Description | +|------------------|-------------------------------|:---------:|---------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| `code` | `string` or `array` or `null` | | `null` | A property path, or a list of property path. By default it would be the same as the destination property. Will be used as a source. The special value '.' access the whole object. | +| `constant` | `any` | | `null` | If not `null`, will be directly used as a source (takes precedence on `code`) | +| `set_null` | `bool` | | `false` | If `true`, `null` will be directly used as a source (takes precedence on `code`) | +| `ignore_missing` | `bool` | | `false` | Ignore property accessor errors for this source | +| `transformers` | `array` | | `[]` | List of sub-transformers, see [TransformerTrait](../traits/transformer_trait.md) | + +Examples +-------- + +* Simple transformation, will output an array with keys "code", "label", "type", "reference", "required" and "slug" + - required input: an array with keys "Code", "label", "Type", "Name" and "ID" + - output: an array with keys "code", "label", "type", "reference", "required" and "slug" + +```yaml +# Transformer options level +mapping: + mapping: + code: # Simple mapping from "Code" to "code" + code: '[Code]' + "[label]": ~ # Value from "label" will be kept with the same name + type: # Get value from "type" and map values (with a default) + code: '[Type]' + transformers: + convert_value: + ignore_missing: true + map: + TEXTE: text + NUMERIQUE: number + LISTE_DEROULANTE: simpleselect + CHOIX_MULTIPLES: multiselect + DATE: date + default: + value: unknown + reference: # "null" column + set_null: true + required: # "true" column + constant: true + slug: # Get multiple sources, slugify them, and merge them + code: + name: '[Name]' + id: '[ID]' + transformers: + array_map: + transformers: + slugify: ~ + implode: + separator: '_' +``` + +* Mapping in depth, using objects + - required input: an object with an iterable property "productItems", containing objects with property "longName" + - output: an array with key "items", containing a list of array with key "name" + +```yaml +# Transformer options level +mapping: # Transformer code + mapping: # MappingTransformer options + items: # property code + code: 'productItems' # property options + transformers: + array_map: # Transformer code + transformers: # ArrayMapTransformer options + mapping: # Transformer code + mapping: # MappingTransformer options + name: # property code + code: 'longName' # property options +``` + +* Advanced property setter + - required input: an object with a property "address", containing an object with properties "postCode" and "customer", itself containing an object with property "hasFlag" + - output: same object, with a modified "address.customer.hasFlag" + +```yaml +# Transformer options level +mapping: + keep_input: true + mapping: + address.customer.hasFlag: + code: address.postCode + transformers: + convert_value: + ignore_missing: true + map: + 69005: true + default: + value: false +``` diff --git a/docs/reference/transformers/rules_transformer.md b/docs/reference/transformers/rules_transformer.md new file mode 100644 index 00000000..71ecc40d --- /dev/null +++ b/docs/reference/transformers/rules_transformer.md @@ -0,0 +1,93 @@ +RulesTransformer +================ + +Uses a set of rules to apply some set of transformers on a value. Basically behaves like a `if/elseif/else` block. + +By default a rule uses a variable named `value` containing anything you passed in input (`array`, `string`, ...). But this +can be overridden using options `use_value_as_variables` as `true` and setting `expression_variables` to a static list of +input variables. + +Note that `expression_variables` can also be set to `null` for more flexibility, but this disable initial parsing and decrease +performances. + +See [The ExpressionLanguage Component Reference](https://symfony.com/doc/current/components/expression_language.html) for +more information. + +Task reference +-------------- + +* **Service**: `CleverAge\ProcessBundle\Transformer\RulesTransformer` +* **Transformer code**: `rules` + +Accepted inputs +--------------- + +`any` or an `array` of `variable code => value` injectable into an expression + +Possible outputs +---------------- + +`any` resulting from a transformation set. + +Without any matching rules, the value itself is returned. + +Options +------- + +| Code | Type | Required | Default | Description | +|--------------------------|-------------------|:--------:|-----------|---------------------------------------------------------------------| +| `rules_set` | `array` | **X** | | Ordered list of rules, see bellow for details | +| `use_value_as_variables` | `bool` | | `false` | Use given value as an array of variable to inject in expression | +| `expression_variables` | `array` or `null` | | `[value]` | Name of variables injected in the expression at initialization time | + +Foreach rule there is the following options. + +| Code | Type | Required | Default | Description | +|----------------|--------------------|:---------:|---------|----------------------------------------------------------------------------------------------------------------------------------------------| +| `condition` | `string` or `null` | | `null` | An expression used to match a value | +| `default` | `bool` | | `false` | Mark this rule as a default rule. The given rule must be the last, cannot have a condition, and there cannot have 2 default in the same time | +| `transformers` | `array` | | `[]` | List of sub-transformers, see [TransformerTrait](../traits/transformer_trait.md) | +| `constant` | `any` | | `null` | If not `null`, given value will be directly output (takes precedence on `transformers`) | +| `set_null` | `bool` | | `false` | If `true`, `null` will be directly output (takes precedence on `constant`) | + +Examples +-------- + +* Simple rules with default value + - input value is an array containing an `order` object and a `customer` object + - output will be either a value from customer, or a numeric constant, or null + +```yaml +# Transformer options level +rules: + rules_set: + - condition: 'value["order"].origin === "marketplace"' + transformers: + property_accessor: + property_path: '[customer].id' + - condition: 'value["order"].origin === "e-commerce"' + constant: 1234 + - default: true + set_null: true +``` + +* Use value as variables + - same example as above + - can be useful for more verbose expression + - transformers still get the input as the initial array + +```yaml +# Transformer options level +rules: + use_value_as_variables: true + expression_variables: [order, customer] + rules_set: + - condition: 'order.origin === "marketplace"' + transformers: + property_accessor: + property_path: '[customer].id' + - condition: 'order.origin === "e-commerce"' + constant: 1234 + - default: true + set_null: true +``` diff --git a/docs/reference/transformers/slugify_transformer.md b/docs/reference/transformers/slugify_transformer.md new file mode 100644 index 00000000..cadab337 --- /dev/null +++ b/docs/reference/transformers/slugify_transformer.md @@ -0,0 +1,39 @@ +SlugifyTransformer +========================= + +Strip whitespace (or other characters) from the beginning and end of a string + +This transformer uses the php internal function: https://www.php.net/manual/en/class.transliterator.php + +Task reference +-------------- + +* **Service**: `CleverAge\ProcessBundle\Transformer\String\SlugifyTransformer` +* **Transformer code**: `slugify` + +Accepted inputs +--------------- + +Any value that can be cast to string. + +Possible outputs +---------------- + +`string` + +Options +------- + +| Code | Type | Required | Default | Description | +|------------------|----------|:---------:|----------------------------------------|--------------------------------| +| `transliterator` | `string` | | `NFD; [:Nonspacing Mark:] Remove; NFC` | Used to create \Transliterator | +| `replace` | `string` | | `/[^a-z0-9]+/` | Used on preg_replace | +| `separator` | `string` | | `_` | Used on preg_replace | + +Examples +-------- + +```yaml +# Transformer options level +slugify: ~ +``` diff --git a/docs/reference/transformers/trim_transformer.md b/docs/reference/transformers/trim_transformer.md new file mode 100644 index 00000000..85a09053 --- /dev/null +++ b/docs/reference/transformers/trim_transformer.md @@ -0,0 +1,32 @@ +TrimTransformer +========================= + +Strip whitespace (or other characters) from the beginning and end of a string + +This transformer uses the php internal function: https://www.php.net/manual/en/function.trim.php + +Task reference +-------------- + +* **Service**: `CleverAge\ProcessBundle\Transformer\String\TrimTransformer` +* **Transformer code**: `trim` + +Accepted inputs +--------------- + +Any value that can be cast to string and null. + +Possible outputs +---------------- + +Depending on the input : +- `null` if the input is null +- `string` if the input is not null + +Options +------- + +| Code | Type | Required | Default | Description | +| ---- | ---- | :------: |-----------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| `charlist` | `string` | | ***" \t\n\r\0\x0B"*** | List of characters to trim | + diff --git a/doc/reference/transformers/xpath_evaluator.md b/docs/reference/transformers/xpath_evaluator.md similarity index 100% rename from doc/reference/transformers/xpath_evaluator.md rename to docs/reference/transformers/xpath_evaluator.md diff --git a/ecs.php b/ecs.php deleted file mode 100644 index 69fb8167..00000000 --- a/ecs.php +++ /dev/null @@ -1,24 +0,0 @@ -rule(LineLengthFixer::class); - - $ecsConfig->sets([ - SetList::CLEAN_CODE, - SetList::SYMPLIFY, - SetList::COMMON, - SetList::PSR_12, - SetList::DOCTRINE_ANNOTATIONS, - ]); - - $ecsConfig->paths([__DIR__.'/src']); - - $ecsConfig->skip([AssignmentInConditionSniff::class]); -}; diff --git a/phpstan.neon b/phpstan.neon index a9f5c7bc..f0560a73 100644 --- a/phpstan.neon +++ b/phpstan.neon @@ -2,12 +2,8 @@ parameters: level: 6 paths: - src + - tests excludePaths: - - ecs.php - - vendor/* - - tests/* - - rector.php - - var/* - src/Resources/tests/* ignoreErrors: - '#type has no value type specified in iterable type#' @@ -18,7 +14,7 @@ parameters: - '#process\(\) has no return type specified#' - '#should return Iterator but returns Traversable#' - '#Negated boolean expression is always false#' - checkGenericClassInNonGenericObjectType: false + - identifier: missingType.generics reportUnmatchedIgnoredErrors: false inferPrivatePropertyTypeFromConstructor: true - treatPhpDocTypesAsCertain: false \ No newline at end of file + treatPhpDocTypesAsCertain: false diff --git a/rector.php b/rector.php index 5a4479b2..72a24086 100644 --- a/rector.php +++ b/rector.php @@ -2,20 +2,29 @@ declare(strict_types=1); -/* - * This file is part of the CleverAge/ProcessBundle package. - * - * Copyright (c) 2017-2024 Clever-Age - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - use Rector\Config\RectorConfig; +use Rector\Set\ValueObject\LevelSetList; +use Rector\Symfony\Set\SymfonySetList; +use Rector\ValueObject\PhpVersion; return RectorConfig::configure() - ->withPaths([__DIR__.'/src', __DIR__.'/tests']) + ->withPhpVersion(PhpVersion::PHP_82) + ->withPaths([ + __DIR__.'/src', + __DIR__.'/tests', + ]) ->withPhpSets(php82: true) - ->withAttributesSets(symfony: true) - ->withImportNames(removeUnusedImports: true) + // here we can define, what prepared sets of rules will be applied + ->withPreparedSets( + deadCode: true, + codeQuality: true + ) + ->withSets([ + LevelSetList::UP_TO_PHP_82, + SymfonySetList::SYMFONY_64, + SymfonySetList::SYMFONY_71, + SymfonySetList::SYMFONY_CODE_QUALITY, + SymfonySetList::SYMFONY_CONSTRUCTOR_INJECTION, + SymfonySetList::ANNOTATIONS_TO_ATTRIBUTES, + ]) ; diff --git a/src/CleverAgeProcessBundle.php b/src/CleverAgeProcessBundle.php index 27904639..7e94bede 100644 --- a/src/CleverAgeProcessBundle.php +++ b/src/CleverAgeProcessBundle.php @@ -5,7 +5,7 @@ /* * This file is part of the CleverAge/ProcessBundle package. * - * Copyright (c) 2017-2024 Clever-Age + * Copyright (c) Clever-Age * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. @@ -15,8 +15,6 @@ use CleverAge\ProcessBundle\DependencyInjection\Compiler\CheckSerializerCompilerPass; use CleverAge\ProcessBundle\DependencyInjection\Compiler\RegistryCompilerPass; -use CleverAge\ProcessBundle\Registry\TransformerRegistry; -use Symfony\Component\DependencyInjection\Compiler\PassConfig; use Symfony\Component\DependencyInjection\ContainerBuilder; use Symfony\Component\HttpKernel\Bundle\Bundle; @@ -30,11 +28,14 @@ public function build(ContainerBuilder $container): void parent::build($container); $container->addCompilerPass( - new RegistryCompilerPass(TransformerRegistry::class, 'cleverage.transformer', 'addTransformer'), - PassConfig::TYPE_BEFORE_OPTIMIZATION, - 0 + new RegistryCompilerPass('cleverage_process.registry.transformer', 'cleverage.transformer', 'addTransformer') ); - $container->addCompilerPass(new CheckSerializerCompilerPass(), PassConfig::TYPE_BEFORE_OPTIMIZATION, 0); + $container->addCompilerPass(new CheckSerializerCompilerPass()); + } + + public function getPath(): string + { + return \dirname(__DIR__); } } diff --git a/src/Command/ExecuteProcessCommand.php b/src/Command/ExecuteProcessCommand.php index 73fec99a..088428f5 100644 --- a/src/Command/ExecuteProcessCommand.php +++ b/src/Command/ExecuteProcessCommand.php @@ -5,7 +5,7 @@ /* * This file is part of the CleverAge/ProcessBundle package. * - * Copyright (c) 2017-2024 Clever-Age + * Copyright (c) Clever-Age * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. @@ -17,7 +17,6 @@ use CleverAge\ProcessBundle\Filesystem\JsonStreamFile; use CleverAge\ProcessBundle\Manager\ProcessManager; use CleverAge\ProcessBundle\Registry\ProcessConfigurationRegistry; -use Psr\EventDispatcher\EventDispatcherInterface; use Symfony\Component\Config\Definition\Exception\InvalidConfigurationException; use Symfony\Component\Console\Attribute\AsCommand; use Symfony\Component\Console\Command\Command; @@ -25,6 +24,7 @@ use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Input\InputOption; use Symfony\Component\Console\Output\OutputInterface; +use Symfony\Component\EventDispatcher\EventDispatcherInterface; use Symfony\Component\VarDumper\VarDumper; use Symfony\Component\Yaml\Parser; @@ -92,7 +92,7 @@ protected function execute(InputInterface $input, OutputInterface $output): int if (!$this->processRegistry->hasProcessConfiguration($code)) { throw new InvalidConfigurationException("Unknown process {$code}"); } - + if (!$output->isQuiet()) { $output->writeln("Starting process '{$code}'..."); } @@ -123,7 +123,7 @@ protected function parseContextValues(InputInterface $input): array preg_match($pattern, (string) $contextValue, $parts); if (3 !== \count($parts) || $parts[0] !== $contextValue) { - throw new \InvalidArgumentException(sprintf('Invalid context %s', $contextValue)); + throw new \InvalidArgumentException(\sprintf('Invalid context %s', $contextValue)); } $context[$parts[1]] = $parser->parse($parts[2]); } @@ -148,7 +148,7 @@ protected function handleOutputData(mixed $data, InputInterface $input, OutputIn } elseif (self::OUTPUT_FORMAT_JSON === $input->getOption('output-format')) { $output->writeln(json_encode($data, \JSON_THROW_ON_ERROR)); } else { - throw new \InvalidArgumentException(sprintf("Cannot handle data output with format '%s'", $input->getOption('output-format'))); + throw new \InvalidArgumentException(\sprintf("Cannot handle data output with format '%s'", $input->getOption('output-format'))); } } } elseif (self::OUTPUT_FORMAT_JSON === $input->getOption('output-format')) { @@ -160,10 +160,10 @@ protected function handleOutputData(mixed $data, InputInterface $input, OutputIn } if (isset($outputFile) && $output->isVerbose()) { - $output->writeln(sprintf("Output stored in '%s'", $input->getOption('output'))); + $output->writeln(\sprintf("Output stored in '%s'", $input->getOption('output'))); } } else { - throw new \InvalidArgumentException(sprintf("Cannot handle data output with format '%s'", $input->getOption('output-format'))); + throw new \InvalidArgumentException(\sprintf("Cannot handle data output with format '%s'", $input->getOption('output-format'))); } } } diff --git a/src/Command/ListProcessCommand.php b/src/Command/ListProcessCommand.php index fcca76c1..01fdf997 100644 --- a/src/Command/ListProcessCommand.php +++ b/src/Command/ListProcessCommand.php @@ -5,7 +5,7 @@ /* * This file is part of the CleverAge/ProcessBundle package. * - * Copyright (c) 2017-2024 Clever-Age + * Copyright (c) Clever-Age * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. @@ -28,7 +28,7 @@ class ListProcessCommand extends Command { public function __construct( - protected ProcessConfigurationRegistry $processConfigRegistry + protected ProcessConfigurationRegistry $processConfigRegistry, ) { parent::__construct(); } diff --git a/src/Command/ProcessHelpCommand.php b/src/Command/ProcessHelpCommand.php index 8fe4a510..ea22e351 100644 --- a/src/Command/ProcessHelpCommand.php +++ b/src/Command/ProcessHelpCommand.php @@ -5,7 +5,7 @@ /* * This file is part of the CleverAge/ProcessBundle package. * - * Copyright (c) 2017-2024 Clever-Age + * Copyright (c) Clever-Age * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. @@ -61,7 +61,7 @@ class ProcessHelpCommand extends Command public function __construct( protected ProcessConfigurationRegistry $processConfigRegistry, - protected ContainerInterface $container + protected ContainerInterface $container, ) { parent::__construct(); } @@ -83,13 +83,13 @@ protected function execute(InputInterface $input, OutputInterface $output): int $output->writeln(str_repeat(' ', self::INDENT_SIZE).$processCode); $output->writeln(''); - if ($process->getDescription()) { + if ('' !== $process->getDescription() && '0' !== $process->getDescription()) { $output->writeln('Description:'); $output->writeln(str_repeat(' ', self::INDENT_SIZE).$process->getDescription()); $output->writeln(''); } - if ($process->getHelp()) { + if ('' !== $process->getHelp() && '0' !== $process->getHelp()) { $output->writeln('Help:'); $helpLines = array_filter(explode("\n", $process->getHelp())); foreach ($helpLines as $helpLine) { @@ -116,7 +116,7 @@ protected function execute(InputInterface $input, OutputInterface $output): int } $branches = array_filter($branches); - if (!empty($branches)) { + if ([] !== $branches) { $branchStr = '['.implode(', ', $branches).']'; $output->writeln("All branches are not resolved : {$branchStr}"); } @@ -130,13 +130,13 @@ protected function execute(InputInterface $input, OutputInterface $output): int protected function findBestNextTask( array $branches, array $taskList, - ProcessConfiguration $process - ): int|null|string { + ProcessConfiguration $process, + ): int|string|null { // Get resolvable tasks $taskCandidates = []; foreach ($taskList as $taskCode) { $task = $process->getTaskConfiguration($taskCode); - if (empty($task->getPreviousTasksConfigurations())) { + if ([] === $task->getPreviousTasksConfigurations()) { return $taskCode; } @@ -156,7 +156,7 @@ protected function findBestNextTask( } } - if (empty($taskCandidates)) { + if ([] === $taskCandidates) { throw new \UnexpectedValueException('Cannot find a task to output'); } @@ -175,7 +175,7 @@ protected function findBestNextTask( $weight += $key; } - if (!empty($task->getPreviousTasksConfigurations())) { + if ([] !== $task->getPreviousTasksConfigurations()) { $weight /= \count($task->getPreviousTasksConfigurations()); } @@ -194,7 +194,7 @@ protected function findBestNextTask( // If a few tasks have the same weight, return the tasks with the lowest number of children $childCounts = []; - foreach ($equalWeights as $taskCode => $weight) { + foreach (array_keys($equalWeights) as $taskCode) { $task = $process->getTaskConfiguration($taskCode); $childCounts[$taskCode] = $this->getTaskChildrenCount($task); } @@ -228,7 +228,7 @@ protected function resolveBranchOutput( array &$branches, string $taskCode, ProcessConfiguration $process, - OutputInterface $output + OutputInterface $output, ): void { $task = $process->getTaskConfiguration($taskCode); $branchesToMerge = []; @@ -243,7 +243,7 @@ protected function resolveBranchOutput( } // Check previous branches - if (empty($previousTasks)) { + if ([] === $previousTasks) { $branches[] = $task->getCode(); } elseif (1 === \count($previousTasks)) { $prevTask = current($previousTasks) @@ -292,7 +292,7 @@ protected function resolveBranchOutput( } // Merge branches - if (!empty($branchesToMerge)) { + if ([] !== $branchesToMerge) { $this->writeBranches($output, $branches); $this->writeBranches( @@ -322,7 +322,7 @@ static function ($taskCode, $i) use ($gapBranches, $origin, $final, $branches): } ); - foreach ($branches as $i => $branchTask) { + foreach (array_keys($branches) as $i) { if (\in_array($i, $branchesToMerge, true)) { $branches[$i] = null; } @@ -423,7 +423,7 @@ static function ($branchTask, $i) use ($origin, $branches, $gapBranches, $final) ); } - if (empty($nextTasks)) { + if ([] === $nextTasks) { foreach ($branches as $i => $branchTask) { if ($branchTask === $taskCode) { $branches[$i] = null; @@ -446,8 +446,8 @@ protected function writeBranches( OutputInterface $output, array $branches, string|iterable $comment = '', - callable $match = null, - string|callable $char = null + ?callable $match = null, + string|callable|null $char = null, ): void { $output->write(str_repeat(' ', self::INDENT_SIZE)); @@ -467,7 +467,7 @@ protected function writeBranches( } // Str_pad does not work with unicode ? - $noFormatStrLen = mb_strlen(preg_replace('/<[^>]*>/', '', (string) $str)); + $noFormatStrLen = mb_strlen((string) preg_replace('/<[^>]*>/', '', (string) $str)); for ($j = $noFormatStrLen; $j < self::BRANCH_SIZE; ++$j) { $str .= ' '; } @@ -499,15 +499,15 @@ protected function getTaskDescription(TaskConfiguration $task): string $subprocess[] = $task->getOption('process'); } - if (\count($interfaces)) { + if ([] !== $interfaces) { $description .= ' ('.implode(', ', $interfaces).')'; } - if (\count($subprocess)) { + if ([] !== $subprocess) { $description .= ' {'.implode(', ', $subprocess).'}'; } - if ($task->getDescription()) { + if ('' !== $task->getDescription() && '0' !== $task->getDescription()) { $description .= " {$task->getDescription()}"; } diff --git a/src/Configuration/ProcessConfiguration.php b/src/Configuration/ProcessConfiguration.php index 52db1a8c..37b06baf 100644 --- a/src/Configuration/ProcessConfiguration.php +++ b/src/Configuration/ProcessConfiguration.php @@ -5,7 +5,7 @@ /* * This file is part of the CleverAge/ProcessBundle package. * - * Copyright (c) 2017-2024 Clever-Age + * Copyright (c) Clever-Age * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. @@ -33,7 +33,7 @@ public function __construct( protected ?string $endPoint = null, protected string $description = '', protected string $help = '', - protected bool $public = true + protected bool $public = true, ) { } @@ -164,12 +164,12 @@ public function getMainTask(): ?TaskConfiguration $entryTask = $this->getEntryPoint(); // If there's no entry point, we might use the end point - if (!$entryTask) { + if (!$entryTask instanceof TaskConfiguration) { $entryTask = $this->getEndPoint(); } // By default use the first defined task - if (!$entryTask) { + if (!$entryTask instanceof TaskConfiguration) { $entryTask = reset($this->taskConfigurations); } @@ -244,7 +244,7 @@ protected function sortDependencies(array $dependencies): array } $midOffset = round(\count($dependencies) / 2); - $midTaskCode = $dependencies[(int)$midOffset]; + $midTaskCode = $dependencies[(int) $midOffset]; $midTask = $this->getTaskConfiguration($midTaskCode); $previousTasks = []; diff --git a/src/Configuration/TaskConfiguration.php b/src/Configuration/TaskConfiguration.php index 6a59d872..feabfa7c 100644 --- a/src/Configuration/TaskConfiguration.php +++ b/src/Configuration/TaskConfiguration.php @@ -5,7 +5,7 @@ /* * This file is part of the CleverAge/ProcessBundle package. * - * Copyright (c) 2017-2024 Clever-Age + * Copyright (c) Clever-Age * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. @@ -58,7 +58,7 @@ public function __construct( protected array $outputs = [], protected array $errorOutputs = [], protected string $errorStrategy = self::STRATEGY_SKIP, - protected string $logLevel = LogLevel::CRITICAL + protected string $logLevel = LogLevel::CRITICAL, ) { $this->logErrors = LogLevel::DEBUG !== $logLevel; // @deprecated, remove me in next version } @@ -188,7 +188,7 @@ public function setInErrorBranch(bool $inErrorBranch): void public function isRoot(): bool { - return empty($this->getPreviousTasksConfigurations()) && !$this->isInErrorBranch(); + return [] === $this->getPreviousTasksConfigurations() && !$this->isInErrorBranch(); } /** diff --git a/src/Context/ContextualOptionResolver.php b/src/Context/ContextualOptionResolver.php index a5bad58f..067e3509 100644 --- a/src/Context/ContextualOptionResolver.php +++ b/src/Context/ContextualOptionResolver.php @@ -5,7 +5,7 @@ /* * This file is part of the CleverAge/ProcessBundle package. * - * Copyright (c) 2017-2024 Clever-Age + * Copyright (c) Clever-Age * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. @@ -27,7 +27,7 @@ public function contextualizeOption(mixed $value, array $context): mixed } if (\is_string($value)) { - $pattern = sprintf('/{{[ ]*(%s){1}[ ]*}}/', implode('|', array_keys($context))); + $pattern = \sprintf('/{{[ ]*(%s){1}[ ]*}}/', implode('|', array_keys($context))); $matches = []; $result = preg_match($pattern, $value, $matches); diff --git a/src/DependencyInjection/CleverAgeProcessExtension.php b/src/DependencyInjection/CleverAgeProcessExtension.php index ebe8ef15..cf7830bf 100644 --- a/src/DependencyInjection/CleverAgeProcessExtension.php +++ b/src/DependencyInjection/CleverAgeProcessExtension.php @@ -5,7 +5,7 @@ /* * This file is part of the CleverAge/ProcessBundle package. * - * Copyright (c) 2017-2024 Clever-Age + * Copyright (c) Clever-Age * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. @@ -13,33 +13,31 @@ namespace CleverAge\ProcessBundle\DependencyInjection; -use CleverAge\ProcessBundle\Registry\ProcessConfigurationRegistry; use CleverAge\ProcessBundle\Transformer\GenericTransformer; use Symfony\Component\Config\FileLocator; use Symfony\Component\DependencyInjection\ContainerBuilder; use Symfony\Component\DependencyInjection\Definition; use Symfony\Component\DependencyInjection\Extension\Extension; use Symfony\Component\DependencyInjection\Loader\YamlFileLoader; +use Symfony\Component\DependencyInjection\Reference; use Symfony\Component\Finder\Finder; /** * This is the class that loads and manages your bundle configuration. * - * @see http://symfony.com/doc/current/cookbook/bundles/extension.html + * @see https://symfony.com/doc/current/bundles/extension.html */ class CleverAgeProcessExtension extends Extension { public function load(array $configs, ContainerBuilder $container): void { // Get the path of the service folder wherever the bundle is installed - $reflection = new \ReflectionClass($this); - $serviceFolderPath = \dirname($reflection->getFileName(), 2).'/Resources/config/services'; - $this->findServices($container, $serviceFolderPath); + $this->findServices($container, __DIR__.'/../../config/services'); $configuration = new Configuration(); $config = $this->processConfiguration($configuration, $configs); - $processConfigurationRegistry = $container->getDefinition(ProcessConfigurationRegistry::class); + $processConfigurationRegistry = $container->getDefinition('cleverage_process.registry.process_configuration'); $processConfigurationRegistry->replaceArgument(0, $config['configurations']); $processConfigurationRegistry->replaceArgument(1, $config['default_error_strategy']); @@ -48,6 +46,10 @@ public function load(array $configs, ContainerBuilder $container): void $transformerDefinition = new Definition(GenericTransformer::class); $transformerDefinition->setAutowired(true); $transformerDefinition->setPublic(false); + $transformerDefinition->setArguments([ + new Reference('cleverage_process.context.contextual_option_resolver'), + new Reference('cleverage_process.registry.transformer'), + ]); $transformerDefinition->addMethodCall('initialize', [$transformerCode, $transformerConfig]); $transformerDefinition->addTag('cleverage.transformer'); diff --git a/src/DependencyInjection/Compiler/CheckSerializerCompilerPass.php b/src/DependencyInjection/Compiler/CheckSerializerCompilerPass.php index 0cd8e0f4..93006b1e 100644 --- a/src/DependencyInjection/Compiler/CheckSerializerCompilerPass.php +++ b/src/DependencyInjection/Compiler/CheckSerializerCompilerPass.php @@ -5,7 +5,7 @@ /* * This file is part of the CleverAge/ProcessBundle package. * - * Copyright (c) 2017-2024 Clever-Age + * Copyright (c) Clever-Age * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. diff --git a/src/DependencyInjection/Compiler/RegistryCompilerPass.php b/src/DependencyInjection/Compiler/RegistryCompilerPass.php index 517bb2d5..9de12c25 100644 --- a/src/DependencyInjection/Compiler/RegistryCompilerPass.php +++ b/src/DependencyInjection/Compiler/RegistryCompilerPass.php @@ -5,7 +5,7 @@ /* * This file is part of the CleverAge/ProcessBundle package. * - * Copyright (c) 2017-2024 Clever-Age + * Copyright (c) Clever-Age * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. @@ -25,7 +25,7 @@ class RegistryCompilerPass implements CompilerPassInterface public function __construct( protected ?string $registry = null, protected ?string $tag = null, - protected ?string $method = null + protected ?string $method = null, ) { } @@ -41,7 +41,7 @@ public function process(ContainerBuilder $container): void $definition = $container->findDefinition($this->registry); $taggedServices = $container->findTaggedServiceIds($this->tag); - foreach ($taggedServices as $id => $tags) { + foreach (array_keys($taggedServices) as $id) { $definition->addMethodCall($this->method, [new Reference($id)]); } } diff --git a/src/DependencyInjection/Configuration.php b/src/DependencyInjection/Configuration.php index be337f93..a3f80a5a 100644 --- a/src/DependencyInjection/Configuration.php +++ b/src/DependencyInjection/Configuration.php @@ -5,7 +5,7 @@ /* * This file is part of the CleverAge/ProcessBundle package. * - * Copyright (c) 2017-2024 Clever-Age + * Copyright (c) Clever-Age * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. @@ -28,7 +28,7 @@ class Configuration implements ConfigurationInterface { public function __construct( - protected string $root = 'clever_age_process' + protected string $root = 'clever_age_process', ) { } @@ -40,7 +40,7 @@ public function getConfigTreeBuilder(): TreeBuilder // Default error strategy $definition->enumNode('default_error_strategy') ->values([TaskConfiguration::STRATEGY_SKIP, TaskConfiguration::STRATEGY_STOP]) - ->isRequired(); + ->defaultValue(TaskConfiguration::STRATEGY_STOP); $this->appendRootProcessConfigDefinition($definition); $this->appendRootTransformersConfigDefinition($definition); @@ -77,11 +77,11 @@ protected function appendTransformerConfigDefinition(NodeBuilder $definition): v ->arrayNode('contextual_options') ->prototype('variable') ->end() - ?->end() + ->end() ->arrayNode('transformers') ->prototype('variable') ->end() - ?->end(); + ->end(); } /** @@ -110,22 +110,22 @@ protected function appendProcessConfigDefinition(NodeBuilder $definition): void ->scalarNode('entry_point') ->defaultNull() ->end() - ?->scalarNode('end_point') + ->scalarNode('end_point') ->defaultNull() ->end() - ?->scalarNode('description') + ->scalarNode('description') ->defaultValue('') ->end() - ?->scalarNode('help') + ->scalarNode('help') ->defaultValue('') ->end() - ?->scalarNode('public') + ->scalarNode('public') ->defaultTrue() ->end() - ?->arrayNode('options') + ->arrayNode('options') ->prototype('variable') ->end() - ?->end(); + ->end(); /** @var ArrayNodeDefinition $tasksArrayDefinition */ $tasksArrayDefinition = $definition diff --git a/src/Event/ConsoleProcessEvent.php b/src/Event/ConsoleProcessEvent.php index f09c4303..e404e071 100644 --- a/src/Event/ConsoleProcessEvent.php +++ b/src/Event/ConsoleProcessEvent.php @@ -5,7 +5,7 @@ /* * This file is part of the CleverAge/ProcessBundle package. * - * Copyright (c) 2017-2024 Clever-Age + * Copyright (c) Clever-Age * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. @@ -26,7 +26,7 @@ public function __construct( private readonly InputInterface $consoleInput, private readonly OutputInterface $consoleOutput, private readonly mixed $processInput, - private readonly array $processContext + private readonly array $processContext, ) { } diff --git a/src/Event/EventDispatcherTaskEvent.php b/src/Event/EventDispatcherTaskEvent.php index 0d6b4394..e148e973 100644 --- a/src/Event/EventDispatcherTaskEvent.php +++ b/src/Event/EventDispatcherTaskEvent.php @@ -5,7 +5,7 @@ /* * This file is part of the CleverAge/ProcessBundle package. * - * Copyright (c) 2017-2024 Clever-Age + * Copyright (c) Clever-Age * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. @@ -19,7 +19,7 @@ class EventDispatcherTaskEvent extends Event { public function __construct( - protected ProcessState $state + protected ProcessState $state, ) { } diff --git a/src/Event/ProcessEvent.php b/src/Event/ProcessEvent.php index f3b79d11..6c7b297f 100644 --- a/src/Event/ProcessEvent.php +++ b/src/Event/ProcessEvent.php @@ -5,7 +5,7 @@ /* * This file is part of the CleverAge/ProcessBundle package. * - * Copyright (c) 2017-2024 Clever-Age + * Copyright (c) Clever-Age * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. @@ -31,7 +31,7 @@ public function __construct( protected mixed $processInput = null, protected array $processContext = [], protected mixed $processOutput = null, - protected ?\Throwable $processError = null + protected ?\Throwable $processError = null, ) { } diff --git a/src/EventListener/DataQueueEventListener.php b/src/EventListener/DataQueueEventListener.php index 6f48ab5c..b405d886 100644 --- a/src/EventListener/DataQueueEventListener.php +++ b/src/EventListener/DataQueueEventListener.php @@ -5,7 +5,7 @@ /* * This file is part of the CleverAge/ProcessBundle package. * - * Copyright (c) 2017-2024 Clever-Age + * Copyright (c) Clever-Age * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. diff --git a/src/Exception/CircularProcessException.php b/src/Exception/CircularProcessException.php index c4ff2516..81939d49 100644 --- a/src/Exception/CircularProcessException.php +++ b/src/Exception/CircularProcessException.php @@ -5,7 +5,7 @@ /* * This file is part of the CleverAge/ProcessBundle package. * - * Copyright (c) 2017-2024 Clever-Age + * Copyright (c) Clever-Age * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. diff --git a/src/Exception/InvalidProcessConfigurationException.php b/src/Exception/InvalidProcessConfigurationException.php index 80a34779..aecaab1f 100644 --- a/src/Exception/InvalidProcessConfigurationException.php +++ b/src/Exception/InvalidProcessConfigurationException.php @@ -5,7 +5,7 @@ /* * This file is part of the CleverAge/ProcessBundle package. * - * Copyright (c) 2017-2024 Clever-Age + * Copyright (c) Clever-Age * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. @@ -24,7 +24,7 @@ class InvalidProcessConfigurationException extends \UnexpectedValueException imp public static function createNotInMain( ProcessConfiguration $processConfiguration, TaskConfiguration $taskConfig, - array $mainTaskList + array $mainTaskList, ): self { $taskListStr = '['.implode(', ', $mainTaskList).']'; @@ -35,7 +35,7 @@ public static function createNotInMain( public static function createEntryPointHasAncestors( ProcessConfiguration $processConfiguration, - TaskConfiguration $taskConfig + TaskConfiguration $taskConfig, ): self { return new self( "The entry-point '{$taskConfig->getCode()}' cannot have an ancestor (from process: {$processConfiguration->getCode()})" diff --git a/src/Exception/MissingProcessException.php b/src/Exception/MissingProcessException.php index 3642ee67..045372f9 100644 --- a/src/Exception/MissingProcessException.php +++ b/src/Exception/MissingProcessException.php @@ -5,7 +5,7 @@ /* * This file is part of the CleverAge/ProcessBundle package. * - * Copyright (c) 2017-2024 Clever-Age + * Copyright (c) Clever-Age * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. diff --git a/src/Exception/MissingTaskConfigurationException.php b/src/Exception/MissingTaskConfigurationException.php index 0445891c..ab1b3c77 100644 --- a/src/Exception/MissingTaskConfigurationException.php +++ b/src/Exception/MissingTaskConfigurationException.php @@ -5,7 +5,7 @@ /* * This file is part of the CleverAge/ProcessBundle package. * - * Copyright (c) 2017-2024 Clever-Age + * Copyright (c) Clever-Age * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. diff --git a/src/Exception/MissingTransformerException.php b/src/Exception/MissingTransformerException.php index a0ea2772..565ef481 100644 --- a/src/Exception/MissingTransformerException.php +++ b/src/Exception/MissingTransformerException.php @@ -5,7 +5,7 @@ /* * This file is part of the CleverAge/ProcessBundle package. * - * Copyright (c) 2017-2024 Clever-Age + * Copyright (c) Clever-Age * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. diff --git a/src/Exception/ProcessExceptionInterface.php b/src/Exception/ProcessExceptionInterface.php index f4f39edf..a0b539f8 100644 --- a/src/Exception/ProcessExceptionInterface.php +++ b/src/Exception/ProcessExceptionInterface.php @@ -5,7 +5,7 @@ /* * This file is part of the CleverAge/ProcessBundle package. * - * Copyright (c) 2017-2024 Clever-Age + * Copyright (c) Clever-Age * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. diff --git a/src/Exception/TransformerException.php b/src/Exception/TransformerException.php index 0c88e44a..5ce332df 100644 --- a/src/Exception/TransformerException.php +++ b/src/Exception/TransformerException.php @@ -5,7 +5,7 @@ /* * This file is part of the CleverAge/ProcessBundle package. * - * Copyright (c) 2017-2024 Clever-Age + * Copyright (c) Clever-Age * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. @@ -23,7 +23,7 @@ class TransformerException extends \RuntimeException implements ProcessException public function __construct( protected string $transformerCode, int $code = 0, - \Throwable $previous = null + ?\Throwable $previous = null, ) { parent::__construct('', $code, $previous); $this->updateMessage(); @@ -38,15 +38,15 @@ public function setTargetProperty(string $targetProperty): void protected function updateMessage(): void { if (isset($this->targetProperty)) { - $m = sprintf( + $m = \sprintf( "For target property '%s', transformation '%s' have failed", $this->targetProperty, $this->transformerCode ); } else { - $m = sprintf("Transformation '%s' have failed", $this->transformerCode); + $m = \sprintf("Transformation '%s' have failed", $this->transformerCode); } - if ($this->getPrevious()) { + if ($this->getPrevious() instanceof \Throwable) { $m .= ": {$this->getPrevious() ->getMessage()}"; } diff --git a/src/ExpressionLanguage/PhpFunctionProvider.php b/src/ExpressionLanguage/PhpFunctionProvider.php index 4d157b01..9a2632b7 100644 --- a/src/ExpressionLanguage/PhpFunctionProvider.php +++ b/src/ExpressionLanguage/PhpFunctionProvider.php @@ -5,7 +5,7 @@ /* * This file is part of the CleverAge/ProcessBundle package. * - * Copyright (c) 2017-2024 Clever-Age + * Copyright (c) Clever-Age * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. @@ -22,7 +22,7 @@ class PhpFunctionProvider implements ExpressionFunctionProviderInterface { public function __construct( - protected array $functions + protected array $functions, ) { } diff --git a/src/Filesystem/CsvFile.php b/src/Filesystem/CsvFile.php index 529096ae..1dc892ce 100644 --- a/src/Filesystem/CsvFile.php +++ b/src/Filesystem/CsvFile.php @@ -5,7 +5,7 @@ /* * This file is part of the CleverAge/ProcessBundle package. * - * Copyright (c) 2017-2024 Clever-Age + * Copyright (c) Clever-Age * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. @@ -29,13 +29,13 @@ public function __construct( string $delimiter = ',', string $enclosure = '"', string $escape = '\\', - array $headers = null, - string $mode = 'rb' + ?array $headers = null, + string $mode = 'rb', ) { if (!\in_array($filePath, ['php://stdin', 'php://stdout', 'php://stderr'], true)) { $dirname = \dirname($this->filePath); - if (!@mkdir($dirname, 0755, true) && !is_dir($dirname)) { - throw new \RuntimeException(sprintf('Directory "%s" was not created', $dirname)); + if (!@mkdir($dirname, 0o755, true) && !is_dir($dirname)) { + throw new \RuntimeException(\sprintf('Directory "%s" was not created', $dirname)); } } diff --git a/src/Filesystem/CsvResource.php b/src/Filesystem/CsvResource.php index bab85e4e..3c536dca 100644 --- a/src/Filesystem/CsvResource.php +++ b/src/Filesystem/CsvResource.php @@ -5,7 +5,7 @@ /* * This file is part of the CleverAge/ProcessBundle package. * - * Copyright (c) 2017-2024 Clever-Age + * Copyright (c) Clever-Age * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. @@ -13,8 +13,6 @@ namespace CleverAge\ProcessBundle\Filesystem; -use function count; - /** * Read and write CSV resources through a simple API. */ @@ -40,11 +38,11 @@ class CsvResource implements WritableStructuredFileInterface, SeekableFileInterf protected bool $seekCalled = false; public function __construct( - $resource, + mixed $resource, protected string $delimiter = ',', protected string $enclosure = '"', protected string $escape = '\\', - array $headers = null + ?array $headers = null, ) { if (!\is_resource($resource)) { $type = \gettype($resource); @@ -149,7 +147,7 @@ public function isEndOfFile(): bool /** * Warning, this function will return exactly the same value as the fgetcsv() function. */ - public function readRaw(int $length = null): array|false + public function readRaw(?int $length = null): array|false { $this->assertOpened(); ++$this->lineNumber; @@ -157,13 +155,9 @@ public function readRaw(int $length = null): array|false return fgetcsv($this->handler, $length, $this->delimiter, $this->enclosure, $this->escape); } - public function readLine(int $length = null): ?array + public function readLine(?int $length = null): ?array { - if ($this->seekCalled) { - $filePosition = "at position {$this->tell()}"; - } else { - $filePosition = "on line {$this->getLineNumber()}"; - } + $filePosition = $this->seekCalled ? "at position {$this->tell()}" : "on line {$this->getLineNumber()}"; $values = $this->readRaw($length); if (false === $values) { @@ -290,12 +284,12 @@ protected function assertOpened(): void } } - protected function parseHeaders(array $headers = null): array + protected function parseHeaders(?array $headers = null): array { // If headers are not passed in the constructor but file is readable, try to read headers from file if (null === $headers) { $autoHeaders = $this->readRaw(); - if (false === $autoHeaders || 0 === \count($autoHeaders)) { + if (false === $autoHeaders || [] === $autoHeaders) { throw new \UnexpectedValueException("Unable to read headers for {$this->getResourceName()}"); } // Remove BOM if any @@ -307,11 +301,7 @@ protected function parseHeaders(array $headers = null): array $this->manualHeaders = true; - if (!\is_array($headers)) { - throw new \UnexpectedValueException("Invalid headers for {$this->getResourceName()}, you need to pass the headers manually"); - } - - if (0 === \count($headers)) { + if ([] === $headers) { throw new \UnexpectedValueException("Empty headers for {$this->getResourceName()}, you need to pass the headers manually"); } diff --git a/src/Filesystem/FileStreamInterface.php b/src/Filesystem/FileStreamInterface.php index 542799cd..65b5b819 100644 --- a/src/Filesystem/FileStreamInterface.php +++ b/src/Filesystem/FileStreamInterface.php @@ -5,7 +5,7 @@ /* * This file is part of the CleverAge/ProcessBundle package. * - * Copyright (c) 2017-2024 Clever-Age + * Copyright (c) Clever-Age * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. @@ -27,7 +27,7 @@ public function getLineNumber(): int; public function isEndOfFile(): bool; - public function readLine(int $length = null): ?array; + public function readLine(?int $length = null): ?array; /** * This methods rewinds the file to the first line of data, skipping the headers. diff --git a/src/Filesystem/JsonStreamFile.php b/src/Filesystem/JsonStreamFile.php index 5fa7d4f0..cd4359e0 100644 --- a/src/Filesystem/JsonStreamFile.php +++ b/src/Filesystem/JsonStreamFile.php @@ -5,7 +5,7 @@ /* * This file is part of the CleverAge/ProcessBundle package. * - * Copyright (c) 2017-2024 Clever-Age + * Copyright (c) Clever-Age * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. @@ -65,7 +65,7 @@ public function isEndOfFile(): bool /** * Return an array containing current data and moving the file pointer. */ - public function readLine(int $length = null): ?array + public function readLine(?int $length = null): ?array { if ($this->isEndOfFile()) { return null; diff --git a/src/Filesystem/SeekableFileInterface.php b/src/Filesystem/SeekableFileInterface.php index 2d7ca906..f647ce7f 100644 --- a/src/Filesystem/SeekableFileInterface.php +++ b/src/Filesystem/SeekableFileInterface.php @@ -5,7 +5,7 @@ /* * This file is part of the CleverAge/ProcessBundle package. * - * Copyright (c) 2017-2024 Clever-Age + * Copyright (c) Clever-Age * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. diff --git a/src/Filesystem/StructuredFileInterface.php b/src/Filesystem/StructuredFileInterface.php index 70ce3026..15e7db2e 100644 --- a/src/Filesystem/StructuredFileInterface.php +++ b/src/Filesystem/StructuredFileInterface.php @@ -5,7 +5,7 @@ /* * This file is part of the CleverAge/ProcessBundle package. * - * Copyright (c) 2017-2024 Clever-Age + * Copyright (c) Clever-Age * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. diff --git a/src/Filesystem/WritableFileInterface.php b/src/Filesystem/WritableFileInterface.php index 2509c329..a4a61376 100644 --- a/src/Filesystem/WritableFileInterface.php +++ b/src/Filesystem/WritableFileInterface.php @@ -5,7 +5,7 @@ /* * This file is part of the CleverAge/ProcessBundle package. * - * Copyright (c) 2017-2024 Clever-Age + * Copyright (c) Clever-Age * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. diff --git a/src/Filesystem/WritableStructuredFileInterface.php b/src/Filesystem/WritableStructuredFileInterface.php index e6e283eb..62ce9c82 100644 --- a/src/Filesystem/WritableStructuredFileInterface.php +++ b/src/Filesystem/WritableStructuredFileInterface.php @@ -5,7 +5,7 @@ /* * This file is part of the CleverAge/ProcessBundle package. * - * Copyright (c) 2017-2024 Clever-Age + * Copyright (c) Clever-Age * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. diff --git a/src/Filesystem/XmlFile.php b/src/Filesystem/XmlFile.php index 194a6248..99f20607 100644 --- a/src/Filesystem/XmlFile.php +++ b/src/Filesystem/XmlFile.php @@ -5,7 +5,7 @@ /* * This file is part of the CleverAge/ProcessBundle package. * - * Copyright (c) 2017-2024 Clever-Age + * Copyright (c) Clever-Age * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. diff --git a/src/Logger/AbstractLogger.php b/src/Logger/AbstractLogger.php index 804d11cd..0a0ca91f 100644 --- a/src/Logger/AbstractLogger.php +++ b/src/Logger/AbstractLogger.php @@ -5,7 +5,7 @@ /* * This file is part of the CleverAge/ProcessBundle package. * - * Copyright (c) 2017-2024 Clever-Age + * Copyright (c) Clever-Age * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. @@ -24,11 +24,11 @@ abstract class AbstractLogger extends BaseAbstractLogger { public function __construct( - protected LoggerInterface $logger + protected LoggerInterface $logger, ) { } - public function log($level, $message, array $context = []): void + public function log($level, string|\Stringable $message, array $context = []): void { $this->logger->log($level, $message, $context); } diff --git a/src/Logger/AbstractProcessor.php b/src/Logger/AbstractProcessor.php index 544c7508..715167ab 100644 --- a/src/Logger/AbstractProcessor.php +++ b/src/Logger/AbstractProcessor.php @@ -5,7 +5,7 @@ /* * This file is part of the CleverAge/ProcessBundle package. * - * Copyright (c) 2017-2024 Clever-Age + * Copyright (c) Clever-Age * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. @@ -13,19 +13,21 @@ namespace CleverAge\ProcessBundle\Logger; +use CleverAge\ProcessBundle\Configuration\TaskConfiguration; use CleverAge\ProcessBundle\Manager\ProcessManager; +use CleverAge\ProcessBundle\Model\ProcessHistory; use Monolog\LogRecord; class AbstractProcessor { public function __construct( - protected ProcessManager $processManager + protected ProcessManager $processManager, ) { } public function __invoke(LogRecord $record): LogRecord { - if (!empty($record->context)) { + if ([] !== $record->context) { $context = $this->normalizeRecordData($record->context); $record = new LogRecord( $record->datetime, @@ -58,7 +60,7 @@ protected function normalizeRecordData(array $record): array protected function addProcessInfoToRecord(array &$record): void { $processHistory = $this->processManager->getProcessHistory(); - if (!$processHistory) { + if (!$processHistory instanceof ProcessHistory) { return; } @@ -70,7 +72,7 @@ protected function addProcessInfoToRecord(array &$record): void protected function addTaskInfoToRecord(array &$record): void { $taskConfiguration = $this->processManager->getTaskConfiguration(); - if (!$taskConfiguration) { + if (!$taskConfiguration instanceof TaskConfiguration) { return; } $this->addToRecord($record, 'task_code', $taskConfiguration->getCode()); @@ -82,7 +84,7 @@ protected function addTaskInfoToRecord(array &$record): void $this->addToRecord($record, 'error', $state->getErrorOutput()); } - if ($state->getException()) { + if ($state->getException() instanceof \Throwable) { $this->addToRecord($record, 'exception', $state->getException()); } } diff --git a/src/Logger/ProcessLogger.php b/src/Logger/ProcessLogger.php index 7565d9ef..5b17b68c 100644 --- a/src/Logger/ProcessLogger.php +++ b/src/Logger/ProcessLogger.php @@ -5,7 +5,7 @@ /* * This file is part of the CleverAge/ProcessBundle package. * - * Copyright (c) 2017-2024 Clever-Age + * Copyright (c) Clever-Age * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. diff --git a/src/Logger/ProcessProcessor.php b/src/Logger/ProcessProcessor.php index 35d1f3a4..819ddf1b 100644 --- a/src/Logger/ProcessProcessor.php +++ b/src/Logger/ProcessProcessor.php @@ -5,7 +5,7 @@ /* * This file is part of the CleverAge/ProcessBundle package. * - * Copyright (c) 2017-2024 Clever-Age + * Copyright (c) Clever-Age * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. diff --git a/src/Logger/TaskLogger.php b/src/Logger/TaskLogger.php index cb00efd3..8bee634e 100644 --- a/src/Logger/TaskLogger.php +++ b/src/Logger/TaskLogger.php @@ -5,7 +5,7 @@ /* * This file is part of the CleverAge/ProcessBundle package. * - * Copyright (c) 2017-2024 Clever-Age + * Copyright (c) Clever-Age * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. diff --git a/src/Logger/TaskProcessor.php b/src/Logger/TaskProcessor.php index 7a262eb1..ac4a7d3b 100644 --- a/src/Logger/TaskProcessor.php +++ b/src/Logger/TaskProcessor.php @@ -5,7 +5,7 @@ /* * This file is part of the CleverAge/ProcessBundle package. * - * Copyright (c) 2017-2024 Clever-Age + * Copyright (c) Clever-Age * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. diff --git a/src/Logger/TransformerProcessor.php b/src/Logger/TransformerProcessor.php index cc8cb65e..8a61c301 100644 --- a/src/Logger/TransformerProcessor.php +++ b/src/Logger/TransformerProcessor.php @@ -5,7 +5,7 @@ /* * This file is part of the CleverAge/ProcessBundle package. * - * Copyright (c) 2017-2024 Clever-Age + * Copyright (c) Clever-Age * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. diff --git a/src/Manager/ProcessManager.php b/src/Manager/ProcessManager.php index d0b2751c..e561366f 100644 --- a/src/Manager/ProcessManager.php +++ b/src/Manager/ProcessManager.php @@ -5,7 +5,7 @@ /* * This file is part of the CleverAge/ProcessBundle package. * - * Copyright (c) 2017-2024 Clever-Age + * Copyright (c) Clever-Age * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. @@ -29,9 +29,9 @@ use CleverAge\ProcessBundle\Model\ProcessState; use CleverAge\ProcessBundle\Model\TaskInterface; use CleverAge\ProcessBundle\Registry\ProcessConfigurationRegistry; -use Psr\EventDispatcher\EventDispatcherInterface; use Symfony\Component\DependencyInjection\ContainerInterface; use Symfony\Component\ErrorHandler\Error\FatalError; +use Symfony\Component\EventDispatcher\EventDispatcherInterface; /** * Execute processes. @@ -64,7 +64,7 @@ public function __construct( protected TaskLogger $taskLogger, protected ProcessConfigurationRegistry $processConfigurationRegistry, protected ContextualOptionResolver $contextualOptionResolver, - protected EventDispatcherInterface $eventDispatcher + protected EventDispatcherInterface $eventDispatcher, ) { } @@ -133,7 +133,7 @@ protected function doExecute(string $processCode, mixed $input = null, array $co } // If defined, set the input of a task - if ($processConfiguration->getEntryPoint()) { + if ($processConfiguration->getEntryPoint() instanceof TaskConfiguration) { $processConfiguration->getEntryPoint() ->getState() ->setInput($input); @@ -159,7 +159,7 @@ protected function doExecute(string $processCode, mixed $input = null, array $co // If defined, return the output of a task $returnValue = null; - if ($processConfiguration->getEndPoint()) { + if ($processConfiguration->getEndPoint() instanceof TaskConfiguration) { $returnValue = $processConfiguration->getEndPoint() ->getState() ->getOutput(); @@ -225,7 +225,7 @@ protected function initialize(TaskConfiguration $taskConfiguration): void $this->taskConfiguration = $taskConfiguration; if (TaskConfiguration::STRATEGY_STOP === $taskConfiguration->getErrorStrategy() - && \count($taskConfiguration->getErrorOutputs()) > 0) { + && [] !== $taskConfiguration->getErrorOutputs()) { $m = "Task configuration {$taskConfiguration->getCode()} has error outputs "; $m .= "but it's error strategy 'stop' implies they will never be reached."; $this->taskLogger->debug($m); @@ -289,7 +289,7 @@ protected function process(TaskConfiguration $taskConfiguration, int $executionF } if ($state->isStopped()) { $exception = $state->getException(); - if ($exception) { + if ($exception instanceof \Throwable) { $m = "Process {$state->getProcessConfiguration() ->getCode()} has failed"; $m .= " during process {$state->getTaskConfiguration() @@ -353,7 +353,7 @@ protected function process(TaskConfiguration $taskConfiguration, int $executionF protected function processExecution(TaskConfiguration $taskConfiguration, int $executionFlag): void { $task = $taskConfiguration->getTask(); - if (null === $task) { + if (!$task instanceof TaskInterface) { throw new \RuntimeException("Missing task for configuration {$taskConfiguration->getCode()}"); } $state = $taskConfiguration->getState(); @@ -393,7 +393,7 @@ protected function processExecution(TaskConfiguration $taskConfiguration, int $e } // Manage exception catching and setting the same - if ($exception) { + if ($exception instanceof \Throwable) { $this->taskLogger->log( $taskConfiguration->getLogLevel(), $exception->getMessage(), @@ -460,7 +460,7 @@ protected function finalize(TaskConfiguration $taskConfiguration): void protected function initializeStates( ProcessConfiguration $processConfiguration, - array $context = [] + array $context = [], ): ProcessHistory { $processHistory = new ProcessHistory($processConfiguration, $context); @@ -479,7 +479,7 @@ protected function initializeStates( protected function prepareNextProcess( TaskConfiguration $previousTaskConfiguration, TaskConfiguration $nextTaskConfiguration, - bool $isError = false + bool $isError = false, ): void { if ($isError) { $input = $previousTaskConfiguration->getState() diff --git a/src/Model/AbstractConfigurableTask.php b/src/Model/AbstractConfigurableTask.php index 309af297..149eae24 100644 --- a/src/Model/AbstractConfigurableTask.php +++ b/src/Model/AbstractConfigurableTask.php @@ -5,7 +5,7 @@ /* * This file is part of the CleverAge/ProcessBundle package. * - * Copyright (c) 2017-2024 Clever-Age + * Copyright (c) Clever-Age * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. diff --git a/src/Model/BlockingTaskInterface.php b/src/Model/BlockingTaskInterface.php index ad0bb7fb..5236f8ae 100644 --- a/src/Model/BlockingTaskInterface.php +++ b/src/Model/BlockingTaskInterface.php @@ -5,7 +5,7 @@ /* * This file is part of the CleverAge/ProcessBundle package. * - * Copyright (c) 2017-2024 Clever-Age + * Copyright (c) Clever-Age * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. diff --git a/src/Model/FinalizableTaskInterface.php b/src/Model/FinalizableTaskInterface.php index 063ce14c..c71bed9b 100644 --- a/src/Model/FinalizableTaskInterface.php +++ b/src/Model/FinalizableTaskInterface.php @@ -5,7 +5,7 @@ /* * This file is part of the CleverAge/ProcessBundle package. * - * Copyright (c) 2017-2024 Clever-Age + * Copyright (c) Clever-Age * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. diff --git a/src/Model/FlushableTaskInterface.php b/src/Model/FlushableTaskInterface.php index 757fb5ba..8f56f5fa 100644 --- a/src/Model/FlushableTaskInterface.php +++ b/src/Model/FlushableTaskInterface.php @@ -5,7 +5,7 @@ /* * This file is part of the CleverAge/ProcessBundle package. * - * Copyright (c) 2017-2024 Clever-Age + * Copyright (c) Clever-Age * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. diff --git a/src/Model/InitializableTaskInterface.php b/src/Model/InitializableTaskInterface.php index 9cb9a5eb..434f60b2 100644 --- a/src/Model/InitializableTaskInterface.php +++ b/src/Model/InitializableTaskInterface.php @@ -5,7 +5,7 @@ /* * This file is part of the CleverAge/ProcessBundle package. * - * Copyright (c) 2017-2024 Clever-Age + * Copyright (c) Clever-Age * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. diff --git a/src/Model/IterableTaskInterface.php b/src/Model/IterableTaskInterface.php index 7d17856b..08b34111 100644 --- a/src/Model/IterableTaskInterface.php +++ b/src/Model/IterableTaskInterface.php @@ -5,7 +5,7 @@ /* * This file is part of the CleverAge/ProcessBundle package. * - * Copyright (c) 2017-2024 Clever-Age + * Copyright (c) Clever-Age * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. diff --git a/src/Model/ProcessHistory.php b/src/Model/ProcessHistory.php index 419f1927..1149c99b 100644 --- a/src/Model/ProcessHistory.php +++ b/src/Model/ProcessHistory.php @@ -5,7 +5,7 @@ /* * This file is part of the CleverAge/ProcessBundle package. * - * Copyright (c) 2017-2024 Clever-Age + * Copyright (c) Clever-Age * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. @@ -38,7 +38,7 @@ class ProcessHistory implements \Stringable public function __construct( ProcessConfiguration $processConfiguration, - protected array $context = [] + protected array $context = [], ) { $this->id = microtime(true); $this->processCode = $processConfiguration->getCode(); @@ -120,7 +120,7 @@ public function isFailed(): bool */ public function getDuration(): ?int { - if ($this->getEndDate()) { + if ($this->getEndDate() instanceof \DateTimeInterface) { return $this->getEndDate() ->getTimestamp() - $this->getStartDate() ->getTimestamp(); diff --git a/src/Model/ProcessState.php b/src/Model/ProcessState.php index abbb2567..b6ec5c9d 100644 --- a/src/Model/ProcessState.php +++ b/src/Model/ProcessState.php @@ -5,7 +5,7 @@ /* * This file is part of the CleverAge/ProcessBundle package. * - * Copyright (c) 2017-2024 Clever-Age + * Copyright (c) Clever-Age * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. @@ -69,7 +69,7 @@ class ProcessState public function __construct( protected ProcessConfiguration $processConfiguration, - protected ProcessHistory $processHistory + protected ProcessHistory $processHistory, ) { } @@ -163,9 +163,9 @@ public function hasErrorOutput(): bool return $this->hasErrorOutput; } - public function stop(\Throwable $e = null): void + public function stop(?\Throwable $e = null): void { - if ($e) { + if ($e instanceof \Throwable) { $this->setException($e); } $this->setStopped(true); @@ -186,7 +186,7 @@ public function getException(): ?\Throwable return $this->exception; } - public function setException(\Throwable $exception = null): void + public function setException(?\Throwable $exception = null): void { $this->exception = $exception; } diff --git a/src/Model/SubprocessInstance.php b/src/Model/SubprocessInstance.php index fb444e53..35b05d5c 100644 --- a/src/Model/SubprocessInstance.php +++ b/src/Model/SubprocessInstance.php @@ -5,7 +5,7 @@ /* * This file is part of the CleverAge/ProcessBundle package. * - * Copyright (c) 2017-2024 Clever-Age + * Copyright (c) Clever-Age * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. @@ -40,7 +40,7 @@ public function __construct( protected string $processCode, protected ?string $input, protected array $context = [], - array $options = [] + array $options = [], ) { $resolver = new OptionsResolver(); $this->configureOptions($resolver); @@ -80,10 +80,8 @@ public function buildProcess(): static $arguments = [...$arguments, '--output='.$this->bufferPath, '--output-format=json-stream']; } - if (!empty($this->context)) { - foreach ($this->context as $key => $value) { - $arguments[] = sprintf('--context=%s:%s', $key, $value); - } + foreach ($this->context as $key => $value) { + $arguments[] = \sprintf('--context=%s:%s', $key, $value); } $arguments[] = $this->processCode; diff --git a/src/Model/TaskInterface.php b/src/Model/TaskInterface.php index 748e282d..0e0c0a28 100644 --- a/src/Model/TaskInterface.php +++ b/src/Model/TaskInterface.php @@ -5,7 +5,7 @@ /* * This file is part of the CleverAge/ProcessBundle package. * - * Copyright (c) 2017-2024 Clever-Age + * Copyright (c) Clever-Age * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. diff --git a/src/Registry/ProcessConfigurationRegistry.php b/src/Registry/ProcessConfigurationRegistry.php index 6c403cda..2c5c9fa4 100644 --- a/src/Registry/ProcessConfigurationRegistry.php +++ b/src/Registry/ProcessConfigurationRegistry.php @@ -5,7 +5,7 @@ /* * This file is part of the CleverAge/ProcessBundle package. * - * Copyright (c) 2017-2024 Clever-Age + * Copyright (c) Clever-Age * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. @@ -31,7 +31,7 @@ class ProcessConfigurationRegistry public function __construct( protected array $rawConfiguration, - protected string $defaultErrorStrategy + protected string $defaultErrorStrategy, ) { } diff --git a/src/Registry/TransformerRegistry.php b/src/Registry/TransformerRegistry.php index 3ab519fb..9fd4fbff 100644 --- a/src/Registry/TransformerRegistry.php +++ b/src/Registry/TransformerRegistry.php @@ -5,7 +5,7 @@ /* * This file is part of the CleverAge/ProcessBundle package. * - * Copyright (c) 2017-2024 Clever-Age + * Copyright (c) Clever-Age * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. diff --git a/src/Resources/config/services/command.yaml b/src/Resources/config/services/command.yaml deleted file mode 100644 index 4c700e2f..00000000 --- a/src/Resources/config/services/command.yaml +++ /dev/null @@ -1,7 +0,0 @@ -services: - CleverAge\ProcessBundle\Command\: - resource: '../../../Command/*' - autowire: true - autoconfigure: true - bind: - $container: '@service_container' diff --git a/src/Resources/config/services/event.yaml b/src/Resources/config/services/event.yaml deleted file mode 100644 index b5a218a1..00000000 --- a/src/Resources/config/services/event.yaml +++ /dev/null @@ -1,9 +0,0 @@ -services: - Symfony\Contracts\EventDispatcher\EventDispatcherInterface: - public: false - autowire: true - - CleverAge\ProcessBundle\EventListener\DataQueueEventListener: - public: false - tags: - - { name: kernel.event_listener, event: cleverage_process.data_queue, method: pushData } diff --git a/src/Resources/config/services/expression_language.yaml b/src/Resources/config/services/expression_language.yaml deleted file mode 100644 index 63a47a74..00000000 --- a/src/Resources/config/services/expression_language.yaml +++ /dev/null @@ -1,9 +0,0 @@ -services: - CleverAge\ProcessBundle\ExpressionLanguage\PhpFunctionProvider: - arguments: - - [ 'preg_match' ] - - cleverage_process.expression_language: - class: Symfony\Component\ExpressionLanguage\ExpressionLanguage - calls: - - ['registerProvider', ['@CleverAge\ProcessBundle\ExpressionLanguage\PhpFunctionProvider']] diff --git a/src/Resources/config/services/logger.yaml b/src/Resources/config/services/logger.yaml deleted file mode 100644 index 1968bd79..00000000 --- a/src/Resources/config/services/logger.yaml +++ /dev/null @@ -1,25 +0,0 @@ -services: - CleverAge\ProcessBundle\Logger\ProcessProcessor: - autowire: true - tags: - - { name: monolog.processor, channel: cleverage_process } - - CleverAge\ProcessBundle\Logger\TaskProcessor: - autowire: true - tags: - - { name: monolog.processor, channel: cleverage_process_task } - - CleverAge\ProcessBundle\Logger\TransformerProcessor: - autowire: true - tags: - - { name: monolog.processor, channel: cleverage_process_transformer } - - CleverAge\ProcessBundle\Logger\ProcessLogger: - autowire: true - tags: - - { name: monolog.logger, channel: cleverage_process } - - CleverAge\ProcessBundle\Logger\TaskLogger: - autowire: true - tags: - - { name: monolog.logger, channel: cleverage_process_task } diff --git a/src/Resources/config/services/manager.yaml b/src/Resources/config/services/manager.yaml deleted file mode 100644 index a4360642..00000000 --- a/src/Resources/config/services/manager.yaml +++ /dev/null @@ -1,9 +0,0 @@ -services: - CleverAge\ProcessBundle\Manager\ProcessManager: - autowire: true - public: false - arguments: - $container: '@service_container' - - CleverAge\ProcessBundle\Context\ContextualOptionResolver: - public: false diff --git a/src/Resources/config/services/registry.yaml b/src/Resources/config/services/registry.yaml deleted file mode 100644 index 7e0ec1aa..00000000 --- a/src/Resources/config/services/registry.yaml +++ /dev/null @@ -1,8 +0,0 @@ -services: - CleverAge\ProcessBundle\Registry\ProcessConfigurationRegistry: - arguments: - - ~ - - ~ - - CleverAge\ProcessBundle\Registry\TransformerRegistry: - public: false diff --git a/src/Resources/config/services/task.yaml b/src/Resources/config/services/task.yaml deleted file mode 100644 index 61e64bf7..00000000 --- a/src/Resources/config/services/task.yaml +++ /dev/null @@ -1,8 +0,0 @@ -services: - CleverAge\ProcessBundle\Task\: - resource: '../../../Task/*' - autowire: true - public: true - shared: false - tags: - - { name: monolog.logger, channel: cleverage_process_task } diff --git a/src/Task/AbstractIterableOutputTask.php b/src/Task/AbstractIterableOutputTask.php index b2c8f7f2..8e8ccb7a 100644 --- a/src/Task/AbstractIterableOutputTask.php +++ b/src/Task/AbstractIterableOutputTask.php @@ -5,7 +5,7 @@ /* * This file is part of the CleverAge/ProcessBundle package. * - * Copyright (c) 2017-2024 Clever-Age + * Copyright (c) Clever-Age * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. @@ -47,7 +47,7 @@ public function execute(ProcessState $state): void */ public function next(ProcessState $state): bool { - if (!$this->iterator) { + if (!$this->iterator instanceof \Iterator) { return false; } $this->iterator->next(); diff --git a/src/Task/AggregateIterableTask.php b/src/Task/AggregateIterableTask.php index f4fcc122..893d2206 100644 --- a/src/Task/AggregateIterableTask.php +++ b/src/Task/AggregateIterableTask.php @@ -5,7 +5,7 @@ /* * This file is part of the CleverAge/ProcessBundle package. * - * Copyright (c) 2017-2024 Clever-Age + * Copyright (c) Clever-Age * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. @@ -32,7 +32,7 @@ public function execute(ProcessState $state): void public function proceed(ProcessState $state): void { - if (0 === \count($this->result)) { + if ([] === $this->result) { $state->setSkipped(true); } else { $state->setOutput($this->result); diff --git a/src/Task/ArrayMergeTask.php b/src/Task/ArrayMergeTask.php index 6e20e7fd..a00e45ae 100644 --- a/src/Task/ArrayMergeTask.php +++ b/src/Task/ArrayMergeTask.php @@ -5,7 +5,7 @@ /* * This file is part of the CleverAge/ProcessBundle package. * - * Copyright (c) 2017-2024 Clever-Age + * Copyright (c) Clever-Age * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. diff --git a/src/Task/ColumnAggregatorTask.php b/src/Task/ColumnAggregatorTask.php index 033e14e2..829753b3 100644 --- a/src/Task/ColumnAggregatorTask.php +++ b/src/Task/ColumnAggregatorTask.php @@ -5,7 +5,7 @@ /* * This file is part of the CleverAge/ProcessBundle package. * - * Copyright (c) 2017-2024 Clever-Age + * Copyright (c) Clever-Age * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. @@ -32,7 +32,7 @@ class ColumnAggregatorTask extends AbstractConfigurableTask implements BlockingT public function __construct( PropertyAccessorInterface $accessor, - protected LoggerInterface $logger + protected LoggerInterface $logger, ) { $this->accessor = $accessor; } @@ -63,7 +63,7 @@ public function execute(ProcessState $state): void } } - if (!empty($missingColumns)) { + if ([] !== $missingColumns) { $colStr = implode(', ', $missingColumns); $message = "Missing columns [{$colStr}] in input"; @@ -84,7 +84,7 @@ protected function addValueToAggregationGroup( mixed $column, mixed $input, string $referenceKey, - string $aggregationKey + string $aggregationKey, ): void { if (!isset($this->result[$column])) { $this->result[$column] = [ diff --git a/src/Task/ConstantIterableOutputTask.php b/src/Task/ConstantIterableOutputTask.php index 415e1164..60eeeb56 100644 --- a/src/Task/ConstantIterableOutputTask.php +++ b/src/Task/ConstantIterableOutputTask.php @@ -5,7 +5,7 @@ /* * This file is part of the CleverAge/ProcessBundle package. * - * Copyright (c) 2017-2024 Clever-Age + * Copyright (c) Clever-Age * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. diff --git a/src/Task/ConstantOutputTask.php b/src/Task/ConstantOutputTask.php index 040b882d..7037cafa 100644 --- a/src/Task/ConstantOutputTask.php +++ b/src/Task/ConstantOutputTask.php @@ -5,7 +5,7 @@ /* * This file is part of the CleverAge/ProcessBundle package. * - * Copyright (c) 2017-2024 Clever-Age + * Copyright (c) Clever-Age * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. diff --git a/src/Task/CounterTask.php b/src/Task/CounterTask.php index df16e969..9b2020e5 100644 --- a/src/Task/CounterTask.php +++ b/src/Task/CounterTask.php @@ -5,7 +5,7 @@ /* * This file is part of the CleverAge/ProcessBundle package. * - * Copyright (c) 2017-2024 Clever-Age + * Copyright (c) Clever-Age * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. diff --git a/src/Task/Debug/DebugTask.php b/src/Task/Debug/DebugTask.php index 2f3dce09..9020262d 100644 --- a/src/Task/Debug/DebugTask.php +++ b/src/Task/Debug/DebugTask.php @@ -5,7 +5,7 @@ /* * This file is part of the CleverAge/ProcessBundle package. * - * Copyright (c) 2017-2024 Clever-Age + * Copyright (c) Clever-Age * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. @@ -19,8 +19,6 @@ /** * Dump the content of the input. - * - * @example https://github.com/cleverage/process-bundle-ui-demo/blob/main/config/packages/process/demo.debug.yaml */ class DebugTask implements TaskInterface { diff --git a/src/Task/Debug/DieTask.php b/src/Task/Debug/DieTask.php index 1884d133..b8625914 100644 --- a/src/Task/Debug/DieTask.php +++ b/src/Task/Debug/DieTask.php @@ -5,7 +5,7 @@ /* * This file is part of the CleverAge/ProcessBundle package. * - * Copyright (c) 2017-2024 Clever-Age + * Copyright (c) Clever-Age * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. @@ -15,20 +15,16 @@ use CleverAge\ProcessBundle\Model\ProcessState; use CleverAge\ProcessBundle\Model\TaskInterface; -use Symfony\Component\Console\Helper\Helper; /** * Class DieTask. * * Stops the process brutally - * - * @example https://github.com/cleverage/process-bundle-ui-demo/blob/main/config/packages/process/demo.die.yaml */ class DieTask implements TaskInterface { public function execute(ProcessState $state): never { - var_dump(Helper::formatMemory(memory_get_peak_usage(true))); exit; } } diff --git a/src/Task/Debug/ErrorForwarderTask.php b/src/Task/Debug/ErrorForwarderTask.php index 80f235ed..9dbc1da8 100644 --- a/src/Task/Debug/ErrorForwarderTask.php +++ b/src/Task/Debug/ErrorForwarderTask.php @@ -5,7 +5,7 @@ /* * This file is part of the CleverAge/ProcessBundle package. * - * Copyright (c) 2017-2024 Clever-Age + * Copyright (c) Clever-Age * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. diff --git a/src/Task/Debug/MemInfoDumpTask.php b/src/Task/Debug/MemInfoDumpTask.php deleted file mode 100644 index a793c680..00000000 --- a/src/Task/Debug/MemInfoDumpTask.php +++ /dev/null @@ -1,48 +0,0 @@ -getOption($state, 'file_path'), 'w'); - meminfo_dump($handler); - fclose($handler); - } else { - $this->logger->critical('meminfo PHP extension is not loaded'); - } - } - - protected function configureOptions(OptionsResolver $resolver): void - { - $resolver->setRequired(['file_path']); - $resolver->setAllowedTypes('file_path', ['string']); - } -} diff --git a/src/Task/Debug/StopwatchTask.php b/src/Task/Debug/StopwatchTask.php index 8bbaf85e..160db265 100644 --- a/src/Task/Debug/StopwatchTask.php +++ b/src/Task/Debug/StopwatchTask.php @@ -5,7 +5,7 @@ /* * This file is part of the CleverAge/ProcessBundle package. * - * Copyright (c) 2017-2024 Clever-Age + * Copyright (c) Clever-Age * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. @@ -19,13 +19,13 @@ use Symfony\Component\Stopwatch\Stopwatch; /** - * Ouputs the stopwatch the content of the input. + * Log all the __root__ events of the Stopwatch component. */ class StopwatchTask implements TaskInterface { public function __construct( protected LoggerInterface $logger, - private readonly Stopwatch $stopwatch + private readonly Stopwatch $stopwatch, ) { } diff --git a/src/Task/DummyTask.php b/src/Task/DummyTask.php index 71b9f4fe..7cb1bcae 100644 --- a/src/Task/DummyTask.php +++ b/src/Task/DummyTask.php @@ -5,7 +5,7 @@ /* * This file is part of the CleverAge/ProcessBundle package. * - * Copyright (c) 2017-2024 Clever-Age + * Copyright (c) Clever-Age * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. diff --git a/src/Task/Event/EventDispatcherTask.php b/src/Task/Event/EventDispatcherTask.php index 1233fb6b..fcf8bc92 100644 --- a/src/Task/Event/EventDispatcherTask.php +++ b/src/Task/Event/EventDispatcherTask.php @@ -5,7 +5,7 @@ /* * This file is part of the CleverAge/ProcessBundle package. * - * Copyright (c) 2017-2024 Clever-Age + * Copyright (c) Clever-Age * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. @@ -16,7 +16,7 @@ use CleverAge\ProcessBundle\Event\EventDispatcherTaskEvent; use CleverAge\ProcessBundle\Model\AbstractConfigurableTask; use CleverAge\ProcessBundle\Model\ProcessState; -use Psr\EventDispatcher\EventDispatcherInterface; +use Symfony\Component\EventDispatcher\EventDispatcherInterface; use Symfony\Component\OptionsResolver\OptionsResolver; /** @@ -26,7 +26,7 @@ class EventDispatcherTask extends AbstractConfigurableTask { public function __construct( - protected EventDispatcherInterface $eventDispatcher + protected EventDispatcherInterface $eventDispatcher, ) { } diff --git a/src/Task/File/Csv/AbstractCsvResourceTask.php b/src/Task/File/Csv/AbstractCsvResourceTask.php index 6d4d5416..a0ed37b9 100644 --- a/src/Task/File/Csv/AbstractCsvResourceTask.php +++ b/src/Task/File/Csv/AbstractCsvResourceTask.php @@ -5,7 +5,7 @@ /* * This file is part of the CleverAge/ProcessBundle package. * - * Copyright (c) 2017-2024 Clever-Age + * Copyright (c) Clever-Age * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. @@ -35,7 +35,7 @@ public function finalize(ProcessState $state): void protected function initFile(ProcessState $state): void { - if ($this->csv) { + if ($this->csv instanceof CsvResource) { return; } $options = $this->getOptions($state); diff --git a/src/Task/File/Csv/AbstractCsvTask.php b/src/Task/File/Csv/AbstractCsvTask.php index a1c2f884..dd7d0cf9 100644 --- a/src/Task/File/Csv/AbstractCsvTask.php +++ b/src/Task/File/Csv/AbstractCsvTask.php @@ -5,7 +5,7 @@ /* * This file is part of the CleverAge/ProcessBundle package. * - * Copyright (c) 2017-2024 Clever-Age + * Copyright (c) Clever-Age * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. @@ -14,6 +14,7 @@ namespace CleverAge\ProcessBundle\Task\File\Csv; use CleverAge\ProcessBundle\Filesystem\CsvFile; +use CleverAge\ProcessBundle\Filesystem\CsvResource; use CleverAge\ProcessBundle\Model\ProcessState; use Symfony\Component\OptionsResolver\OptionsResolver; @@ -25,7 +26,7 @@ abstract class AbstractCsvTask extends AbstractCsvResourceTask { protected function initFile(ProcessState $state): void { - if ($this->csv) { + if ($this->csv instanceof CsvResource) { return; } $options = $this->getOptions($state); diff --git a/src/Task/File/Csv/CsvReaderTask.php b/src/Task/File/Csv/CsvReaderTask.php index 2a0c9e85..afe16bd8 100644 --- a/src/Task/File/Csv/CsvReaderTask.php +++ b/src/Task/File/Csv/CsvReaderTask.php @@ -5,7 +5,7 @@ /* * This file is part of the CleverAge/ProcessBundle package. * - * Copyright (c) 2017-2024 Clever-Age + * Copyright (c) Clever-Age * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. @@ -26,7 +26,7 @@ class CsvReaderTask extends AbstractCsvTask implements IterableTaskInterface { public function __construct( - protected LoggerInterface $logger + protected LoggerInterface $logger, ) { } diff --git a/src/Task/File/Csv/CsvSplitterTask.php b/src/Task/File/Csv/CsvSplitterTask.php index 8cbc3b8b..234017a4 100644 --- a/src/Task/File/Csv/CsvSplitterTask.php +++ b/src/Task/File/Csv/CsvSplitterTask.php @@ -5,7 +5,7 @@ /* * This file is part of the CleverAge/ProcessBundle package. * - * Copyright (c) 2017-2024 Clever-Age + * Copyright (c) Clever-Age * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. @@ -26,7 +26,7 @@ class CsvSplitterTask extends InputCsvReaderTask public function execute(ProcessState $state): void { $options = $this->getOptions($state); - if (null === $this->csv) { + if (!$this->csv instanceof CsvResource) { $headers = $this->getHeaders($state, $options); $csv = new CsvFile( $options['file_path'], @@ -72,7 +72,7 @@ public function finalize(ProcessState $state): void } } - protected function splitCsv(CsvFile $csv, int $maxLines): string + protected function splitCsv(CsvResource $csv, int $maxLines): string { $tmpFilePath = sys_get_temp_dir().\DIRECTORY_SEPARATOR.'php_'.uniqid('process', false).'.csv'; $tmpFile = fopen($tmpFilePath, 'wb+'); diff --git a/src/Task/File/Csv/CsvWriterTask.php b/src/Task/File/Csv/CsvWriterTask.php index 813013e5..d1145dec 100644 --- a/src/Task/File/Csv/CsvWriterTask.php +++ b/src/Task/File/Csv/CsvWriterTask.php @@ -5,7 +5,7 @@ /* * This file is part of the CleverAge/ProcessBundle package. * - * Copyright (c) 2017-2024 Clever-Age + * Copyright (c) Clever-Age * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. diff --git a/src/Task/File/Csv/InputCsvReaderTask.php b/src/Task/File/Csv/InputCsvReaderTask.php index b819548a..7afc735c 100644 --- a/src/Task/File/Csv/InputCsvReaderTask.php +++ b/src/Task/File/Csv/InputCsvReaderTask.php @@ -5,7 +5,7 @@ /* * This file is part of the CleverAge/ProcessBundle package. * - * Copyright (c) 2017-2024 Clever-Age + * Copyright (c) Clever-Age * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. diff --git a/src/Task/File/FileFetchTask.php b/src/Task/File/FileFetchTask.php deleted file mode 100644 index e9cb12c5..00000000 --- a/src/Task/File/FileFetchTask.php +++ /dev/null @@ -1,142 +0,0 @@ -mountManager) { - throw new ServiceNotFoundException('MountManager service not found, you need to install FlySystemBundle'); - } - // Configure options - parent::initialize($state); - - $this->sourceFS = new Filesystem($this->getOption($state, 'source_filesystem')); - $this->destinationFS = new Filesystem($this->getOption($state, 'destination_filesystem')); - } - - public function execute(ProcessState $state): void - { - $this->findMatchingFiles($state); - - $file = current($this->matchingFiles); - if (!$file) { - $state->setSkipped(true); - - return; - } - - $this->doFileCopy($state, $file, $this->getOption($state, 'remove_source')); - $state->setOutput($file); - } - - public function next(ProcessState $state): bool - { - $this->findMatchingFiles($state); - - return next($this->matchingFiles); - } - - protected function findMatchingFiles(ProcessState $state): void - { - $filePattern = $this->getOption($state, 'file_pattern'); - if ($filePattern) { - foreach ($this->sourceFS->listContents('/') as $file) { - if ('file' === $file['type'] - && preg_match($filePattern, (string) $file['path']) - && !\in_array($file['path'], $this->matchingFiles, true)) { - $this->matchingFiles[] = $file['path']; - } - } - } else { - $input = $state->getInput(); - if (!$input) { - throw new \UnexpectedValueException('No pattern neither input provided for the Task'); - } - if (\is_array($input)) { - foreach ($input as $file) { - if (!\in_array($file, $this->matchingFiles, true)) { - $this->matchingFiles[] = $file; - } - } - } elseif (!\in_array($input, $this->matchingFiles, true)) { - $this->matchingFiles[] = $input; - } - } - } - - protected function doFileCopy(ProcessState $state, string $filename, bool $removeSource): string|bool|null - { - $prefixFrom = $this->getOption($state, 'source_filesystem'); - - $buffer = $this->sourceFS->readStream($filename); - - try { - $this->destinationFS->writeStream($filename, $buffer); - $result = true; - } catch (FilesystemException) { - $result = false; - } - - if (\is_resource($buffer)) { - fclose($buffer); - } - - if ($removeSource) { - $this->sourceFS->delete(sprintf('%s://%s', $prefixFrom, $filename)); - } - - return $result ? $filename : null; - } - - protected function configureOptions(OptionsResolver $resolver): void - { - $resolver->setRequired(['source_filesystem', 'destination_filesystem']); - $resolver->setAllowedTypes('source_filesystem', 'string'); - $resolver->setAllowedTypes('destination_filesystem', 'string'); - - $resolver->setDefault('file_pattern', null); - $resolver->setAllowedTypes('file_pattern', ['string', 'null']); - - $resolver->setDefault('remove_source', false); - $resolver->setAllowedTypes('remove_source', 'boolean'); - } -} diff --git a/src/Task/File/FileMoverTask.php b/src/Task/File/FileMoverTask.php index 81cf17c2..e9070cd1 100644 --- a/src/Task/File/FileMoverTask.php +++ b/src/Task/File/FileMoverTask.php @@ -5,7 +5,7 @@ /* * This file is part of the CleverAge/ProcessBundle package. * - * Copyright (c) 2017-2024 Clever-Age + * Copyright (c) Clever-Age * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. diff --git a/src/Task/File/FileReaderTask.php b/src/Task/File/FileReaderTask.php index ea69db22..2261acbe 100644 --- a/src/Task/File/FileReaderTask.php +++ b/src/Task/File/FileReaderTask.php @@ -5,7 +5,7 @@ /* * This file is part of the CleverAge/ProcessBundle package. * - * Copyright (c) 2017-2024 Clever-Age + * Copyright (c) Clever-Age * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. diff --git a/src/Task/File/FileRemoverTask.php b/src/Task/File/FileRemoverTask.php index 03e68145..dda53166 100644 --- a/src/Task/File/FileRemoverTask.php +++ b/src/Task/File/FileRemoverTask.php @@ -5,7 +5,7 @@ /* * This file is part of the CleverAge/ProcessBundle package. * - * Copyright (c) 2017-2024 Clever-Age + * Copyright (c) Clever-Age * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. diff --git a/src/Task/File/FileWriterTask.php b/src/Task/File/FileWriterTask.php index d3dc0740..5378099b 100644 --- a/src/Task/File/FileWriterTask.php +++ b/src/Task/File/FileWriterTask.php @@ -5,7 +5,7 @@ /* * This file is part of the CleverAge/ProcessBundle package. * - * Copyright (c) 2017-2024 Clever-Age + * Copyright (c) Clever-Age * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. diff --git a/src/Task/File/FolderBrowserTask.php b/src/Task/File/FolderBrowserTask.php index 6eeb8e5d..6668c3eb 100644 --- a/src/Task/File/FolderBrowserTask.php +++ b/src/Task/File/FolderBrowserTask.php @@ -5,7 +5,7 @@ /* * This file is part of the CleverAge/ProcessBundle package. * - * Copyright (c) 2017-2024 Clever-Age + * Copyright (c) Clever-Age * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. @@ -35,7 +35,7 @@ class FolderBrowserTask extends AbstractConfigurableTask implements IterableTask protected \Iterator|array|null $files = null; public function __construct( - protected LoggerInterface $logger + protected LoggerInterface $logger, ) { } diff --git a/src/Task/File/InputFolderBrowserTask.php b/src/Task/File/InputFolderBrowserTask.php index 5d1fb90b..2d6bb67b 100644 --- a/src/Task/File/InputFolderBrowserTask.php +++ b/src/Task/File/InputFolderBrowserTask.php @@ -5,7 +5,7 @@ /* * This file is part of the CleverAge/ProcessBundle package. * - * Copyright (c) 2017-2024 Clever-Age + * Copyright (c) Clever-Age * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. diff --git a/src/Task/File/JsonStream/JsonStreamReaderTask.php b/src/Task/File/JsonStream/JsonStreamReaderTask.php index 9f77ab0d..8db6fc26 100644 --- a/src/Task/File/JsonStream/JsonStreamReaderTask.php +++ b/src/Task/File/JsonStream/JsonStreamReaderTask.php @@ -5,7 +5,7 @@ /* * This file is part of the CleverAge/ProcessBundle package. * - * Copyright (c) 2017-2024 Clever-Age + * Copyright (c) Clever-Age * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. @@ -23,7 +23,7 @@ class JsonStreamReaderTask implements IterableTaskInterface public function execute(ProcessState $state): void { - if (null === $this->file) { + if (!$this->file instanceof JsonStreamFile) { $this->file = new JsonStreamFile($this->getFilePath($state), 'rb'); } diff --git a/src/Task/File/Xml/XmlReaderTask.php b/src/Task/File/Xml/XmlReaderTask.php index 69535635..236420a1 100644 --- a/src/Task/File/Xml/XmlReaderTask.php +++ b/src/Task/File/Xml/XmlReaderTask.php @@ -5,7 +5,7 @@ /* * This file is part of the CleverAge/ProcessBundle package. * - * Copyright (c) 2017-2024 Clever-Age + * Copyright (c) Clever-Age * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. @@ -25,7 +25,7 @@ class XmlReaderTask extends AbstractConfigurableTask { public function __construct( - protected LoggerInterface $logger + protected LoggerInterface $logger, ) { } diff --git a/src/Task/File/Xml/XmlWriterTask.php b/src/Task/File/Xml/XmlWriterTask.php index 64548f33..6c88226a 100644 --- a/src/Task/File/Xml/XmlWriterTask.php +++ b/src/Task/File/Xml/XmlWriterTask.php @@ -5,7 +5,7 @@ /* * This file is part of the CleverAge/ProcessBundle package. * - * Copyright (c) 2017-2024 Clever-Age + * Copyright (c) Clever-Age * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. @@ -25,7 +25,7 @@ class XmlWriterTask extends AbstractConfigurableTask { public function __construct( - protected LoggerInterface $logger + protected LoggerInterface $logger, ) { } diff --git a/src/Task/File/YamlReaderTask.php b/src/Task/File/Yaml/YamlReaderTask.php similarity index 94% rename from src/Task/File/YamlReaderTask.php rename to src/Task/File/Yaml/YamlReaderTask.php index 67174114..13277cf1 100644 --- a/src/Task/File/YamlReaderTask.php +++ b/src/Task/File/Yaml/YamlReaderTask.php @@ -5,13 +5,13 @@ /* * This file is part of the CleverAge/ProcessBundle package. * - * Copyright (c) 2017-2024 Clever-Age + * Copyright (c) Clever-Age * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace CleverAge\ProcessBundle\Task\File; +namespace CleverAge\ProcessBundle\Task\File\Yaml; use CleverAge\ProcessBundle\Model\ProcessState; use CleverAge\ProcessBundle\Task\AbstractIterableOutputTask; diff --git a/src/Task/File/YamlWriterTask.php b/src/Task/File/Yaml/YamlWriterTask.php similarity index 93% rename from src/Task/File/YamlWriterTask.php rename to src/Task/File/Yaml/YamlWriterTask.php index 0fa18844..f557cae2 100644 --- a/src/Task/File/YamlWriterTask.php +++ b/src/Task/File/Yaml/YamlWriterTask.php @@ -5,13 +5,13 @@ /* * This file is part of the CleverAge/ProcessBundle package. * - * Copyright (c) 2017-2024 Clever-Age + * Copyright (c) Clever-Age * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace CleverAge\ProcessBundle\Task\File; +namespace CleverAge\ProcessBundle\Task\File\Yaml; use CleverAge\ProcessBundle\Model\AbstractConfigurableTask; use CleverAge\ProcessBundle\Model\ProcessState; diff --git a/src/Task/FilterTask.php b/src/Task/FilterTask.php index 38715c3c..8ea0abae 100644 --- a/src/Task/FilterTask.php +++ b/src/Task/FilterTask.php @@ -5,7 +5,7 @@ /* * This file is part of the CleverAge/ProcessBundle package. * - * Copyright (c) 2017-2024 Clever-Age + * Copyright (c) Clever-Age * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. diff --git a/src/Task/GroupByAggregateIterableTask.php b/src/Task/GroupByAggregateIterableTask.php index 3d676ca3..b92e2f18 100644 --- a/src/Task/GroupByAggregateIterableTask.php +++ b/src/Task/GroupByAggregateIterableTask.php @@ -5,7 +5,7 @@ /* * This file is part of the CleverAge/ProcessBundle package. * - * Copyright (c) 2017-2024 Clever-Age + * Copyright (c) Clever-Age * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. @@ -33,7 +33,7 @@ class GroupByAggregateIterableTask extends AbstractConfigurableTask implements B protected array $result = []; public function __construct( - protected PropertyAccessorInterface $accessor + protected PropertyAccessorInterface $accessor, ) { } @@ -61,7 +61,7 @@ public function execute(ProcessState $state): void public function proceed(ProcessState $state): void { - if (0 === \count($this->result)) { + if ([] === $this->result) { $state->setSkipped(true); } else { $state->setOutput($this->result); diff --git a/src/Task/InputAggregatorTask.php b/src/Task/InputAggregatorTask.php index 28ccf5e4..c5b68fa3 100644 --- a/src/Task/InputAggregatorTask.php +++ b/src/Task/InputAggregatorTask.php @@ -5,7 +5,7 @@ /* * This file is part of the CleverAge/ProcessBundle package. * - * Copyright (c) 2017-2024 Clever-Age + * Copyright (c) Clever-Age * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. @@ -54,7 +54,7 @@ public function execute(ProcessState $state): void $state->setOutput($this->inputs); $keepInputs = $this->getOption($state, 'keep_inputs'); // Only clear inputs that are not in the keep_inputs option - foreach ($this->inputs as $inputCode => $value) { + foreach (array_keys($this->inputs) as $inputCode) { if (null !== $keepInputs && \in_array($inputCode, $keepInputs, true)) { continue; } @@ -83,7 +83,7 @@ protected function configureOptions(OptionsResolver $resolver): void protected function getInputCode(ProcessState $state): string { $previousState = $state->getPreviousState(); - if (!$previousState) { + if (!$previousState instanceof ProcessState) { throw new \RuntimeException('No previous state for current task'); } $previousTaskCode = $previousState->getTaskConfiguration() diff --git a/src/Task/InputIteratorTask.php b/src/Task/InputIteratorTask.php index 301c24b3..a079626d 100644 --- a/src/Task/InputIteratorTask.php +++ b/src/Task/InputIteratorTask.php @@ -5,7 +5,7 @@ /* * This file is part of the CleverAge/ProcessBundle package. * - * Copyright (c) 2017-2024 Clever-Age + * Copyright (c) Clever-Age * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. diff --git a/src/Task/IterableBatchTask.php b/src/Task/IterableBatchTask.php index 15f46e24..9b751fba 100644 --- a/src/Task/IterableBatchTask.php +++ b/src/Task/IterableBatchTask.php @@ -5,7 +5,7 @@ /* * This file is part of the CleverAge/ProcessBundle package. * - * Copyright (c) 2017-2024 Clever-Age + * Copyright (c) Clever-Age * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. @@ -31,7 +31,7 @@ class IterableBatchTask extends AbstractConfigurableTask implements FlushableTas protected bool $flushMode = false; public function __construct( - protected LoggerInterface $logger + protected LoggerInterface $logger, ) { } @@ -61,7 +61,7 @@ public function execute(ProcessState $state): void } // Detect flushing - if (null !== $batchCount && (null === $this->outputQueue ? 0 : \count($this->outputQueue)) >= $batchCount) { + if (null !== $batchCount && ($this->outputQueue instanceof \SplQueue ? \count($this->outputQueue) : 0) >= $batchCount) { $this->flushMode = true; } @@ -76,7 +76,7 @@ public function execute(ProcessState $state): void public function next(ProcessState $state): bool { // Stop flushing once over - if (!(null === $this->outputQueue ? 0 : \count($this->outputQueue))) { + if (($this->outputQueue instanceof \SplQueue ? \count($this->outputQueue) : 0) === 0) { $this->flushMode = false; } diff --git a/src/Task/ObjectUpdaterTask.php b/src/Task/ObjectUpdaterTask.php index 8136b7bd..30a53641 100644 --- a/src/Task/ObjectUpdaterTask.php +++ b/src/Task/ObjectUpdaterTask.php @@ -5,7 +5,7 @@ /* * This file is part of the CleverAge/ProcessBundle package. * - * Copyright (c) 2017-2024 Clever-Age + * Copyright (c) Clever-Age * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. @@ -24,7 +24,7 @@ class ObjectUpdaterTask extends AbstractConfigurableTask { public function __construct( - protected PropertyAccessorInterface $accessor + protected PropertyAccessorInterface $accessor, ) { } diff --git a/src/Task/Process/CommandRunnerTask.php b/src/Task/Process/CommandRunnerTask.php index 999e5573..a988ff3e 100644 --- a/src/Task/Process/CommandRunnerTask.php +++ b/src/Task/Process/CommandRunnerTask.php @@ -5,7 +5,7 @@ /* * This file is part of the CleverAge/ProcessBundle package. * - * Copyright (c) 2017-2024 Clever-Age + * Copyright (c) Clever-Age * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. @@ -25,7 +25,7 @@ class CommandRunnerTask extends AbstractConfigurableTask { public function __construct( - protected KernelInterface $kernel + protected KernelInterface $kernel, ) { } diff --git a/src/Task/Process/ProcessExecutorTask.php b/src/Task/Process/ProcessExecutorTask.php index e9a515c2..6b27a171 100644 --- a/src/Task/Process/ProcessExecutorTask.php +++ b/src/Task/Process/ProcessExecutorTask.php @@ -5,7 +5,7 @@ /* * This file is part of the CleverAge/ProcessBundle package. * - * Copyright (c) 2017-2024 Clever-Age + * Copyright (c) Clever-Age * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. @@ -18,7 +18,7 @@ use CleverAge\ProcessBundle\Model\ProcessState; use CleverAge\ProcessBundle\Registry\ProcessConfigurationRegistry; use Psr\Log\LoggerInterface; -use Symfony\Component\Form\Exception\InvalidConfigurationException; +use Symfony\Component\Config\Definition\Exception\InvalidConfigurationException; use Symfony\Component\OptionsResolver\Options; use Symfony\Component\OptionsResolver\OptionsResolver; @@ -32,7 +32,7 @@ class ProcessExecutorTask extends AbstractConfigurableTask public function __construct( protected ProcessManager $processManager, protected ProcessConfigurationRegistry $processRegistry, - protected LoggerInterface $logger + protected LoggerInterface $logger, ) { } diff --git a/src/Task/Process/ProcessLauncherTask.php b/src/Task/Process/ProcessLauncherTask.php index 1661b87f..8b3c4aad 100644 --- a/src/Task/Process/ProcessLauncherTask.php +++ b/src/Task/Process/ProcessLauncherTask.php @@ -5,7 +5,7 @@ /* * This file is part of the CleverAge/ProcessBundle package. * - * Copyright (c) 2017-2024 Clever-Age + * Copyright (c) Clever-Age * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. @@ -42,7 +42,7 @@ class ProcessLauncherTask extends AbstractConfigurableTask implements FlushableT public function __construct( protected LoggerInterface $logger, protected ProcessConfigurationRegistry $processRegistry, - protected KernelInterface $kernel + protected KernelInterface $kernel, ) { $this->finishedBuffers = new \SplQueue(); } @@ -78,7 +78,7 @@ public function flush(ProcessState $state): void } // After dequeue, stop flush - if ($this->finishedBuffers->isEmpty() && !\count($this->launchedProcesses)) { + if ($this->finishedBuffers->isEmpty() && [] === $this->launchedProcesses) { $this->flushMode = false; } } @@ -96,7 +96,7 @@ public function next(ProcessState $state): bool // if we are in flush mode, we should wait for process to finish if ($this->flushMode) { - return \count($this->launchedProcesses) > 0; + return [] !== $this->launchedProcesses; } usleep($this->getOption($state, 'sleep_on_finalize_interval')); diff --git a/src/Task/PropertyGetterTask.php b/src/Task/PropertyGetterTask.php index a898f4ea..10d97f85 100644 --- a/src/Task/PropertyGetterTask.php +++ b/src/Task/PropertyGetterTask.php @@ -5,7 +5,7 @@ /* * This file is part of the CleverAge/ProcessBundle package. * - * Copyright (c) 2017-2024 Clever-Age + * Copyright (c) Clever-Age * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. @@ -26,7 +26,7 @@ class PropertyGetterTask extends AbstractConfigurableTask { public function __construct( protected LoggerInterface $logger, - protected PropertyAccessorInterface $accessor + protected PropertyAccessorInterface $accessor, ) { } diff --git a/src/Task/PropertySetterTask.php b/src/Task/PropertySetterTask.php index 56be23f8..2117b4c9 100644 --- a/src/Task/PropertySetterTask.php +++ b/src/Task/PropertySetterTask.php @@ -5,7 +5,7 @@ /* * This file is part of the CleverAge/ProcessBundle package. * - * Copyright (c) 2017-2024 Clever-Age + * Copyright (c) Clever-Age * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. @@ -26,7 +26,7 @@ class PropertySetterTask extends AbstractConfigurableTask { public function __construct( protected LoggerInterface $logger, - protected PropertyAccessorInterface $accessor + protected PropertyAccessorInterface $accessor, ) { } diff --git a/src/Task/Reporting/AdvancedStatCounterTask.php b/src/Task/Reporting/AdvancedStatCounterTask.php index fed1243c..e7d85b16 100644 --- a/src/Task/Reporting/AdvancedStatCounterTask.php +++ b/src/Task/Reporting/AdvancedStatCounterTask.php @@ -5,7 +5,7 @@ /* * This file is part of the CleverAge/ProcessBundle package. * - * Copyright (c) 2017-2024 Clever-Age + * Copyright (c) Clever-Age * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. @@ -32,14 +32,14 @@ class AdvancedStatCounterTask extends AbstractConfigurableTask protected int $preInitCounter = 0; public function __construct( - protected LoggerInterface $logger + protected LoggerInterface $logger, ) { } public function execute(ProcessState $state): void { $now = new \DateTime(); - if (!$this->startedAt) { + if (!$this->startedAt instanceof \DateTime) { $this->startedAt = $now; $this->lastUpdate = $now; } diff --git a/src/Task/Reporting/LoggerTask.php b/src/Task/Reporting/LoggerTask.php index dc73bbd9..f990a2c6 100644 --- a/src/Task/Reporting/LoggerTask.php +++ b/src/Task/Reporting/LoggerTask.php @@ -5,7 +5,7 @@ /* * This file is part of the CleverAge/ProcessBundle package. * - * Copyright (c) 2017-2024 Clever-Age + * Copyright (c) Clever-Age * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. @@ -28,7 +28,7 @@ class LoggerTask extends AbstractConfigurableTask { public function __construct( protected LoggerInterface $logger, - protected PropertyAccessorInterface $accessor + protected PropertyAccessorInterface $accessor, ) { } diff --git a/src/Task/Reporting/StatCounterTask.php b/src/Task/Reporting/StatCounterTask.php index 21bc005d..c12285c1 100644 --- a/src/Task/Reporting/StatCounterTask.php +++ b/src/Task/Reporting/StatCounterTask.php @@ -5,7 +5,7 @@ /* * This file is part of the CleverAge/ProcessBundle package. * - * Copyright (c) 2017-2024 Clever-Age + * Copyright (c) Clever-Age * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. @@ -25,7 +25,7 @@ class StatCounterTask implements FinalizableTaskInterface protected int $counter = 0; public function __construct( - protected LoggerInterface $logger + protected LoggerInterface $logger, ) { } diff --git a/src/Task/RowAggregatorTask.php b/src/Task/RowAggregatorTask.php index 163b1bfc..c43317d3 100644 --- a/src/Task/RowAggregatorTask.php +++ b/src/Task/RowAggregatorTask.php @@ -5,7 +5,7 @@ /* * This file is part of the CleverAge/ProcessBundle package. * - * Copyright (c) 2017-2024 Clever-Age + * Copyright (c) Clever-Age * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. @@ -31,7 +31,7 @@ class RowAggregatorTask extends AbstractConfigurableTask implements BlockingTask protected array $result = []; public function __construct( - protected LoggerInterface $logger + protected LoggerInterface $logger, ) { } diff --git a/src/Task/Serialization/DenormalizerTask.php b/src/Task/Serialization/DenormalizerTask.php index 975b573a..6edecc00 100644 --- a/src/Task/Serialization/DenormalizerTask.php +++ b/src/Task/Serialization/DenormalizerTask.php @@ -5,7 +5,7 @@ /* * This file is part of the CleverAge/ProcessBundle package. * - * Copyright (c) 2017-2024 Clever-Age + * Copyright (c) Clever-Age * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. @@ -24,7 +24,7 @@ class DenormalizerTask extends AbstractConfigurableTask { public function __construct( - protected DenormalizerInterface $denormalizer + protected DenormalizerInterface $denormalizer, ) { } diff --git a/src/Task/Serialization/DeserializerTask.php b/src/Task/Serialization/DeserializerTask.php index 1287eeff..654a535d 100644 --- a/src/Task/Serialization/DeserializerTask.php +++ b/src/Task/Serialization/DeserializerTask.php @@ -5,7 +5,7 @@ /* * This file is part of the CleverAge/ProcessBundle package. * - * Copyright (c) 2017-2024 Clever-Age + * Copyright (c) Clever-Age * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. @@ -21,7 +21,7 @@ class DeserializerTask extends AbstractConfigurableTask { public function __construct( - protected SerializerInterface $serializer + protected SerializerInterface $serializer, ) { } diff --git a/src/Task/Serialization/NormalizerTask.php b/src/Task/Serialization/NormalizerTask.php index 2e7d43d3..8c43ed1b 100644 --- a/src/Task/Serialization/NormalizerTask.php +++ b/src/Task/Serialization/NormalizerTask.php @@ -5,7 +5,7 @@ /* * This file is part of the CleverAge/ProcessBundle package. * - * Copyright (c) 2017-2024 Clever-Age + * Copyright (c) Clever-Age * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. @@ -24,7 +24,7 @@ class NormalizerTask extends AbstractConfigurableTask { public function __construct( - protected NormalizerInterface $normalizer + protected NormalizerInterface $normalizer, ) { } diff --git a/src/Task/Serialization/SerializerTask.php b/src/Task/Serialization/SerializerTask.php index 054208cb..644447b0 100644 --- a/src/Task/Serialization/SerializerTask.php +++ b/src/Task/Serialization/SerializerTask.php @@ -5,7 +5,7 @@ /* * This file is part of the CleverAge/ProcessBundle package. * - * Copyright (c) 2017-2024 Clever-Age + * Copyright (c) Clever-Age * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. @@ -21,7 +21,7 @@ class SerializerTask extends AbstractConfigurableTask { public function __construct( - protected SerializerInterface $serializer + protected SerializerInterface $serializer, ) { } diff --git a/src/Task/SimpleBatchTask.php b/src/Task/SimpleBatchTask.php index e0173bc7..b022dd70 100644 --- a/src/Task/SimpleBatchTask.php +++ b/src/Task/SimpleBatchTask.php @@ -5,7 +5,7 @@ /* * This file is part of the CleverAge/ProcessBundle package. * - * Copyright (c) 2017-2024 Clever-Age + * Copyright (c) Clever-Age * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. @@ -27,7 +27,7 @@ class SimpleBatchTask extends AbstractConfigurableTask implements FlushableTaskI public function flush(ProcessState $state): void { - if (0 === \count($this->elements)) { + if ([] === $this->elements) { $state->setSkipped(true); } else { $state->setOutput($this->elements); diff --git a/src/Task/SkipEmptyTask.php b/src/Task/SkipEmptyTask.php index b649864a..1663e28f 100644 --- a/src/Task/SkipEmptyTask.php +++ b/src/Task/SkipEmptyTask.php @@ -5,7 +5,7 @@ /* * This file is part of the CleverAge/ProcessBundle package. * - * Copyright (c) 2017-2024 Clever-Age + * Copyright (c) Clever-Age * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. diff --git a/src/Task/SplitJoinLineTask.php b/src/Task/SplitJoinLineTask.php index 6079d851..6d695c5b 100644 --- a/src/Task/SplitJoinLineTask.php +++ b/src/Task/SplitJoinLineTask.php @@ -5,7 +5,7 @@ /* * This file is part of the CleverAge/ProcessBundle package. * - * Copyright (c) 2017-2024 Clever-Age + * Copyright (c) Clever-Age * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. diff --git a/src/Task/StopTask.php b/src/Task/StopTask.php index c7ab909a..c8945cd8 100644 --- a/src/Task/StopTask.php +++ b/src/Task/StopTask.php @@ -5,7 +5,7 @@ /* * This file is part of the CleverAge/ProcessBundle package. * - * Copyright (c) 2017-2024 Clever-Age + * Copyright (c) Clever-Age * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. diff --git a/src/Task/TransformerTask.php b/src/Task/TransformerTask.php index 64502a71..f04d8832 100644 --- a/src/Task/TransformerTask.php +++ b/src/Task/TransformerTask.php @@ -5,7 +5,7 @@ /* * This file is part of the CleverAge/ProcessBundle package. * - * Copyright (c) 2017-2024 Clever-Age + * Copyright (c) Clever-Age * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. @@ -33,7 +33,7 @@ class TransformerTask extends AbstractConfigurableTask public function __construct( protected LoggerInterface $logger, - TransformerRegistry $transformerRegistry + TransformerRegistry $transformerRegistry, ) { $this->transformerRegistry = $transformerRegistry; } diff --git a/src/Task/Validation/ValidatorTask.php b/src/Task/Validation/ValidatorTask.php index efd82b10..ae7510b6 100644 --- a/src/Task/Validation/ValidatorTask.php +++ b/src/Task/Validation/ValidatorTask.php @@ -5,7 +5,7 @@ /* * This file is part of the CleverAge/ProcessBundle package. * - * Copyright (c) 2017-2024 Clever-Age + * Copyright (c) Clever-Age * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. @@ -30,7 +30,7 @@ class ValidatorTask extends AbstractConfigurableTask { public function __construct( protected LoggerInterface $logger, - protected ValidatorInterface $validator + protected ValidatorInterface $validator, ) { } diff --git a/src/Transformer/ArrayElementTransformer.php b/src/Transformer/Array/ArrayElementTransformer.php similarity index 84% rename from src/Transformer/ArrayElementTransformer.php rename to src/Transformer/Array/ArrayElementTransformer.php index 86cff75e..933e12a8 100644 --- a/src/Transformer/ArrayElementTransformer.php +++ b/src/Transformer/Array/ArrayElementTransformer.php @@ -5,14 +5,15 @@ /* * This file is part of the CleverAge/ProcessBundle package. * - * Copyright (c) 2017-2024 Clever-Age + * Copyright (c) Clever-Age * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace CleverAge\ProcessBundle\Transformer; +namespace CleverAge\ProcessBundle\Transformer\Array; +use CleverAge\ProcessBundle\Transformer\ConfigurableTransformerInterface; use Symfony\Component\OptionsResolver\OptionsResolver; /** diff --git a/src/Transformer/ArrayFilterTransformer.php b/src/Transformer/Array/ArrayFilterTransformer.php similarity index 87% rename from src/Transformer/ArrayFilterTransformer.php rename to src/Transformer/Array/ArrayFilterTransformer.php index 2a942149..a755a985 100644 --- a/src/Transformer/ArrayFilterTransformer.php +++ b/src/Transformer/Array/ArrayFilterTransformer.php @@ -5,14 +5,16 @@ /* * This file is part of the CleverAge/ProcessBundle package. * - * Copyright (c) 2017-2024 Clever-Age + * Copyright (c) Clever-Age * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace CleverAge\ProcessBundle\Transformer; +namespace CleverAge\ProcessBundle\Transformer\Array; +use CleverAge\ProcessBundle\Transformer\ConditionTrait; +use CleverAge\ProcessBundle\Transformer\ConfigurableTransformerInterface; use Symfony\Component\OptionsResolver\OptionsResolver; use Symfony\Component\PropertyAccess\PropertyAccessorInterface; diff --git a/src/Transformer/ArrayFirstTransformer.php b/src/Transformer/Array/ArrayFirstTransformer.php similarity index 86% rename from src/Transformer/ArrayFirstTransformer.php rename to src/Transformer/Array/ArrayFirstTransformer.php index 9d1f3739..fef817e4 100644 --- a/src/Transformer/ArrayFirstTransformer.php +++ b/src/Transformer/Array/ArrayFirstTransformer.php @@ -5,14 +5,15 @@ /* * This file is part of the CleverAge/ProcessBundle package. * - * Copyright (c) 2017-2024 Clever-Age + * Copyright (c) Clever-Age * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace CleverAge\ProcessBundle\Transformer; +namespace CleverAge\ProcessBundle\Transformer\Array; +use CleverAge\ProcessBundle\Transformer\ConfigurableTransformerInterface; use Symfony\Component\OptionsResolver\OptionsResolver; /** diff --git a/src/Transformer/ArrayLastTransformer.php b/src/Transformer/Array/ArrayLastTransformer.php similarity index 79% rename from src/Transformer/ArrayLastTransformer.php rename to src/Transformer/Array/ArrayLastTransformer.php index e227143e..c2389852 100644 --- a/src/Transformer/ArrayLastTransformer.php +++ b/src/Transformer/Array/ArrayLastTransformer.php @@ -5,13 +5,15 @@ /* * This file is part of the CleverAge/ProcessBundle package. * - * Copyright (c) 2017-2024 Clever-Age + * Copyright (c) Clever-Age * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace CleverAge\ProcessBundle\Transformer; +namespace CleverAge\ProcessBundle\Transformer\Array; + +use CleverAge\ProcessBundle\Transformer\TransformerInterface; /** * Return the last element of an array. diff --git a/src/Transformer/ArrayMapTransformer.php b/src/Transformer/Array/ArrayMapTransformer.php similarity index 90% rename from src/Transformer/ArrayMapTransformer.php rename to src/Transformer/Array/ArrayMapTransformer.php index 4e3f7fb3..1263a9f7 100644 --- a/src/Transformer/ArrayMapTransformer.php +++ b/src/Transformer/Array/ArrayMapTransformer.php @@ -5,16 +5,18 @@ /* * This file is part of the CleverAge/ProcessBundle package. * - * Copyright (c) 2017-2024 Clever-Age + * Copyright (c) Clever-Age * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace CleverAge\ProcessBundle\Transformer; +namespace CleverAge\ProcessBundle\Transformer\Array; use CleverAge\ProcessBundle\Exception\TransformerException; use CleverAge\ProcessBundle\Registry\TransformerRegistry; +use CleverAge\ProcessBundle\Transformer\ConfigurableTransformerInterface; +use CleverAge\ProcessBundle\Transformer\TransformerTrait; use Symfony\Component\OptionsResolver\OptionsResolver; /** diff --git a/src/Transformer/ArrayUnsetTransformer.php b/src/Transformer/Array/ArrayUnsetTransformer.php similarity index 85% rename from src/Transformer/ArrayUnsetTransformer.php rename to src/Transformer/Array/ArrayUnsetTransformer.php index e4527269..0e2bcf29 100644 --- a/src/Transformer/ArrayUnsetTransformer.php +++ b/src/Transformer/Array/ArrayUnsetTransformer.php @@ -5,14 +5,15 @@ /* * This file is part of the CleverAge/ProcessBundle package. * - * Copyright (c) 2017-2024 Clever-Age + * Copyright (c) Clever-Age * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace CleverAge\ProcessBundle\Transformer; +namespace CleverAge\ProcessBundle\Transformer\Array; +use CleverAge\ProcessBundle\Transformer\ConfigurableTransformerInterface; use Symfony\Component\OptionsResolver\OptionsResolver; /** diff --git a/src/Transformer/CachedTransformer.php b/src/Transformer/CachedTransformer.php index 522fda98..5fff4923 100644 --- a/src/Transformer/CachedTransformer.php +++ b/src/Transformer/CachedTransformer.php @@ -5,7 +5,7 @@ /* * This file is part of the CleverAge/ProcessBundle package. * - * Copyright (c) 2017-2024 Clever-Age + * Copyright (c) Clever-Age * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. @@ -30,7 +30,7 @@ class CachedTransformer implements ConfigurableTransformerInterface public function __construct( TransformerRegistry $transformerRegistry, protected CacheItemPoolInterface $cache, - protected LoggerInterface $logger + protected LoggerInterface $logger, ) { $this->transformerRegistry = $transformerRegistry; } @@ -65,7 +65,7 @@ function (Options $options, $value) { public function transform(mixed $value, array $options = []): mixed { $cacheKey = $this->generateCacheKey($options['cache_key'], $value, $options); - if ($cacheKey && $this->cache instanceof CacheItemPoolInterface) { + if ($cacheKey) { try { $cacheItem = $this->cache->getItem($cacheKey); if ($cacheItem->isHit()) { diff --git a/src/Transformer/CallbackTransformer.php b/src/Transformer/CallbackTransformer.php index 94e695f8..88e1f275 100644 --- a/src/Transformer/CallbackTransformer.php +++ b/src/Transformer/CallbackTransformer.php @@ -5,7 +5,7 @@ /* * This file is part of the CleverAge/ProcessBundle package. * - * Copyright (c) 2017-2024 Clever-Age + * Copyright (c) Clever-Age * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. diff --git a/src/Transformer/CastTransformer.php b/src/Transformer/CastTransformer.php index 8b099a5a..559af464 100644 --- a/src/Transformer/CastTransformer.php +++ b/src/Transformer/CastTransformer.php @@ -5,7 +5,7 @@ /* * This file is part of the CleverAge/ProcessBundle package. * - * Copyright (c) 2017-2024 Clever-Age + * Copyright (c) Clever-Age * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. diff --git a/src/Transformer/ConditionTrait.php b/src/Transformer/ConditionTrait.php index a65bda4d..d5e2dec0 100644 --- a/src/Transformer/ConditionTrait.php +++ b/src/Transformer/ConditionTrait.php @@ -5,7 +5,7 @@ /* * This file is part of the CleverAge/ProcessBundle package. * - * Copyright (c) 2017-2024 Clever-Age + * Copyright (c) Clever-Age * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. @@ -111,7 +111,7 @@ protected function checkValue( string $key, mixed $value, bool $shouldMatch = true, - bool $regexpMode = false + bool $regexpMode = false, ): bool { $currentValue = $this->getValue($input, $key); diff --git a/src/Transformer/ConfigurableTransformerInterface.php b/src/Transformer/ConfigurableTransformerInterface.php index f5112455..af44c693 100644 --- a/src/Transformer/ConfigurableTransformerInterface.php +++ b/src/Transformer/ConfigurableTransformerInterface.php @@ -5,7 +5,7 @@ /* * This file is part of the CleverAge/ProcessBundle package. * - * Copyright (c) 2017-2024 Clever-Age + * Copyright (c) Clever-Age * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. diff --git a/src/Transformer/ConstantTransformer.php b/src/Transformer/ConstantTransformer.php index 9a234fcf..ec0ae7ca 100644 --- a/src/Transformer/ConstantTransformer.php +++ b/src/Transformer/ConstantTransformer.php @@ -5,7 +5,7 @@ /* * This file is part of the CleverAge/ProcessBundle package. * - * Copyright (c) 2017-2024 Clever-Age + * Copyright (c) Clever-Age * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. diff --git a/src/Transformer/ConvertValueTransformer.php b/src/Transformer/ConvertValueTransformer.php index fc974174..e9a7775b 100644 --- a/src/Transformer/ConvertValueTransformer.php +++ b/src/Transformer/ConvertValueTransformer.php @@ -5,7 +5,7 @@ /* * This file is part of the CleverAge/ProcessBundle package. * - * Copyright (c) 2017-2024 Clever-Age + * Copyright (c) Clever-Age * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. diff --git a/src/Transformer/DateFormatTransformer.php b/src/Transformer/Date/DateFormatTransformer.php similarity index 89% rename from src/Transformer/DateFormatTransformer.php rename to src/Transformer/Date/DateFormatTransformer.php index 464ae658..e60324a0 100644 --- a/src/Transformer/DateFormatTransformer.php +++ b/src/Transformer/Date/DateFormatTransformer.php @@ -5,14 +5,15 @@ /* * This file is part of the CleverAge/ProcessBundle package. * - * Copyright (c) 2017-2024 Clever-Age + * Copyright (c) Clever-Age * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace CleverAge\ProcessBundle\Transformer; +namespace CleverAge\ProcessBundle\Transformer\Date; +use CleverAge\ProcessBundle\Transformer\ConfigurableTransformerInterface; use Symfony\Component\OptionsResolver\OptionsResolver; /** diff --git a/src/Transformer/DateParserTransformer.php b/src/Transformer/Date/DateParserTransformer.php similarity index 88% rename from src/Transformer/DateParserTransformer.php rename to src/Transformer/Date/DateParserTransformer.php index 9553e1f6..a891ff40 100644 --- a/src/Transformer/DateParserTransformer.php +++ b/src/Transformer/Date/DateParserTransformer.php @@ -5,14 +5,15 @@ /* * This file is part of the CleverAge/ProcessBundle package. * - * Copyright (c) 2017-2024 Clever-Age + * Copyright (c) Clever-Age * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace CleverAge\ProcessBundle\Transformer; +namespace CleverAge\ProcessBundle\Transformer\Date; +use CleverAge\ProcessBundle\Transformer\ConfigurableTransformerInterface; use Symfony\Component\OptionsResolver\OptionsResolver; /** diff --git a/src/Transformer/DebugTransformer.php b/src/Transformer/DebugTransformer.php index 9d6bcfc2..16f11174 100644 --- a/src/Transformer/DebugTransformer.php +++ b/src/Transformer/DebugTransformer.php @@ -5,7 +5,7 @@ /* * This file is part of the CleverAge/ProcessBundle package. * - * Copyright (c) 2017-2024 Clever-Age + * Copyright (c) Clever-Age * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. diff --git a/src/Transformer/DefaultTransformer.php b/src/Transformer/DefaultTransformer.php index 1ce9b633..96a847be 100644 --- a/src/Transformer/DefaultTransformer.php +++ b/src/Transformer/DefaultTransformer.php @@ -5,7 +5,7 @@ /* * This file is part of the CleverAge/ProcessBundle package. * - * Copyright (c) 2017-2024 Clever-Age + * Copyright (c) Clever-Age * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. diff --git a/src/Transformer/EvaluatorTransformer.php b/src/Transformer/EvaluatorTransformer.php index 9a33db73..33ceba2b 100644 --- a/src/Transformer/EvaluatorTransformer.php +++ b/src/Transformer/EvaluatorTransformer.php @@ -5,7 +5,7 @@ /* * This file is part of the CleverAge/ProcessBundle package. * - * Copyright (c) 2017-2024 Clever-Age + * Copyright (c) Clever-Age * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. diff --git a/src/Transformer/ExpressionLanguageMapTransformer.php b/src/Transformer/ExpressionLanguageMapTransformer.php index 9bfb65b0..0356e9a3 100644 --- a/src/Transformer/ExpressionLanguageMapTransformer.php +++ b/src/Transformer/ExpressionLanguageMapTransformer.php @@ -5,7 +5,7 @@ /* * This file is part of the CleverAge/ProcessBundle package. * - * Copyright (c) 2017-2024 Clever-Age + * Copyright (c) Clever-Age * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. @@ -24,7 +24,7 @@ class ExpressionLanguageMapTransformer implements ConfigurableTransformerInterface { public function __construct( - protected ExpressionLanguage $language + protected ExpressionLanguage $language, ) { } diff --git a/src/Transformer/GenericTransformer.php b/src/Transformer/GenericTransformer.php index e033e281..f1863aa4 100644 --- a/src/Transformer/GenericTransformer.php +++ b/src/Transformer/GenericTransformer.php @@ -5,7 +5,7 @@ /* * This file is part of the CleverAge/ProcessBundle package. * - * Copyright (c) 2017-2024 Clever-Age + * Copyright (c) Clever-Age * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. @@ -33,7 +33,7 @@ class GenericTransformer implements ConfigurableTransformerInterface public function __construct( protected ContextualOptionResolver $contextualOptionResolver, - TransformerRegistry $transformerRegistry + TransformerRegistry $transformerRegistry, ) { $this->transformerRegistry = $transformerRegistry; } diff --git a/src/Transformer/MappingTransformer.php b/src/Transformer/MappingTransformer.php index 3ed3bc4e..ff8b0001 100644 --- a/src/Transformer/MappingTransformer.php +++ b/src/Transformer/MappingTransformer.php @@ -5,7 +5,7 @@ /* * This file is part of the CleverAge/ProcessBundle package. * - * Copyright (c) 2017-2024 Clever-Age + * Copyright (c) Clever-Age * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. @@ -32,7 +32,7 @@ class MappingTransformer implements ConfigurableTransformerInterface public function __construct( TransformerRegistry $transformerRegistry, protected LoggerInterface $logger, - protected PropertyAccessorInterface $accessor + protected PropertyAccessorInterface $accessor, ) { $this->transformerRegistry = $transformerRegistry; } diff --git a/src/Transformer/MultiReplaceTransformer.php b/src/Transformer/MultiReplaceTransformer.php index 90d87424..5ff4b927 100644 --- a/src/Transformer/MultiReplaceTransformer.php +++ b/src/Transformer/MultiReplaceTransformer.php @@ -5,7 +5,7 @@ /* * This file is part of the CleverAge/ProcessBundle package. * - * Copyright (c) 2017-2024 Clever-Age + * Copyright (c) Clever-Age * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. diff --git a/src/Transformer/InstantiateTransformer.php b/src/Transformer/Object/InstantiateTransformer.php similarity index 86% rename from src/Transformer/InstantiateTransformer.php rename to src/Transformer/Object/InstantiateTransformer.php index 8da6c2f8..41993a58 100644 --- a/src/Transformer/InstantiateTransformer.php +++ b/src/Transformer/Object/InstantiateTransformer.php @@ -5,14 +5,15 @@ /* * This file is part of the CleverAge/ProcessBundle package. * - * Copyright (c) 2017-2024 Clever-Age + * Copyright (c) Clever-Age * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace CleverAge\ProcessBundle\Transformer; +namespace CleverAge\ProcessBundle\Transformer\Object; +use CleverAge\ProcessBundle\Transformer\ConfigurableTransformerInterface; use Symfony\Component\OptionsResolver\OptionsResolver; /** diff --git a/src/Transformer/PropertyAccessorTransformer.php b/src/Transformer/Object/PropertyAccessorTransformer.php similarity index 88% rename from src/Transformer/PropertyAccessorTransformer.php rename to src/Transformer/Object/PropertyAccessorTransformer.php index 4e37c2fc..90e59b29 100644 --- a/src/Transformer/PropertyAccessorTransformer.php +++ b/src/Transformer/Object/PropertyAccessorTransformer.php @@ -5,14 +5,15 @@ /* * This file is part of the CleverAge/ProcessBundle package. * - * Copyright (c) 2017-2024 Clever-Age + * Copyright (c) Clever-Age * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace CleverAge\ProcessBundle\Transformer; +namespace CleverAge\ProcessBundle\Transformer\Object; +use CleverAge\ProcessBundle\Transformer\ConfigurableTransformerInterface; use Symfony\Component\OptionsResolver\OptionsResolver; use Symfony\Component\PropertyAccess\PropertyAccessorInterface; @@ -22,7 +23,7 @@ class PropertyAccessorTransformer implements ConfigurableTransformerInterface { public function __construct( - protected PropertyAccessorInterface $accessor + protected PropertyAccessorInterface $accessor, ) { } diff --git a/src/Transformer/RecursivePropertySetterTransformer.php b/src/Transformer/Object/RecursivePropertySetterTransformer.php similarity index 93% rename from src/Transformer/RecursivePropertySetterTransformer.php rename to src/Transformer/Object/RecursivePropertySetterTransformer.php index 9d06e256..b42c1df7 100644 --- a/src/Transformer/RecursivePropertySetterTransformer.php +++ b/src/Transformer/Object/RecursivePropertySetterTransformer.php @@ -5,15 +5,16 @@ /* * This file is part of the CleverAge/ProcessBundle package. * - * Copyright (c) 2017-2024 Clever-Age + * Copyright (c) Clever-Age * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace CleverAge\ProcessBundle\Transformer; +namespace CleverAge\ProcessBundle\Transformer\Object; use CleverAge\ProcessBundle\Exception\TransformerException; +use CleverAge\ProcessBundle\Transformer\ConfigurableTransformerInterface; use Symfony\Component\OptionsResolver\OptionsResolver; use Symfony\Component\PropertyAccess\Exception\NoSuchPropertyException; use Symfony\Component\PropertyAccess\PropertyAccessorInterface; @@ -24,7 +25,7 @@ class RecursivePropertySetterTransformer implements ConfigurableTransformerInterface { public function __construct( - protected PropertyAccessorInterface $accessor + protected PropertyAccessorInterface $accessor, ) { } diff --git a/src/Transformer/PregFilterTransformer.php b/src/Transformer/PregFilterTransformer.php index 5a6d4f11..361dd119 100644 --- a/src/Transformer/PregFilterTransformer.php +++ b/src/Transformer/PregFilterTransformer.php @@ -5,7 +5,7 @@ /* * This file is part of the CleverAge/ProcessBundle package. * - * Copyright (c) 2017-2024 Clever-Age + * Copyright (c) Clever-Age * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. diff --git a/src/Transformer/RulesTransformer.php b/src/Transformer/RulesTransformer.php index 4e19338c..22115368 100644 --- a/src/Transformer/RulesTransformer.php +++ b/src/Transformer/RulesTransformer.php @@ -5,7 +5,7 @@ /* * This file is part of the CleverAge/ProcessBundle package. * - * Copyright (c) 2017-2024 Clever-Age + * Copyright (c) Clever-Age * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. @@ -28,7 +28,7 @@ class RulesTransformer implements ConfigurableTransformerInterface public function __construct( TransformerRegistry $transformerRegistry, - protected ExpressionLanguage $language + protected ExpressionLanguage $language, ) { $this->transformerRegistry = $transformerRegistry; } @@ -93,7 +93,7 @@ public function configureOptions(OptionsResolver $resolver): void /** * Configure options for one "rule" block. */ - public function configureRuleOptions(OptionsResolver $resolver, array $expressionVariables = null): void + public function configureRuleOptions(OptionsResolver $resolver, ?array $expressionVariables = null): void { $resolver->setDefaults([ 'condition' => null, diff --git a/src/Transformer/DenormalizeTransformer.php b/src/Transformer/Serialization/DenormalizeTransformer.php similarity index 85% rename from src/Transformer/DenormalizeTransformer.php rename to src/Transformer/Serialization/DenormalizeTransformer.php index 529f7dfb..f939b074 100644 --- a/src/Transformer/DenormalizeTransformer.php +++ b/src/Transformer/Serialization/DenormalizeTransformer.php @@ -5,14 +5,15 @@ /* * This file is part of the CleverAge/ProcessBundle package. * - * Copyright (c) 2017-2024 Clever-Age + * Copyright (c) Clever-Age * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace CleverAge\ProcessBundle\Transformer; +namespace CleverAge\ProcessBundle\Transformer\Serialization; +use CleverAge\ProcessBundle\Transformer\ConfigurableTransformerInterface; use Symfony\Component\OptionsResolver\OptionsResolver; use Symfony\Component\Serializer\Normalizer\DenormalizerInterface; @@ -22,7 +23,7 @@ class DenormalizeTransformer implements ConfigurableTransformerInterface { public function __construct( - protected DenormalizerInterface $denormalizer + protected DenormalizerInterface $denormalizer, ) { } diff --git a/src/Transformer/NormalizeTransformer.php b/src/Transformer/Serialization/NormalizeTransformer.php similarity index 84% rename from src/Transformer/NormalizeTransformer.php rename to src/Transformer/Serialization/NormalizeTransformer.php index 5cd57635..f23293a6 100644 --- a/src/Transformer/NormalizeTransformer.php +++ b/src/Transformer/Serialization/NormalizeTransformer.php @@ -5,14 +5,15 @@ /* * This file is part of the CleverAge/ProcessBundle package. * - * Copyright (c) 2017-2024 Clever-Age + * Copyright (c) Clever-Age * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace CleverAge\ProcessBundle\Transformer; +namespace CleverAge\ProcessBundle\Transformer\Serialization; +use CleverAge\ProcessBundle\Transformer\ConfigurableTransformerInterface; use Symfony\Component\OptionsResolver\OptionsResolver; use Symfony\Component\Serializer\Normalizer\NormalizerInterface; @@ -22,7 +23,7 @@ class NormalizeTransformer implements ConfigurableTransformerInterface { public function __construct( - protected NormalizerInterface $normalizer + protected NormalizerInterface $normalizer, ) { } diff --git a/src/Transformer/ExplodeTransformer.php b/src/Transformer/String/ExplodeTransformer.php similarity index 86% rename from src/Transformer/ExplodeTransformer.php rename to src/Transformer/String/ExplodeTransformer.php index 65b79427..32542a43 100644 --- a/src/Transformer/ExplodeTransformer.php +++ b/src/Transformer/String/ExplodeTransformer.php @@ -5,14 +5,15 @@ /* * This file is part of the CleverAge/ProcessBundle package. * - * Copyright (c) 2017-2024 Clever-Age + * Copyright (c) Clever-Age * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace CleverAge\ProcessBundle\Transformer; +namespace CleverAge\ProcessBundle\Transformer\String; +use CleverAge\ProcessBundle\Transformer\ConfigurableTransformerInterface; use Symfony\Component\OptionsResolver\OptionsResolver; /** diff --git a/src/Transformer/HashTransformer.php b/src/Transformer/String/HashTransformer.php similarity index 86% rename from src/Transformer/HashTransformer.php rename to src/Transformer/String/HashTransformer.php index c1fc610f..4082b845 100644 --- a/src/Transformer/HashTransformer.php +++ b/src/Transformer/String/HashTransformer.php @@ -5,14 +5,15 @@ /* * This file is part of the CleverAge/ProcessBundle package. * - * Copyright (c) 2017-2024 Clever-Age + * Copyright (c) Clever-Age * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace CleverAge\ProcessBundle\Transformer; +namespace CleverAge\ProcessBundle\Transformer\String; +use CleverAge\ProcessBundle\Transformer\ConfigurableTransformerInterface; use Symfony\Component\OptionsResolver\OptionsResolver; /** diff --git a/src/Transformer/ImplodeTransformer.php b/src/Transformer/String/ImplodeTransformer.php similarity index 86% rename from src/Transformer/ImplodeTransformer.php rename to src/Transformer/String/ImplodeTransformer.php index fb08288e..e005c67c 100644 --- a/src/Transformer/ImplodeTransformer.php +++ b/src/Transformer/String/ImplodeTransformer.php @@ -5,14 +5,15 @@ /* * This file is part of the CleverAge/ProcessBundle package. * - * Copyright (c) 2017-2024 Clever-Age + * Copyright (c) Clever-Age * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace CleverAge\ProcessBundle\Transformer; +namespace CleverAge\ProcessBundle\Transformer\String; +use CleverAge\ProcessBundle\Transformer\ConfigurableTransformerInterface; use Symfony\Component\OptionsResolver\OptionsResolver; /** diff --git a/src/Transformer/SlugifyTransformer.php b/src/Transformer/String/SlugifyTransformer.php similarity index 89% rename from src/Transformer/SlugifyTransformer.php rename to src/Transformer/String/SlugifyTransformer.php index 491eb52f..7d23bf92 100644 --- a/src/Transformer/SlugifyTransformer.php +++ b/src/Transformer/String/SlugifyTransformer.php @@ -5,14 +5,15 @@ /* * This file is part of the CleverAge/ProcessBundle package. * - * Copyright (c) 2017-2024 Clever-Age + * Copyright (c) Clever-Age * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace CleverAge\ProcessBundle\Transformer; +namespace CleverAge\ProcessBundle\Transformer\String; +use CleverAge\ProcessBundle\Transformer\ConfigurableTransformerInterface; use Symfony\Component\OptionsResolver\Options; use Symfony\Component\OptionsResolver\OptionsResolver; @@ -28,7 +29,7 @@ public function transform(mixed $value, array $options = []): string $string = $transliterator->transliterate($value); return trim( - preg_replace( + (string) preg_replace( $options['replace'], (string) $options['separator'], strtolower(trim(strip_tags($string))) diff --git a/src/Transformer/SprintfTransformer.php b/src/Transformer/String/SprintfTransformer.php similarity index 86% rename from src/Transformer/SprintfTransformer.php rename to src/Transformer/String/SprintfTransformer.php index e496d193..7013c72b 100644 --- a/src/Transformer/SprintfTransformer.php +++ b/src/Transformer/String/SprintfTransformer.php @@ -5,14 +5,15 @@ /* * This file is part of the CleverAge/ProcessBundle package. * - * Copyright (c) 2017-2024 Clever-Age + * Copyright (c) Clever-Age * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace CleverAge\ProcessBundle\Transformer; +namespace CleverAge\ProcessBundle\Transformer\String; +use CleverAge\ProcessBundle\Transformer\ConfigurableTransformerInterface; use Symfony\Component\OptionsResolver\OptionsResolver; /** diff --git a/src/Transformer/TrimTransformer.php b/src/Transformer/String/TrimTransformer.php similarity index 88% rename from src/Transformer/TrimTransformer.php rename to src/Transformer/String/TrimTransformer.php index f9966f7d..95627dd6 100644 --- a/src/Transformer/TrimTransformer.php +++ b/src/Transformer/String/TrimTransformer.php @@ -5,7 +5,7 @@ /* * This file is part of the CleverAge/ProcessBundle package. * - * Copyright (c) 2017-2024 Clever-Age + * Copyright (c) Clever-Age * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. @@ -13,8 +13,9 @@ namespace Transformer; -namespace CleverAge\ProcessBundle\Transformer; +namespace CleverAge\ProcessBundle\Transformer\String; +use CleverAge\ProcessBundle\Transformer\ConfigurableTransformerInterface; use Symfony\Component\OptionsResolver\OptionsResolver; /** diff --git a/src/Transformer/TransformerInterface.php b/src/Transformer/TransformerInterface.php index 34cd402b..7cf44d54 100644 --- a/src/Transformer/TransformerInterface.php +++ b/src/Transformer/TransformerInterface.php @@ -5,7 +5,7 @@ /* * This file is part of the CleverAge/ProcessBundle package. * - * Copyright (c) 2017-2024 Clever-Age + * Copyright (c) Clever-Age * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. diff --git a/src/Transformer/TransformerTrait.php b/src/Transformer/TransformerTrait.php index e3874aa0..4bea4f87 100644 --- a/src/Transformer/TransformerTrait.php +++ b/src/Transformer/TransformerTrait.php @@ -5,7 +5,7 @@ /* * This file is part of the CleverAge/ProcessBundle package. * - * Copyright (c) 2017-2024 Clever-Age + * Copyright (c) Clever-Age * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. @@ -52,7 +52,7 @@ public function normalizeTransformers(Options $options, array $transformers): ar protected function applyTransformers(array $transformers, mixed $value): mixed { // Quick return for better perfs - if (empty($transformers)) { + if ([] === $transformers) { return $value; } @@ -92,7 +92,7 @@ protected function getCleanedTransfomerCode(string $transformerCode): string protected function configureTransformersOptions( OptionsResolver $resolver, - string $optionName = 'transformers' + string $optionName = 'transformers', ): void { $resolver->setDefault($optionName, []); $resolver->setAllowedTypes($optionName, ['array']); diff --git a/src/Transformer/TypeSetterTransformer.php b/src/Transformer/TypeSetterTransformer.php index a9e621fc..64804d8a 100644 --- a/src/Transformer/TypeSetterTransformer.php +++ b/src/Transformer/TypeSetterTransformer.php @@ -5,7 +5,7 @@ /* * This file is part of the CleverAge/ProcessBundle package. * - * Copyright (c) 2017-2024 Clever-Age + * Copyright (c) Clever-Age * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. @@ -32,7 +32,7 @@ public function transform(mixed $value, array $options = []): mixed { $return = settype($value, $options['type']); - if (true === $return) { + if ($return) { return $value; } diff --git a/src/Transformer/UnsetTransformer.php b/src/Transformer/UnsetTransformer.php index 05d98d60..112f4ad0 100644 --- a/src/Transformer/UnsetTransformer.php +++ b/src/Transformer/UnsetTransformer.php @@ -5,7 +5,7 @@ /* * This file is part of the CleverAge/ProcessBundle package. * - * Copyright (c) 2017-2024 Clever-Age + * Copyright (c) Clever-Age * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. diff --git a/src/Transformer/WrapperTransformer.php b/src/Transformer/WrapperTransformer.php index 6f55e294..297e7253 100644 --- a/src/Transformer/WrapperTransformer.php +++ b/src/Transformer/WrapperTransformer.php @@ -5,7 +5,7 @@ /* * This file is part of the CleverAge/ProcessBundle package. * - * Copyright (c) 2017-2024 Clever-Age + * Copyright (c) Clever-Age * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. diff --git a/src/Transformer/Xml/XpathEvaluatorTransformer.php b/src/Transformer/Xml/XpathEvaluatorTransformer.php index e4952d21..74b378a4 100644 --- a/src/Transformer/Xml/XpathEvaluatorTransformer.php +++ b/src/Transformer/Xml/XpathEvaluatorTransformer.php @@ -5,7 +5,7 @@ /* * This file is part of the CleverAge/ProcessBundle package. * - * Copyright (c) 2017-2024 Clever-Age + * Copyright (c) Clever-Age * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. @@ -65,15 +65,15 @@ public function configureOptions(OptionsResolver $resolver): void * Configure options about how to handle xpath query results. * Available at root and subquery level. */ - public function configureQueryOptions(OptionsResolver $resolver, Options $parentOptions = null): void + public function configureQueryOptions(OptionsResolver $resolver, ?Options $parentOptions = null): void { - $resolver->setDefault('single_result', $parentOptions ? $parentOptions['single_result'] : true); + $resolver->setDefault('single_result', $parentOptions instanceof Options ? $parentOptions['single_result'] : true); $resolver->setAllowedTypes('single_result', 'bool'); - $resolver->setDefault('ignore_missing', $parentOptions ? $parentOptions['ignore_missing'] : true); + $resolver->setDefault('ignore_missing', $parentOptions instanceof Options ? $parentOptions['ignore_missing'] : true); $resolver->setAllowedTypes('ignore_missing', 'bool'); - $resolver->setDefault('unwrap_value', $parentOptions ? $parentOptions['unwrap_value'] : true); + $resolver->setDefault('unwrap_value', $parentOptions instanceof Options ? $parentOptions['unwrap_value'] : true); $resolver->setAllowedTypes('unwrap_value', 'bool'); } @@ -137,15 +137,11 @@ public function query(\DOMXPath $xpath, string $query, \DOMNode $node, array $op throw new \UnexpectedValueException("There is too much results for query '{$query}'"); } - if (!$options['ignore_missing'] && 0 === \count($results)) { + if (!$options['ignore_missing'] && [] === $results) { throw new \UnexpectedValueException("There is not enough results for query '{$query}'"); } - if (1 === \count($results)) { - $results = $results[0]; - } else { - $results = null; - } + $results = 1 === \count($results) ? $results[0] : null; } return $results; diff --git a/src/Validator/ConstraintLoader.php b/src/Validator/ConstraintLoader.php index d767dc15..e2adab9b 100644 --- a/src/Validator/ConstraintLoader.php +++ b/src/Validator/ConstraintLoader.php @@ -5,7 +5,7 @@ /* * This file is part of the CleverAge/ProcessBundle package. * - * Copyright (c) 2017-2024 Clever-Age + * Copyright (c) Clever-Age * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. diff --git a/tests.old/ProcessManagerTest.php b/tests.old/ProcessManagerTest.php index 42c49450..3d019b5e 100644 --- a/tests.old/ProcessManagerTest.php +++ b/tests.old/ProcessManagerTest.php @@ -21,7 +21,7 @@ use CleverAge\ProcessBundle\Registry\ProcessConfigurationRegistry; use Prophecy\Argument\Token\TypeToken; use Prophecy\Prophecy\MethodProphecy; -use Psr\EventDispatcher\EventDispatcherInterface; +use Symfony\Component\EventDispatcher\EventDispatcherInterface; class ProcessManagerTest extends AbstractProcessTest { diff --git a/tests/Exception/MissingTransformerExceptionTest.php b/tests/Exception/MissingTransformerExceptionTest.php index fad77c86..6b30730b 100644 --- a/tests/Exception/MissingTransformerExceptionTest.php +++ b/tests/Exception/MissingTransformerExceptionTest.php @@ -2,6 +2,15 @@ declare(strict_types=1); +/* + * This file is part of the CleverAge/ProcessBundle package. + * + * Copyright (c) Clever-Age + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + namespace Exception; use CleverAge\ProcessBundle\Exception\MissingTransformerException; diff --git a/tests/Transformer/ArrayElementTransformerTest.php b/tests/Transformer/Array/ArrayElementTransformerTest.php similarity index 89% rename from tests/Transformer/ArrayElementTransformerTest.php rename to tests/Transformer/Array/ArrayElementTransformerTest.php index 6895a9c8..fa98f00d 100644 --- a/tests/Transformer/ArrayElementTransformerTest.php +++ b/tests/Transformer/Array/ArrayElementTransformerTest.php @@ -5,20 +5,20 @@ /* * This file is part of the CleverAge/ProcessBundle package. * - * Copyright (c) 2017-2024 Clever-Age + * Copyright (c) Clever-Age * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace Transformer; +namespace CleverAge\ProcessBundle\Tests\Transformer\Array; -use CleverAge\ProcessBundle\Transformer\ArrayElementTransformer; +use CleverAge\ProcessBundle\Transformer\Array\ArrayElementTransformer; use PHPUnit\Framework\TestCase; use Symfony\Component\OptionsResolver\OptionsResolver; /** - * @coversDefaultClass \CleverAge\ProcessBundle\Transformer\ArrayElementTransformer + * @coversDefaultClass \CleverAge\ProcessBundle\Transformer\Array\ArrayElementTransformer */ class ArrayElementTransformerTest extends TestCase { diff --git a/tests/Transformer/ArrayFirstTransformerTest.php b/tests/Transformer/Array/ArrayFirstTransformerTest.php similarity index 92% rename from tests/Transformer/ArrayFirstTransformerTest.php rename to tests/Transformer/Array/ArrayFirstTransformerTest.php index 07b87049..1b04a7fc 100644 --- a/tests/Transformer/ArrayFirstTransformerTest.php +++ b/tests/Transformer/Array/ArrayFirstTransformerTest.php @@ -5,20 +5,20 @@ /* * This file is part of the CleverAge/ProcessBundle package. * - * Copyright (c) 2017-2024 Clever-Age + * Copyright (c) Clever-Age * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace Transformer; +namespace CleverAge\ProcessBundle\Tests\Transformer\Array; -use CleverAge\ProcessBundle\Transformer\ArrayFirstTransformer; +use CleverAge\ProcessBundle\Transformer\Array\ArrayFirstTransformer; use PHPUnit\Framework\TestCase; use Symfony\Component\OptionsResolver\OptionsResolver; /** - * @coversDefaultClass \CleverAge\ProcessBundle\Transformer\ArrayFirstTransformer + * @coversDefaultClass \CleverAge\ProcessBundle\Transformer\Array\ArrayFirstTransformer */ class ArrayFirstTransformerTest extends TestCase { diff --git a/tests/Transformer/CastTransformerTest.php b/tests/Transformer/CastTransformerTest.php index 5a667646..215a6f47 100644 --- a/tests/Transformer/CastTransformerTest.php +++ b/tests/Transformer/CastTransformerTest.php @@ -5,13 +5,13 @@ /* * This file is part of the CleverAge/ProcessBundle package. * - * Copyright (c) 2017-2024 Clever-Age + * Copyright (c) Clever-Age * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace Transformer; +namespace CleverAge\ProcessBundle\Tests\Transformer; use CleverAge\ProcessBundle\Transformer\CastTransformer; use PHPUnit\Framework\TestCase; diff --git a/tests/Transformer/ConstantTransformerTest.php b/tests/Transformer/ConstantTransformerTest.php index 9d291e37..9a36ba94 100644 --- a/tests/Transformer/ConstantTransformerTest.php +++ b/tests/Transformer/ConstantTransformerTest.php @@ -5,13 +5,13 @@ /* * This file is part of the CleverAge/ProcessBundle package. * - * Copyright (c) 2017-2024 Clever-Age + * Copyright (c) Clever-Age * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace Transformer; +namespace CleverAge\ProcessBundle\Tests\Transformer; use CleverAge\ProcessBundle\Transformer\ConstantTransformer; use PHPUnit\Framework\TestCase; diff --git a/tests/Transformer/DateFormatTransformerTest.php b/tests/Transformer/Date/DateFormatTransformerTest.php similarity index 92% rename from tests/Transformer/DateFormatTransformerTest.php rename to tests/Transformer/Date/DateFormatTransformerTest.php index 6baf4821..09ecf3ab 100644 --- a/tests/Transformer/DateFormatTransformerTest.php +++ b/tests/Transformer/Date/DateFormatTransformerTest.php @@ -5,20 +5,20 @@ /* * This file is part of the CleverAge/ProcessBundle package. * - * Copyright (c) 2017-2024 Clever-Age + * Copyright (c) Clever-Age * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace Transformer; +namespace CleverAge\ProcessBundle\Tests\Transformer\Date; -use CleverAge\ProcessBundle\Transformer\DateFormatTransformer; +use CleverAge\ProcessBundle\Transformer\Date\DateFormatTransformer; use PHPUnit\Framework\TestCase; use Symfony\Component\OptionsResolver\OptionsResolver; /** - * @coversDefaultClass \CleverAge\ProcessBundle\Transformer\DateFormatTransformer + * @coversDefaultClass \CleverAge\ProcessBundle\Transformer\Date\DateFormatTransformer */ class DateFormatTransformerTest extends TestCase { diff --git a/tests/Transformer/DateParserTransformerTest.php b/tests/Transformer/Date/DateParserTransformerTest.php similarity index 93% rename from tests/Transformer/DateParserTransformerTest.php rename to tests/Transformer/Date/DateParserTransformerTest.php index 7ac7a7d6..860d0487 100644 --- a/tests/Transformer/DateParserTransformerTest.php +++ b/tests/Transformer/Date/DateParserTransformerTest.php @@ -5,20 +5,20 @@ /* * This file is part of the CleverAge/ProcessBundle package. * - * Copyright (c) 2017-2024 Clever-Age + * Copyright (c) Clever-Age * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace Transformer; +namespace CleverAge\ProcessBundle\Tests\Transformer\Date; -use CleverAge\ProcessBundle\Transformer\DateParserTransformer; +use CleverAge\ProcessBundle\Transformer\Date\DateParserTransformer; use PHPUnit\Framework\TestCase; use Symfony\Component\OptionsResolver\OptionsResolver; /** - * @coversDefaultClass \CleverAge\ProcessBundle\Transformer\DateParserTransformer + * @coversDefaultClass \CleverAge\ProcessBundle\Transformer\Date\DateParserTransformer */ class DateParserTransformerTest extends TestCase { diff --git a/tests/Transformer/DebugTransformerTest.php b/tests/Transformer/DebugTransformerTest.php index 5af9744e..4dd9c5b2 100644 --- a/tests/Transformer/DebugTransformerTest.php +++ b/tests/Transformer/DebugTransformerTest.php @@ -5,13 +5,13 @@ /* * This file is part of the CleverAge/ProcessBundle package. * - * Copyright (c) 2017-2024 Clever-Age + * Copyright (c) Clever-Age * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace Transformer; +namespace CleverAge\ProcessBundle\Tests\Transformer; use CleverAge\ProcessBundle\Transformer\DebugTransformer; use PHPUnit\Framework\TestCase; diff --git a/tests/Transformer/DefaultTransformerTest.php b/tests/Transformer/DefaultTransformerTest.php index 64a71cfe..7817b0df 100644 --- a/tests/Transformer/DefaultTransformerTest.php +++ b/tests/Transformer/DefaultTransformerTest.php @@ -5,13 +5,13 @@ /* * This file is part of the CleverAge/ProcessBundle package. * - * Copyright (c) 2017-2024 Clever-Age + * Copyright (c) Clever-Age * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace Transformer; +namespace CleverAge\ProcessBundle\Tests\Transformer; use CleverAge\ProcessBundle\Transformer\DefaultTransformer; use PHPUnit\Framework\TestCase; diff --git a/tests/Transformer/MultiReplaceTransformerTest.php b/tests/Transformer/MultiReplaceTransformerTest.php index 8a3c58c6..6eb2a852 100644 --- a/tests/Transformer/MultiReplaceTransformerTest.php +++ b/tests/Transformer/MultiReplaceTransformerTest.php @@ -5,13 +5,13 @@ /* * This file is part of the CleverAge/ProcessBundle package. * - * Copyright (c) 2017-2024 Clever-Age + * Copyright (c) Clever-Age * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace Transformer; +namespace CleverAge\ProcessBundle\Tests\Transformer; use CleverAge\ProcessBundle\Transformer\MultiReplaceTransformer; use PHPUnit\Framework\TestCase; diff --git a/tests/Transformer/ExplodeTransformerTest.php b/tests/Transformer/String/ExplodeTransformerTest.php similarity index 88% rename from tests/Transformer/ExplodeTransformerTest.php rename to tests/Transformer/String/ExplodeTransformerTest.php index b454c27a..cb698dd8 100644 --- a/tests/Transformer/ExplodeTransformerTest.php +++ b/tests/Transformer/String/ExplodeTransformerTest.php @@ -5,20 +5,20 @@ /* * This file is part of the CleverAge/ProcessBundle package. * - * Copyright (c) 2017-2024 Clever-Age + * Copyright (c) Clever-Age * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace Transformer; +namespace CleverAge\ProcessBundle\Tests\Transformer\String; -use CleverAge\ProcessBundle\Transformer\ExplodeTransformer; +use CleverAge\ProcessBundle\Transformer\String\ExplodeTransformer; use PHPUnit\Framework\TestCase; use Symfony\Component\OptionsResolver\OptionsResolver; /** - * @coversDefaultClass \CleverAge\ProcessBundle\Transformer\ExplodeTransformer + * @coversDefaultClass \CleverAge\ProcessBundle\Transformer\String\ExplodeTransformer */ class ExplodeTransformerTest extends TestCase { diff --git a/tests/Transformer/ImplodeTransformerTest.php b/tests/Transformer/String/ImplodeTransformerTest.php similarity index 88% rename from tests/Transformer/ImplodeTransformerTest.php rename to tests/Transformer/String/ImplodeTransformerTest.php index 0a3751d4..5a1a72b7 100644 --- a/tests/Transformer/ImplodeTransformerTest.php +++ b/tests/Transformer/String/ImplodeTransformerTest.php @@ -5,20 +5,20 @@ /* * This file is part of the CleverAge/ProcessBundle package. * - * Copyright (c) 2017-2024 Clever-Age + * Copyright (c) Clever-Age * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace Transformer; +namespace CleverAge\ProcessBundle\Tests\Transformer\String; -use CleverAge\ProcessBundle\Transformer\ImplodeTransformer; +use CleverAge\ProcessBundle\Transformer\String\ImplodeTransformer; use PHPUnit\Framework\TestCase; use Symfony\Component\OptionsResolver\OptionsResolver; /** - * @coversDefaultClass \CleverAge\ProcessBundle\Transformer\ImplodeTransformer + * @coversDefaultClass \CleverAge\ProcessBundle\Transformer\String\ImplodeTransformer */ class ImplodeTransformerTest extends TestCase { diff --git a/tests/Transformer/SprintfTransformerTest.php b/tests/Transformer/String/SprintfTransformerTest.php similarity index 63% rename from tests/Transformer/SprintfTransformerTest.php rename to tests/Transformer/String/SprintfTransformerTest.php index 59397a0f..4648e893 100644 --- a/tests/Transformer/SprintfTransformerTest.php +++ b/tests/Transformer/String/SprintfTransformerTest.php @@ -2,13 +2,22 @@ declare(strict_types=1); -namespace Transformer; +/* + * This file is part of the CleverAge/ProcessBundle package. + * + * Copyright (c) Clever-Age + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace CleverAge\ProcessBundle\Tests\Transformer\String; -use CleverAge\ProcessBundle\Transformer\SprintfTransformer; +use CleverAge\ProcessBundle\Transformer\String\SprintfTransformer; use PHPUnit\Framework\TestCase; /** - * @coversDefaultClass \CleverAge\ProcessBundle\Transformer\SprintfTransformer + * @coversDefaultClass \CleverAge\ProcessBundle\Transformer\String\SprintfTransformer */ class SprintfTransformerTest extends TestCase { diff --git a/tests/Transformer/TrimTransformerTest.php b/tests/Transformer/String/TrimTransformerTest.php similarity index 89% rename from tests/Transformer/TrimTransformerTest.php rename to tests/Transformer/String/TrimTransformerTest.php index 62aca460..8bd4b6e0 100644 --- a/tests/Transformer/TrimTransformerTest.php +++ b/tests/Transformer/String/TrimTransformerTest.php @@ -5,20 +5,20 @@ /* * This file is part of the CleverAge/ProcessBundle package. * - * Copyright (c) 2017-2024 Clever-Age + * Copyright (c) Clever-Age * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace Transformer; +namespace CleverAge\ProcessBundle\Tests\Transformer\String; -use CleverAge\ProcessBundle\Transformer\TrimTransformer; +use CleverAge\ProcessBundle\Transformer\String\TrimTransformer; use PHPUnit\Framework\TestCase; use Symfony\Component\OptionsResolver\OptionsResolver; /** - * @coversDefaultClass \CleverAge\ProcessBundle\Transformer\TrimTransformer + * @coversDefaultClass \CleverAge\ProcessBundle\Transformer\String\TrimTransformer */ class TrimTransformerTest extends TestCase { diff --git a/tests/Transformer/WrapperTransformerTest.php b/tests/Transformer/WrapperTransformerTest.php index 4699f7a3..84cac9a2 100644 --- a/tests/Transformer/WrapperTransformerTest.php +++ b/tests/Transformer/WrapperTransformerTest.php @@ -5,13 +5,13 @@ /* * This file is part of the CleverAge/ProcessBundle package. * - * Copyright (c) 2017-2024 Clever-Age + * Copyright (c) Clever-Age * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace Transformer; +namespace CleverAge\ProcessBundle\Tests\Transformer; use CleverAge\ProcessBundle\Transformer\WrapperTransformer; use PHPUnit\Framework\TestCase; diff --git a/tests/Transformer/XpathEvaluatorTransformerTest.php b/tests/Transformer/Xml/XpathEvaluatorTransformerTest.php similarity index 97% rename from tests/Transformer/XpathEvaluatorTransformerTest.php rename to tests/Transformer/Xml/XpathEvaluatorTransformerTest.php index 50fda077..baf16a5f 100644 --- a/tests/Transformer/XpathEvaluatorTransformerTest.php +++ b/tests/Transformer/Xml/XpathEvaluatorTransformerTest.php @@ -5,13 +5,13 @@ /* * This file is part of the CleverAge/ProcessBundle package. * - * Copyright (c) 2017-2024 Clever-Age + * Copyright (c) Clever-Age * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace Transformer; +namespace CleverAge\ProcessBundle\Tests\Transformer\Xml; use CleverAge\ProcessBundle\Transformer\Xml\XpathEvaluatorTransformer; use PHPUnit\Framework\TestCase;