From 1dabb2f77eda984c94aaebf6ea39aeee3b034628 Mon Sep 17 00:00:00 2001 From: Oscar Otero Date: Fri, 29 Nov 2019 13:53:41 +0100 Subject: [PATCH] prepare for a new version --- .gitattributes | 15 ++--- .gitignore | 3 +- .php_cs | 135 +++------------------------------------- .travis.yml | 3 +- CHANGELOG.md | 8 ++- LICENSE | 2 +- README.md | 31 +++++---- composer.json | 15 +++-- src/FastRoute.php | 12 ++-- tests/FastRouteTest.php | 2 +- 10 files changed, 55 insertions(+), 171 deletions(-) diff --git a/.gitattributes b/.gitattributes index 2d48476..c540470 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,9 +1,10 @@ * text=auto eol=lf -/tests export-ignore -.editorconfig export-ignore -.gitattributes export-ignore -.gitignore export-ignore -.travis.yml export-ignore -phpunit.xml export-ignore -phpcs.xml export-ignore +/tests export-ignore +.editorconfig export-ignore +.gitattributes export-ignore +.gitignore export-ignore +.php_cs export-ignore +.travis.yml export-ignore +phpcs.xml.dist export-ignore +phpunit.xml.dist export-ignore diff --git a/.gitignore b/.gitignore index d0ec629..364d1a4 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,4 @@ vendor composer.lock -.php_cs.cache coverage -.phpunit.result.cache +*.cache diff --git a/.php_cs b/.php_cs index 84bca01..90b12a3 100644 --- a/.php_cs +++ b/.php_cs @@ -1,129 +1,10 @@ files() - ->name('*.php') - ->in(__DIR__ . '/src') - ->in(__DIR__ . '/tests') -; - -return PhpCsFixer\Config::create() - ->setRules(array( - '@PSR2' => true, - 'array_syntax' => ['syntax' => 'short'], - 'binary_operator_spaces' => ['align_double_arrow' => false, 'align_equals' => false], - 'blank_line_after_namespace' => true, - 'blank_line_after_opening_tag' => false, - 'blank_line_before_return' => false, - 'braces' => ['allow_single_line_closure' => false], - 'cast_spaces' => true, - 'class_definition' => ['singleLine' => false, 'singleItemSingleLine' => true, 'multiLineExtendsEachSingleLine' => true], - 'class_keyword_remove' => false, - 'combine_consecutive_unsets' => true, - 'concat_space' => false, - 'declare_equal_normalize' => ['space' => 'single'], - 'declare_strict_types' => false, - 'elseif' => true, - 'encoding' => true, - 'full_opening_tag' => true, - 'function_declaration' => true, - 'function_typehint_space' => true, - 'general_phpdoc_annotation_remove' => ['expectedExceptionMessageRegExp', 'expectedException', 'expectedExceptionMessage'], - 'hash_to_slash_comment' => true, - 'header_comment' => false, - 'heredoc_to_nowdoc' => true, - 'include' => true, - 'indentation_type' => true, - 'line_ending' => true, - 'linebreak_after_opening_tag' => true, - 'lowercase_cast' => true, - 'lowercase_constants' => true, - 'lowercase_keywords' => true, - 'mb_str_functions' => false, - 'method_argument_space' => true, - 'method_separation' => true, - 'native_function_casing' => true, - 'native_function_invocation' => false, - 'new_with_braces' => true, - 'no_blank_lines_after_class_opening' => true, - 'no_blank_lines_after_phpdoc' => false, - 'no_blank_lines_before_namespace' => false, - 'no_closing_tag' => true, - 'no_empty_comment' => true, - 'no_empty_phpdoc' => true, - 'no_empty_statement' => true, - 'no_extra_consecutive_blank_lines' => ['break', 'continue', 'extra', 'return', 'throw', 'use', 'parenthesis_brace_block', 'square_brace_block', 'curly_brace_block'], - 'no_leading_import_slash' => true, - 'no_leading_namespace_whitespace' => true, - 'no_mixed_echo_print' => ['use' => 'echo'], - 'no_multiline_whitespace_around_double_arrow' => true, - 'no_multiline_whitespace_before_semicolons' => true, - 'no_short_bool_cast' => true, - 'no_short_echo_tag' => true, - 'no_singleline_whitespace_before_semicolons' => true, - 'no_spaces_after_function_name' => true, - 'no_spaces_around_offset' => true, - 'no_spaces_inside_parenthesis' => true, - 'no_trailing_comma_in_list_call' => true, - 'no_trailing_comma_in_singleline_array' => true, - 'no_trailing_whitespace' => true, - 'no_trailing_whitespace_in_comment' => true, - 'no_unneeded_control_parentheses' => true, - 'no_unused_imports' => true, - 'no_useless_else' => true, - 'no_useless_return' => true, - 'no_whitespace_before_comma_in_array' => true, - 'no_whitespace_in_blank_line' => true, - 'normalize_index_brace' => true, - 'not_operator_with_space' => false, - 'not_operator_with_successor_space' => false, - 'object_operator_without_whitespace' => true, - 'ordered_class_elements' => false, - 'ordered_imports' => true, - 'php_unit_fqcn_annotation' => true, - 'php_unit_strict' => false, - 'phpdoc_add_missing_param_annotation' => true, - 'phpdoc_align' => true, - 'phpdoc_inline_tag' => true, - 'phpdoc_no_access' => true, - 'phpdoc_no_alias_tag' => ['property-read' => 'property', 'property-write' => 'property', 'type' => 'var'], - 'phpdoc_no_empty_return' => true, - 'phpdoc_no_package' => true, - 'phpdoc_no_useless_inheritdoc' => true, - 'phpdoc_order' => true, - 'phpdoc_return_self_reference' => true, - 'phpdoc_scalar' => true, - 'phpdoc_separation' => false, - 'phpdoc_single_line_var_spacing' => true, - 'phpdoc_summary' => false, - 'phpdoc_to_comment' => true, - 'phpdoc_trim' => true, - 'phpdoc_types' => true, - 'phpdoc_var_without_name' => true, - 'pow_to_exponentiation' => false, - 'pre_increment' => true, - 'protected_to_private' => true, - 'return_type_declaration' => true, - 'semicolon_after_instruction' => true, - 'short_scalar_cast' => true, - 'single_blank_line_at_eof' => true, - 'single_blank_line_before_namespace' => false, - 'single_class_element_per_statement' => true, - 'single_import_per_statement' => true, - 'single_line_after_imports' => true, - 'single_quote' => true, - 'space_after_semicolon' => true, - 'standardize_not_equals' => true, - 'strict_param' => false, - 'switch_case_semicolon_to_colon' => true, - 'switch_case_space' => true, - 'ternary_operator_spaces' => true, - 'ternary_to_null_coalescing' => false, - 'trailing_comma_in_multiline_array' => true, - 'trim_array_spaces' => true, - 'unary_operator_spaces' => true, - 'visibility_required' => true, - 'whitespace_after_comma_in_array' => true, - )) - ->setFinder($finder) -; +return My\PhpCsFixerConfig::create() + ->setFinder( + PhpCsFixer\Finder::create() + ->files() + ->name('*.php') + ->in(__DIR__.'/src') + ->in(__DIR__.'/tests') + ); \ No newline at end of file diff --git a/.travis.yml b/.travis.yml index 9194866..7b6a26f 100644 --- a/.travis.yml +++ b/.travis.yml @@ -2,9 +2,8 @@ language: php sudo: false php: - - 7.0 - - 7.1 - 7.2 + - 7.3 before_script: - composer self-update diff --git a/CHANGELOG.md b/CHANGELOG.md index 691e3d8..5a30f69 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,9 +2,14 @@ All notable changes to this project will be documented in this file. -The format is based on [Keep a Changelog](http://keepachangelog.com/) +The format is based on [Keep a Changelog](http://keepachangelog.com/) and this project adheres to [Semantic Versioning](http://semver.org/). +## [2.0.0] - 2019-11-29 +### Removed +- Support for PHP 7.0 and 7.1 +- The `responseFactory()` option. Use the `__construct` argument. + ## [1.2.1] - 2019-04-01 ### Fixed - Added support for encoded path [#11] @@ -87,6 +92,7 @@ First version [#11]: https://github.com/middlewares/fast-route/issues/11 +[2.0.0]: https://github.com/middlewares/fast-route/compare/v1.2.1...v2.0.0 [1.2.1]: https://github.com/middlewares/fast-route/compare/v1.2.0...v1.2.1 [1.2.0]: https://github.com/middlewares/fast-route/compare/v1.1.0...v1.2.0 [1.1.0]: https://github.com/middlewares/fast-route/compare/v1.0.0...v1.1.0 diff --git a/LICENSE b/LICENSE index d46d39c..017c0cd 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ The MIT License (MIT) -Copyright (c) 2018 +Copyright (c) 2019 Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/README.md b/README.md index 0917928..434a0c0 100644 --- a/README.md +++ b/README.md @@ -5,13 +5,12 @@ [![Build Status][ico-travis]][link-travis] [![Quality Score][ico-scrutinizer]][link-scrutinizer] [![Total Downloads][ico-downloads]][link-downloads] -[![SensioLabs Insight][ico-sensiolabs]][link-sensiolabs] Middleware to use [FastRoute](https://github.com/nikic/FastRoute) for handler discovery. ## Requirements -* PHP >= 7.0 +* PHP >= 7.2 * A [PSR-7 http library](https://github.com/middlewares/awesome-psr15-middlewares#psr-7-implementations) * A [PSR-15 middleware dispatcher](https://github.com/middlewares/awesome-psr15-middlewares#dispatcher) @@ -57,23 +56,25 @@ $response = $dispatcher->dispatch(new ServerRequest('/hello/world')); **FastRoute** allows anything to be defined as the router handler (a closure, callback, action object, controller class, etc). The middleware will store this handler in a request attribute. -## API +## Usage -### `__construct` +Create the middleware with a `FastRoute\Dispatcher` instance: -Type | Required | Description ---------------|----------|------------ -`FastRoute\Dispatcher` | Yes | The dispatcher instance to use. -`Psr\Http\Message\ResponseFactoryInterface` | No | A PSR-17 factory to create the error responses (`404` or `405`). If it's not defined, use [Middleware\Utils\Factory](https://github.com/middlewares/utils#factory) to detect it automatically. +```php +$route = new Middlewares\FastRoute($dispatcher); +``` +Optionally, you can provide a `Psr\Http\Message\ResponseFactoryInterface` as the second argument, that will be used to create the error responses (`404` or `405`). If it's not defined, [Middleware\Utils\Factory](https://github.com/middlewares/utils#factory) will be used to detect it automatically. -### `attribute` +```php +$responseFactory = new MyOwnResponseFactory(); -Changes the attribute name used to store the handler in the server request. The default name is `request-handler`. +$route = new Middlewares\FastRoute($dispatcher, $responseFactory); +``` -Type | Required | Description ---------------|----------|------------ -`string` | Yes | The new attribute name +### attribute + +Changes the attribute name used to store the handler in the server request. The default name is `request-handler`. ```php $dispatcher = new Dispatcher([ @@ -83,8 +84,6 @@ $dispatcher = new Dispatcher([ //Execute the route handler (new Middlewares\RequestHandler())->attribute('route') ]); - -$response = $dispatcher->dispatch(new ServerRequest('/hello/world')); ``` --- @@ -97,10 +96,8 @@ The MIT License (MIT). Please see [LICENSE](LICENSE) for more information. [ico-travis]: https://img.shields.io/travis/middlewares/fast-route/master.svg?style=flat-square [ico-scrutinizer]: https://img.shields.io/scrutinizer/g/middlewares/fast-route.svg?style=flat-square [ico-downloads]: https://img.shields.io/packagist/dt/middlewares/fast-route.svg?style=flat-square -[ico-sensiolabs]: https://img.shields.io/sensiolabs/i/bb44398f-43ee-4a09-a60e-d5c9735fa0be.svg?style=flat-square [link-packagist]: https://packagist.org/packages/middlewares/fast-route [link-travis]: https://travis-ci.org/middlewares/fast-route [link-scrutinizer]: https://scrutinizer-ci.com/g/middlewares/fast-route [link-downloads]: https://packagist.org/packages/middlewares/fast-route -[link-sensiolabs]: https://insight.sensiolabs.com/projects/bb44398f-43ee-4a09-a60e-d5c9735fa0be diff --git a/composer.json b/composer.json index 7885998..426fb40 100644 --- a/composer.json +++ b/composer.json @@ -18,17 +18,17 @@ "issues": "https://github.com/middlewares/fast-route/issues" }, "require": { - "php": "^7.0", + "php": "^7.2", "nikic/fast-route": "^1.0", - "middlewares/utils": "^2.1", + "middlewares/utils": "^3.0", "psr/http-server-middleware": "^1.0" }, "require-dev": { - "phpunit/phpunit": "^6.0|^7.0", - "zendframework/zend-diactoros": "^1.3", + "phpunit/phpunit": "^8.1", + "zendframework/zend-diactoros": "^2.2", "friendsofphp/php-cs-fixer": "^2.0", "squizlabs/php_codesniffer": "^3.0", - "phpstan/phpstan": "^0.9.2|^0.10.3" + "oscarotero/php-cs-fixer-config": "^1.0" }, "autoload": { "psr-4": { @@ -45,8 +45,7 @@ "phpunit --coverage-text", "phpcs" ], - "cs-fix": "php-cs-fixer fix .", - "coverage": "phpunit --coverage-html=coverage", - "analyse": "phpstan analyse --no-progress --level 7 src" + "cs-fix": "php-cs-fixer fix", + "coverage": "phpunit --coverage-html=coverage" } } diff --git a/src/FastRoute.php b/src/FastRoute.php index 4cdfda2..520dbc0 100644 --- a/src/FastRoute.php +++ b/src/FastRoute.php @@ -5,7 +5,6 @@ use FastRoute\Dispatcher; use Middlewares\Utils\Factory; -use Middlewares\Utils\Traits\HasResponseFactory; use Psr\Http\Message\ResponseFactoryInterface; use Psr\Http\Message\ResponseInterface; use Psr\Http\Message\ServerRequestInterface; @@ -14,8 +13,6 @@ class FastRoute implements MiddlewareInterface { - use HasResponseFactory; - /** * @var Dispatcher FastRoute dispatcher */ @@ -26,6 +23,11 @@ class FastRoute implements MiddlewareInterface */ private $attribute = 'request-handler'; + /** + * @var ResponseFactoryInterface + */ + private $responseFactory; + /** * Set the Dispatcher instance and optionally the response factory to return the error responses. */ @@ -53,11 +55,11 @@ public function process(ServerRequestInterface $request, RequestHandlerInterface $route = $this->router->dispatch($request->getMethod(), rawurldecode($request->getUri()->getPath())); if ($route[0] === Dispatcher::NOT_FOUND) { - return $this->createResponse(404); + return $this->responseFactory->createResponse(404); } if ($route[0] === Dispatcher::METHOD_NOT_ALLOWED) { - return $this->createResponse(405)->withHeader('Allow', implode(', ', $route[1])); + return $this->responseFactory->createResponse(405)->withHeader('Allow', implode(', ', $route[1])); } foreach ($route[2] as $name => $value) { diff --git a/tests/FastRouteTest.php b/tests/FastRouteTest.php index 3a0e025..aba1b56 100644 --- a/tests/FastRouteTest.php +++ b/tests/FastRouteTest.php @@ -3,11 +3,11 @@ namespace Middlewares\Tests; +use function FastRoute\simpleDispatcher; use Middlewares\FastRoute; use Middlewares\Utils\Dispatcher; use Middlewares\Utils\Factory; use PHPUnit\Framework\TestCase; -use function FastRoute\simpleDispatcher; class FastRouteTest extends TestCase {