Skip to content

Commit

Permalink
v1.0 released
Browse files Browse the repository at this point in the history
  • Loading branch information
Asisyas committed Jan 16, 2023
0 parents commit 282976e
Show file tree
Hide file tree
Showing 19 changed files with 764 additions and 0 deletions.
9 changes: 9 additions & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
/.github export-ignore
/tests export-ignore
/phpunit.xml.dist export-ignore
/.gitattributes export-ignore
/.gitignore export-ignore
/.php-cs-fixer.dist.php export-ignore
/psalm.xml export-ignore

*.php diff=php
2 changes: 2 additions & 0 deletions .github/workflows/.editorconfig
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
[{*.yaml,*.yml}]
indent_size = 2
48 changes: 48 additions & 0 deletions .github/workflows/ci.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
name: Plugin CI
on:
push:
branches: [ 'master' ]
pull_request:

env:
PHP_CS_FIXER_IGNORE_ENV: 1
XDEBUG_MODE: coverage

jobs:
tests:
name: "Tests ${{ matrix.php-version }} deps ${{ matrix.dependency-versions }}"
runs-on: ubuntu-22.04

strategy:
fail-fast: false
matrix:
# normal, highest, non-dev installs
php-version: [ '8.2' ]
dependency-versions: [ 'highest' ]
include:
# testing lowest PHP version with the lowest dependencies
# - php-version: '8.2'
# dependency-versions: 'lowest'

# testing dev versions with the highest PHP
- php-version: '8.2'
dependency-versions: 'highest'

steps:
- name: "Checkout code"
uses: "actions/checkout@v2"

- name: "Install PHP"
uses: "shivammathur/setup-php@v2"
with:
coverage: "none"
php-version: "${{ matrix.php-version }}"

- name: "Composer install"
uses: "ramsey/composer-install@v2"
with:
dependency-versions: "${{ matrix.dependency-versions }}"
composer-options: "--prefer-dist --no-progress"

- name: Run tests
run: composer run test
9 changes: 9 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
.idea
vendor
composer.lock
.phpunit.result.cache
.php-cs-fixer.cache
test-coverage-report
phpunit.xml
.php-cs-fixer.php
phpstan.neon
30 changes: 30 additions & 0 deletions .php-cs-fixer.dist.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
<?php

if (!file_exists(__DIR__.'/src')) {
exit(0);
}

$finder = (new PhpCsFixer\Finder())
->in(__DIR__.'/src')
->in(__DIR__.'/tests')
;

return (new PhpCsFixer\Config())
->setRules(array(
'@Symfony' => true,
'@Symfony:risky' => true,
'protected_to_private' => false,
'semicolon_after_instruction' => false,
'header_comment' => [
'header' => <<<EOF
This file is part of the Micro framework package.
(c) Stanislau Komar <[email protected]>
For the full copyright and license information, please view the LICENSE
file that was distributed with this source code.
EOF
]
))
->setRiskyAllowed(true)
->setFinder($finder);
58 changes: 58 additions & 0 deletions composer.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
{
"name": "micro/plugin-http-exceptions",
"description": "Micro Framework: Exception response builder.",
"license": "MIT",
"type": "micro-plugin",
"authors": [
{
"name": "Stanislau Komar",
"email": "[email protected]"
}
],
"require": {
"micro/plugin-http-core": "^1"
},
"require-dev": {
"ergebnis/composer-normalize": "^2.29",
"friendsofphp/php-cs-fixer": "^3.13",
"phpstan/phpstan": "^1.9",
"phpunit/php-code-coverage": "^9.2",
"phpunit/phpunit": "^9.5",
"vimeo/psalm": "^5.2"
},
"autoload": {
"psr-4": {
"Micro\\Plugin\\Http\\": "src/"
}
},
"autoload-dev": {
"psr-4": {
"Micro\\Plugin\\Http\\Test\\Unit\\": "tests/Unit"
}
},
"config": {
"allow-plugins": {
"ergebnis/composer-normalize": true
},
"sort-packages": true
},
"scripts": {
"coverage": "XDEBUG_MODE=coverage ./vendor/bin/phpunit --coverage-text",
"php-cs-fix": "PHP_CS_FIXER_IGNORE_ENV=1 ./vendor/bin/php-cs-fixer fix --verbose --using-cache=no",
"php-cs-try": "PHP_CS_FIXER_IGNORE_ENV=1 ./vendor/bin/php-cs-fixer fix --verbose --dry-run --using-cache=no",
"phpstan": "./vendor/bin/phpstan analyze --no-progress",
"phpunit": "./vendor/bin/phpunit",
"psalm": "./vendor/bin/psalm --no-progress --show-info=true",
"statics": [
"@phpstan",
"@psalm",
"@php-cs-try"
],
"test": [
"@statics",
"composer validate --strict",
"composer normalize",
"@coverage"
]
}
}
4 changes: 4 additions & 0 deletions phpstan.neon.dist
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
parameters:
level: 7
paths:
- src
27 changes: 27 additions & 0 deletions phpunit.xml.dist
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- https://phpunit.readthedocs.io/en/9.5/configuration.html#the-phpunit-element -->
<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="https://schema.phpunit.de/9.5/phpunit.xsd"
backupGlobals="false"
bootstrap="vendor/autoload.php"
colors="true"
failOnRisky="true"
failOnWarning="true"
>
<php>
<ini name="error_reporting" value="-1" force="true"/>
</php>
<testsuites>
<testsuite name="Unit tests">
<directory>tests/Unit</directory>
</testsuite>
</testsuites>
<coverage>
<include>
<directory suffix=".php">src</directory>
</include>
<report>
<html outputDirectory="test-coverage-report/" />
</report>
</coverage>
</phpunit>
38 changes: 38 additions & 0 deletions psalm.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
<?xml version="1.0"?>
<psalm
errorLevel="2"
resolveFromConfigFile="true"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="https://getpsalm.org/schema/config"
xsi:schemaLocation="https://getpsalm.org/schema/config vendor/vimeo/psalm/config.xsd"
>
<projectFiles>
<directory name="src" />
<ignoreFiles>
<directory name="vendor" />
</ignoreFiles>

</projectFiles>

<issueHandlers>

<UnnecessaryVarAnnotation>
<errorLevel type="suppress">
<file name="src/HttpExceptionResponsePlugin.php"/>
</errorLevel>
</UnnecessaryVarAnnotation>

<MissingConstructor>
<errorLevel type="suppress">
<file name="src/HttpExceptionResponsePlugin.php"/>
</errorLevel>
</MissingConstructor>

<ImplementedReturnTypeMismatch>
<errorLevel type="suppress">
<file name="src/HttpExceptionResponsePlugin.php"/>
</errorLevel>
</ImplementedReturnTypeMismatch>
</issueHandlers>

</psalm>
54 changes: 54 additions & 0 deletions src/Business/Executor/HttpExceptionExecutorDecorator.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
<?php

declare(strict_types=1);

/*
* This file is part of the Micro framework package.
*
* (c) Stanislau Komar <[email protected]>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/

namespace Micro\Plugin\Http\Business\Executor;

use Micro\Plugin\Http\Exception\HttpException;
use Micro\Plugin\Http\Exception\HttpInternalServerException;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;

/**
* @author Stanislau Komar <[email protected]>
*/
readonly class HttpExceptionExecutorDecorator implements RouteExecutorInterface
{
public function __construct(
private RouteExecutorInterface $decorated
) {
}

public function execute(Request $request, bool $flush = true): Response
{
try {
return $this->decorated->execute($request, $flush);
} catch (\Throwable $throwable) {
if (!$flush) {
throw $throwable;
}

if (!($throwable instanceof HttpException)) {
$throwable = new HttpInternalServerException('Internal Server Error.', $throwable);
}

$response = new Response(
$throwable->getMessage(),
$throwable->getCode(),
);

$response->send();

return $response;
}
}
}
30 changes: 30 additions & 0 deletions src/Business/Executor/HttpExceptionExecutorDecoratorFactory.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
<?php

declare(strict_types=1);

/*
* This file is part of the Micro framework package.
*
* (c) Stanislau Komar <[email protected]>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/

namespace Micro\Plugin\Http\Business\Executor;

/**
* @author Stanislau Komar <[email protected]>
*/
readonly class HttpExceptionExecutorDecoratorFactory implements RouteExecutorFactoryInterface
{
public function __construct(
private RouteExecutorInterface $decorated
) {
}

public function create(): RouteExecutorInterface
{
return new HttpExceptionExecutorDecorator($this->decorated);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
<?php

declare(strict_types=1);

/*
* This file is part of the Micro framework package.
*
* (c) Stanislau Komar <[email protected]>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/

namespace Micro\Plugin\Http\Configuration;

/**
* @author Stanislau Komar <[email protected]>
*/
interface HttpExceptionResponsePluginConfigurationInterface
{
public function getDecoratedLevel(): int;
}
Loading

0 comments on commit 282976e

Please sign in to comment.