From 8f4424ab811efc554f81600e541c34d36ee7fb9b Mon Sep 17 00:00:00 2001 From: Rinsvent Date: Sat, 2 Apr 2022 11:58:01 +0700 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8=D0=BB=20?= =?UTF-8?q?=D0=B1=D0=B0=D0=BD=D0=B4=D0=BB=20=D0=B4=D0=BB=D1=8F=20=D1=82?= =?UTF-8?q?=D1=80=D0=B0=D0=BD=D1=81=D1=84=D0=BE=D1=80=D0=BC=D0=B5=D1=80?= =?UTF-8?q?=D0=BE=D0=B2.=20=D0=94=D0=BE=D0=BB=D0=B6=D0=B5=D0=BD=20=D0=B7?= =?UTF-8?q?=D0=B0=D0=BC=D0=B5=D0=BD=D0=B8=D1=82=D1=8C=202=20=D0=B1=D0=B0?= =?UTF-8?q?=D0=BD=D0=B4=D0=BB=D0=B0=20=D0=BC=D0=BE=D1=81=D1=82=D0=B0=20(?= =?UTF-8?q?=D0=BE=D1=82=D0=B4=D0=B5=D0=BB=D1=8C=D0=BD=D1=8B=D0=B9=20=D0=B4?= =?UTF-8?q?=D0=BB=D1=8F=20request=20=D0=B8=20=D0=BE=D1=82=D0=B4=D0=B5?= =?UTF-8?q?=D0=BB=D1=8C=D0=BD=D1=8B=D0=B9=20=D0=B4=D0=BB=D1=8F=20response)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 7 +++ .gitlab-ci.yml | 18 ++++++++ Makefile | 33 +++++++++++++ Readme.md | 3 ++ bin/docker/ci.sh | 9 ++++ bin/docker/prepare-ci.sh | 8 ++++ codeception.yml | 16 +++++++ composer.json | 34 ++++++++++++++ docker-compose-ci.yml | 15 ++++++ docker-compose.yml | 16 +++++++ .../TransformerExtension.php | 17 +++++++ src/EventListener/RequestListener.php | 20 ++++++++ src/Resources/config/services.yaml | 18 ++++++++ src/Service/AbstractTransformer.php | 13 ++++++ src/Service/ServiceResolver.php | 24 ++++++++++ src/TransformerBundle.php | 10 ++++ tests/_data/.gitkeep | 0 tests/_output/.gitignore | 2 + tests/_support/.gitkeep | 0 tests/_support/Helper/Unit.php | 46 +++++++++++++++++++ tests/_support/UnitTester.php | 27 +++++++++++ tests/_support/_generated/.gitignore | 2 + tests/unit.suite.yml | 10 ++++ 23 files changed, 348 insertions(+) create mode 100644 .gitignore create mode 100644 .gitlab-ci.yml create mode 100644 Makefile create mode 100644 Readme.md create mode 100755 bin/docker/ci.sh create mode 100755 bin/docker/prepare-ci.sh create mode 100644 codeception.yml create mode 100644 composer.json create mode 100644 docker-compose-ci.yml create mode 100644 docker-compose.yml create mode 100644 src/DependencyInjection/TransformerExtension.php create mode 100644 src/EventListener/RequestListener.php create mode 100644 src/Resources/config/services.yaml create mode 100644 src/Service/AbstractTransformer.php create mode 100644 src/Service/ServiceResolver.php create mode 100644 src/TransformerBundle.php create mode 100644 tests/_data/.gitkeep create mode 100644 tests/_output/.gitignore create mode 100644 tests/_support/.gitkeep create mode 100644 tests/_support/Helper/Unit.php create mode 100644 tests/_support/UnitTester.php create mode 100644 tests/_support/_generated/.gitignore create mode 100644 tests/unit.suite.yml diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..7d60e7d --- /dev/null +++ b/.gitignore @@ -0,0 +1,7 @@ +.idea +/var/ +/vendor/ +###> phpunit/phpunit ### +/phpunit.xml +.phpunit.result.cache +###< phpunit/phpunit ### diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml new file mode 100644 index 0000000..b7c9b16 --- /dev/null +++ b/.gitlab-ci.yml @@ -0,0 +1,18 @@ +image: dh.rinsvent.ru/ci + +variables: + DOCKER_DRIVER: overlay2 + DOCKER_TLS_CERTDIR: "" + +services: + - docker:dind + +before_script: + - bash bin/docker/prepare-ci.sh + +build: + stage: build + script: + - docker login --username ${REGISTRY_USERNAME} --password ${REGISTRY_PASSWORD} dh.rinsvent.ru + - bash bin/docker/ci.sh + diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..c6fc539 --- /dev/null +++ b/Makefile @@ -0,0 +1,33 @@ +auth: + docker exec -it -u1000:1000 transformerbundle_php bash + +auth-root: + docker exec -it transformerbundle_php bash + +test: + bin/codecept run $p + +coverage: + bin/codecept run --coverage --coverage-html=/app/var/temp.html + +# make out container +coverage-open: + google-chrome var/temp.html/index.html + +#docker +start: + docker-compose up -d +stop: + docker-compose down +pull: + docker-compose pull +restart: stop start +restart-php: + docker-compose restart backend-php-fpm +down-clear: + docker-compose down -v --remove-orphans +init: down-clear pull start + +#prepare +prepare-environment: + bash bin/docker/prepare.sh diff --git a/Readme.md b/Readme.md new file mode 100644 index 0000000..306e791 --- /dev/null +++ b/Readme.md @@ -0,0 +1,3 @@ +Transformer bundle +=== + diff --git a/bin/docker/ci.sh b/bin/docker/ci.sh new file mode 100755 index 0000000..3c3bdc1 --- /dev/null +++ b/bin/docker/ci.sh @@ -0,0 +1,9 @@ +#!/bin/bash + +docker-compose -f ./docker-compose-ci.yml up -d + +echo 'composer installing' +docker exec -i transformerbundle_php composer install -q +echo 'composer installed !!' + +docker exec -i transformerbundle_php vendor/bin/codecept run --coverage diff --git a/bin/docker/prepare-ci.sh b/bin/docker/prepare-ci.sh new file mode 100755 index 0000000..bd5dcf5 --- /dev/null +++ b/bin/docker/prepare-ci.sh @@ -0,0 +1,8 @@ +#!/bin/bash + +FULL_PROJECT_NETWORK=$(docker network ls | grep full-project) +if [ -z "$FULL_PROJECT_NETWORK" ] +then + docker network create full-project --subnet=192.168.221.0/25 +fi + diff --git a/codeception.yml b/codeception.yml new file mode 100644 index 0000000..6fa6811 --- /dev/null +++ b/codeception.yml @@ -0,0 +1,16 @@ +namespace: Rinsvent\TransformerBundle\Tests +paths: + tests: tests + output: tests/_output + data: tests/_data + support: tests/_support + envs: tests/_envs +actor_suffix: Tester +extensions: + enabled: + - Codeception\Extension\RunFailed + +coverage: + enabled: true + include: + - src/* \ No newline at end of file diff --git a/composer.json b/composer.json new file mode 100644 index 0000000..be29576 --- /dev/null +++ b/composer.json @@ -0,0 +1,34 @@ +{ + "name": "rinsvent/transformer-bundle", + "description": "Data to dto bundle", + "license": "MIT", + "require": { + "php": "^8.0", + "ext-ctype": "*", + "ext-iconv": "*", + "ext-json": "*", + "rinsvent/transformer": "^0.0", + "symfony/http-kernel": "^5.3", + "symfony/config": "^5.3", + "symfony/dependency-injection": "^5.3" + }, + "require-dev": { + "codeception/codeception": "^4.1", + "codeception/module-phpbrowser": "^1.0.0", + "codeception/module-asserts": "^1.0.0", + "symfony/http-kernel": "^5.3", + "symfony/http-foundation": "^5.3", + "symfony/routing": "^5.3" + }, + "autoload": { + "psr-4": { + "tests\\": "tests/", + "Rinsvent\\TransformerBundle\\": "src/" + } + }, + "autoload-dev": { + "psr-4": { + "Rinsvent\\TransformerBundle\\Tests\\": "tests/" + } + } +} diff --git a/docker-compose-ci.yml b/docker-compose-ci.yml new file mode 100644 index 0000000..000f04e --- /dev/null +++ b/docker-compose-ci.yml @@ -0,0 +1,15 @@ +version: '3.3' + +services: + transformerbundle_php: + image: dh.rinsvent.ru/php8dev + container_name: transformerbundle_php + volumes: + - ./:/app + environment: + USE_COMPOSER_SCRIPTS: 0 + +networks: + default: + external: + name: full-project diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..cfa52cb --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,16 @@ +version: '3.3' + +services: + transformerbundle_php: + image: dh.rinsvent.ru/php8dev + container_name: transformerbundle_php + volumes: + - ./:/app + environment: + USE_COMPOSER_SCRIPTS: 0 + PHP_IDE_CONFIG: "serverName=transformerbundle_php" + +networks: + default: + external: + name: full-project diff --git a/src/DependencyInjection/TransformerExtension.php b/src/DependencyInjection/TransformerExtension.php new file mode 100644 index 0000000..4035e60 --- /dev/null +++ b/src/DependencyInjection/TransformerExtension.php @@ -0,0 +1,17 @@ +load('services.yaml'); + } +} \ No newline at end of file diff --git a/src/EventListener/RequestListener.php b/src/EventListener/RequestListener.php new file mode 100644 index 0000000..2c7ed40 --- /dev/null +++ b/src/EventListener/RequestListener.php @@ -0,0 +1,20 @@ +add(ServiceResolver::TYPE, $this->serviceResolver); + } +} diff --git a/src/Resources/config/services.yaml b/src/Resources/config/services.yaml new file mode 100644 index 0000000..fbcf6db --- /dev/null +++ b/src/Resources/config/services.yaml @@ -0,0 +1,18 @@ +services: + _defaults: + autoconfigure: true + public: false + autowire: true + + Rinsvent\TransformerBundle\EventListener\RequestListener: + autowire: true + tags: + - { name: kernel.event_listener, event: kernel.request, priority: 10000 } + + Rinsvent\TransformerBundle\Service\ServiceResolver: + bind: + $transformerLocator: !tagged_locator { tag: 'rinsvent.transformer.transformer', index_by: 'key', default_index_method: 'getLocatorKey' } + + _instanceof: + Rinsvent\TransformerBundle\Service\AbstractTransformer: + tags: [ 'rinsvent.transformer.transformer' ] diff --git a/src/Service/AbstractTransformer.php b/src/Service/AbstractTransformer.php new file mode 100644 index 0000000..ca4e4c0 --- /dev/null +++ b/src/Service/AbstractTransformer.php @@ -0,0 +1,13 @@ +transformerLocator->get($transformerClass); + } +} diff --git a/src/TransformerBundle.php b/src/TransformerBundle.php new file mode 100644 index 0000000..9a7599e --- /dev/null +++ b/src/TransformerBundle.php @@ -0,0 +1,10 @@ +add('hello', new Route('/hello/{name}', [ + '_controller' => [$controller, 'hello'] + ] + )); + + $matcher = new UrlMatcher($routes, new RequestContext()); + $dispatcher = new EventDispatcher(); + $dispatcher->addSubscriber(new RouterListener($matcher, new RequestStack())); + $listener = new RequestListener(); + $dispatcher->addListener('kernel.request', [$listener, 'onKernelRequest']); + + $controllerResolver = new ControllerResolver(); + $argumentResolver = new ArgumentResolver(); + $kernel = new HttpKernel($dispatcher, $controllerResolver, new RequestStack(), $argumentResolver); + $response = $kernel->handle($request); + $response->send(); + return $response; + } +} diff --git a/tests/_support/UnitTester.php b/tests/_support/UnitTester.php new file mode 100644 index 0000000..b4df9ff --- /dev/null +++ b/tests/_support/UnitTester.php @@ -0,0 +1,27 @@ +