Skip to content
This repository was archived by the owner on Nov 23, 2019. It is now read-only.

Commit 61ea01b

Browse files
committed
Merge branch 'develop'
2 parents a516d89 + 5e073e6 commit 61ea01b

6 files changed

+27
-22
lines changed

.travis.yml

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,8 @@ branches:
66
- develop
77

88
php:
9-
- 5.6
10-
- 7
119
- 7.1
10+
- 7.2
1211

1312
before_script:
1413
- composer self-update

CHANGELOG.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
## CHANGELOG
2+
3+
### 2.1.0
4+
5+
**Enhancements:**
6+
7+
* [4: Drop support for PHP 5.6 and 7 and add support for PHP 7.2](https://github.com/acelaya/ze-content-based-error-handler/issues/4)

composer.json

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,14 @@
1010
"error handler"
1111
],
1212
"require": {
13-
"php": "^5.6 || ^7.0",
13+
"php": "^7.1",
1414
"zendframework/zend-servicemanager": "^3.0",
1515
"zendframework/zend-expressive": "^2.0",
16-
"psr/log": "^1.0"
16+
"psr/log": "^1.0",
17+
"http-interop/http-middleware": "^0.4.1"
1718
},
1819
"require-dev": {
19-
"phpunit/phpunit": "^5.0 || ^6.0",
20+
"phpunit/phpunit": "^6.0",
2021
"squizlabs/php_codesniffer": "^2.3"
2122
},
2223
"license": "MIT",

src/ErrorHandler/ContentBasedErrorResponseGenerator.php

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,7 @@
99

1010
class ContentBasedErrorResponseGenerator implements ErrorResponseGeneratorInterface
1111
{
12-
/**
13-
* @deprecated Inject the default content type to be used while creating this class
14-
*/
15-
const DEFAULT_CONTENT = 'text/html';
12+
private const DEFAULT_CONTENT = 'text/html';
1613

1714
/**
1815
* @var ErrorResponseGeneratorManagerInterface
@@ -33,7 +30,7 @@ class ContentBasedErrorResponseGenerator implements ErrorResponseGeneratorInterf
3330

3431
/**
3532
* ContentBasedErrorResponseGenerator constructor.
36-
* @param ErrorResponseGeneratorManagerInterface|ErrorResponseGeneratorManager $errorHandlerManager
33+
* @param ErrorResponseGeneratorManagerInterface $errorHandlerManager
3734
* @param LoggerInterface $logger
3835
* @param LogMessageBuilderInterface $logMessageBuilder
3936
* @param string $defaultContentType
@@ -42,7 +39,7 @@ public function __construct(
4239
ErrorResponseGeneratorManagerInterface $errorHandlerManager,
4340
LoggerInterface $logger,
4441
LogMessageBuilderInterface $logMessageBuilder,
45-
$defaultContentType = 'text/html'
42+
string $defaultContentType = self::DEFAULT_CONTENT
4643
) {
4744
$this->errorHandlerManager = $errorHandlerManager;
4845
$this->logger = $logger;
@@ -53,12 +50,13 @@ public function __construct(
5350
/**
5451
* Final handler for an application.
5552
*
56-
* @param \Throwable|\Exception $e
53+
* @param \Throwable $e
5754
* @param Request $request
5855
* @param Response $response
5956
* @return Response
57+
* @throws InvalidArgumentException
6058
*/
61-
public function __invoke($e, Request $request, Response $response)
59+
public function __invoke($e, Request $request, Response $response): Response
6260
{
6361
// Try to get an error handler for provided request accepted type
6462
$errorHandler = $this->resolveErrorHandlerFromAcceptHeader($request);
@@ -67,13 +65,13 @@ public function __invoke($e, Request $request, Response $response)
6765
}
6866

6967
/**
70-
* Tries to resolve
68+
* Tries to resolve an error response generator based on request's accept header
7169
*
7270
* @param Request $request
7371
* @return callable
7472
* @throws InvalidArgumentException
7573
*/
76-
protected function resolveErrorHandlerFromAcceptHeader(Request $request)
74+
protected function resolveErrorHandlerFromAcceptHeader(Request $request): callable
7775
{
7876
// Try to find an error handler for one of the accepted content types
7977
$accepts = $request->hasHeader('Accept') ? $request->getHeaderLine('Accept') : $this->defaultContentType;

src/ErrorHandler/ErrorResponseGeneratorInterface.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ interface ErrorResponseGeneratorInterface
99
/**
1010
* Final handler for an application.
1111
*
12-
* @param \Throwable|\Exception $e
12+
* @param \Throwable $e
1313
* @param Request $request
1414
* @param Response $response
1515
* @return Response

test/ErrorHandler/ContentBasedErrorHandlerTest.php

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ public function setUp()
3434
public function factory($container, $name)
3535
{
3636
return function () use ($name) {
37-
return $name;
37+
return (new Response())->withHeader('Content-type', $name);
3838
};
3939
}
4040

@@ -45,17 +45,17 @@ public function correctAcceptHeaderValueInvokesErrorHandler()
4545
{
4646
$request = ServerRequestFactory::fromGlobals()->withHeader('Accept', 'foo/bar,application/json');
4747
$result = $this->errorHandler->__invoke(null, $request, new Response());
48-
$this->assertEquals('application/json', $result);
48+
$this->assertEquals('application/json', $result->getHeaderLine('Content-type'));
4949
}
5050

5151
/**
5252
* @test
5353
*/
54-
public function defaultContentTypeIsUsedWhenNoAcceptHeaderisPresent()
54+
public function defaultContentTypeIsUsedWhenNoAcceptHeaderIsPresent()
5555
{
5656
$request = ServerRequestFactory::fromGlobals();
5757
$result = $this->errorHandler->__invoke(null, $request, new Response());
58-
$this->assertEquals('text/html', $result);
58+
$this->assertEquals('text/html', $result->getHeaderLine('Content-type'));
5959
}
6060

6161
/**
@@ -65,7 +65,7 @@ public function defaultContentTypeIsUsedWhenAcceptedContentIsNotSupported()
6565
{
6666
$request = ServerRequestFactory::fromGlobals()->withHeader('Accept', 'foo/bar,text/xml');
6767
$result = $this->errorHandler->__invoke(null, $request, new Response());
68-
$this->assertEquals('text/html', $result);
68+
$this->assertEquals('text/html', $result->getHeaderLine('Content-type'));
6969
}
7070

7171
/**
@@ -101,6 +101,6 @@ public function providedDefaultContentTypeIsUsed()
101101
);
102102
$request = ServerRequestFactory::fromGlobals()->withHeader('Accept', 'foo/bar,text/xml');
103103
$result = $this->errorHandler->__invoke(null, $request, new Response());
104-
$this->assertEquals('application/json', $result);
104+
$this->assertEquals('application/json', $result->getHeaderLine('Content-type'));
105105
}
106106
}

0 commit comments

Comments
 (0)