Skip to content

Commit 4e252a7

Browse files
author
Till Hildebrandt
committed
Implemented Pull Request Feedback for #361
- eased expression to configure cache listeners in dependency injection - added array node for cache listeners - fixed xml config
2 parents 1fd748b + 060b9b1 commit 4e252a7

File tree

12 files changed

+141
-44
lines changed

12 files changed

+141
-44
lines changed

.travis.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,8 @@ matrix:
2828
# Test the latest stable release
2929
- php: 7.2
3030
- php: 7.3
31-
- php: 7.4
3231
env: COVERAGE=true TEST_COMMAND="composer test-ci" DEPENDENCIES="php-http/vcr-plugin:^1.0@dev"
32+
- php: 7.4
3333

3434
# Test LTS versions
3535
- php: 7.3

CHANGELOG.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,15 @@
22

33
The change log describes what is "Added", "Removed", "Changed" or "Fixed" between each release.
44

5-
## Unreleased
5+
## 1.17.0 - 2019-12-27
66

77
### Added
88

99
- Support Symfony 5 and Twig 3.
1010
- Configured clients are now tagged with `'httplug.client'`
1111
- Adds a link to profiler page when response is from a Symfony application with
1212
profiler enabled
13-
- Adding `cache_listeners` option of `php-http/cache-plugin`
13+
- Adding `blacklisted_paths` option of `php-http/cache-plugin`
1414

1515
### Changed
1616

composer.json

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -46,19 +46,19 @@
4646
"php-http/curl-client": "<2.0"
4747
},
4848
"require-dev": {
49-
"guzzlehttp/psr7": "^1.0",
5049
"matthiasnoback/symfony-dependency-injection-test": "^4.0",
5150
"nyholm/nsa": "^1.1",
52-
"php-http/cache-plugin": "^1.6",
51+
"nyholm/psr7": "^1.2.1",
52+
"php-http/cache-plugin": "^1.7",
5353
"php-http/guzzle6-adapter": "^1.1.1 || ^2.0.1",
5454
"php-http/mock-client": "^1.2",
5555
"php-http/promise": "^1.0",
5656
"polishsymfonycommunity/symfony-mocker-container": "^1.0",
5757
"symfony/browser-kit": "^3.4.34 || ^4.2.12 || ^5.0",
58-
"symfony/cache": "^3.4.34 || ~4.2.12 || ^4.3.8 || ^5.0",
58+
"symfony/cache": "^3.4.35 || ~4.2.12 || ^4.3.8 || ^5.0",
5959
"symfony/dom-crawler": "^3.4.34 || ^4.2.12 || ^5.0",
6060
"symfony/framework-bundle": "^3.4.34 || ^4.2.12 || ^5.0",
61-
"symfony/http-foundation": "^3.4.34 || ~4.2.12 || ^4.3.8 || ^5.0",
61+
"symfony/http-foundation": "^3.4.35 || ~4.2.12 || ^4.3.8 || ^5.0",
6262
"symfony/phpunit-bridge": "^3.4.34 || ^4.2.12 || ^5.0",
6363
"symfony/stopwatch": "^3.4.34 || ^4.2.12 || ^5.0",
6464
"symfony/twig-bundle": "^3.4.34 || ^4.2.12 || ^5.0",

src/Collector/Collector.php

Lines changed: 6 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,9 @@
22

33
namespace Http\HttplugBundle\Collector;
44

5-
use Symfony\Component\HttpKernel\Kernel;
65
use Symfony\Component\HttpFoundation\Request;
76
use Symfony\Component\HttpFoundation\Response;
87
use Symfony\Component\HttpKernel\DataCollector\DataCollector;
9-
use Throwable;
108

119
/**
1210
* The Collector hold profiled Stacks pushed by StackPlugin. It also have a list of configured clients.
@@ -19,8 +17,7 @@
1917
*
2018
* @internal
2119
*/
22-
// Make this class non-abstract and move collect into it when we drop support for Symfony 4.
23-
abstract class BaseCollector extends DataCollector
20+
class Collector extends DataCollector
2421
{
2522
/**
2623
* @var Stack|null
@@ -192,28 +189,12 @@ public function getTotalDuration()
192189
return $carry + $stack->getDuration();
193190
}, 0);
194191
}
195-
}
196192

197-
if (Kernel::MAJOR_VERSION >= 5) {
198-
class Collector extends BaseCollector
199-
{
200-
/**
201-
* {@inheritdoc}
202-
*/
203-
public function collect(Request $request, Response $response, Throwable $exception = null)
204-
{
205-
// We do not need to collect any data from the Symfony Request and Response
206-
}
207-
}
208-
} else {
209-
class Collector extends BaseCollector
193+
/**
194+
* {@inheritdoc}
195+
*/
196+
public function collect(Request $request, Response $response, $exception = null)
210197
{
211-
/**
212-
* {@inheritdoc}
213-
*/
214-
public function collect(Request $request, Response $response, \Exception $exception = null)
215-
{
216-
// We do not need to collect any data from the Symfony Request and Response
217-
}
198+
// We do not need to collect any data from the Symfony Request and Response
218199
}
219200
}

src/DependencyInjection/Configuration.php

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,19 +121,33 @@ public function getConfigTreeBuilder()
121121
->info('Configure which service the main alias point to.')
122122
->children()
123123
->scalarNode('client')->defaultValue('httplug.client.default')->end()
124+
->scalarNode('psr18_client')->defaultValue('httplug.psr18_client.default')->end()
124125
->scalarNode('message_factory')->defaultValue('httplug.message_factory.default')->end()
125126
->scalarNode('uri_factory')->defaultValue('httplug.uri_factory.default')->end()
126127
->scalarNode('stream_factory')->defaultValue('httplug.stream_factory.default')->end()
128+
->scalarNode('psr17_request_factory')->defaultValue('httplug.psr17_request_factory.default')->end()
129+
->scalarNode('psr17_response_factory')->defaultValue('httplug.psr17_response_factory.default')->end()
130+
->scalarNode('psr17_stream_factory')->defaultValue('httplug.psr17_stream_factory.default')->end()
131+
->scalarNode('psr17_uri_factory')->defaultValue('httplug.psr17_uri_factory.default')->end()
132+
->scalarNode('psr17_uploaded_file_factory')->defaultValue('httplug.psr17_uploaded_file_factory.default')->end()
133+
->scalarNode('psr17_server_request_factory')->defaultValue('httplug.psr17_server_request_factory.default')->end()
127134
->end()
128135
->end()
129136
->arrayNode('classes')
130137
->addDefaultsIfNotSet()
131138
->info('Overwrite a service class instead of using the discovery mechanism.')
132139
->children()
133140
->scalarNode('client')->defaultNull()->end()
141+
->scalarNode('psr18_client')->defaultNull()->end()
134142
->scalarNode('message_factory')->defaultNull()->end()
135143
->scalarNode('uri_factory')->defaultNull()->end()
136144
->scalarNode('stream_factory')->defaultNull()->end()
145+
->scalarNode('psr17_request_factory')->defaultNull()->end()
146+
->scalarNode('psr17_response_factory')->defaultNull()->end()
147+
->scalarNode('psr17_stream_factory')->defaultNull()->end()
148+
->scalarNode('psr17_uri_factory')->defaultNull()->end()
149+
->scalarNode('psr17_uploaded_file_factory')->defaultNull()->end()
150+
->scalarNode('psr17_server_request_factory')->defaultNull()->end()
137151
->end()
138152
->end()
139153
->arrayNode('profiling')
@@ -722,6 +736,25 @@ private function createCachePluginNode()
722736
->integerNode('default_ttl')
723737
->info('The default max age of a Response')
724738
->end()
739+
->arrayNode('blacklisted_paths')
740+
->info('An array of regular expression patterns for paths not to be cached. Defaults to an empty array.')
741+
->defaultValue([])
742+
->beforeNormalization()
743+
->castToArray()
744+
->end()
745+
->prototype('scalar')
746+
->validate()
747+
->ifTrue(function ($v) {
748+
return false === @preg_match($v, '');
749+
})
750+
->thenInvalid('Invalid regular expression for a blacklisted path: %s')
751+
->end()
752+
->end()
753+
->end()
754+
->arrayNode('cache_listeners')
755+
->info('A list of service ids to act on the response based on the results of the cache check. Must implement '.CacheListener::class.'. Defaults to an empty array.')
756+
->beforeNormalization()->ifNull()->thenEmptyArray()->castToArray()->ifEmpty()->thenUnset()->end()
757+
->end()
725758
->enumNode('hash_algo')
726759
->info('Hashing algorithm to use')
727760
->values(hash_algos())

src/DependencyInjection/HttplugExtension.php

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -203,19 +203,19 @@ private function configurePluginByName($name, Definition $definition, array $con
203203
switch ($name) {
204204
case 'cache':
205205
$options = $config['config'];
206-
207206
if (!empty($options['cache_key_generator'])) {
208207
$options['cache_key_generator'] = new Reference($options['cache_key_generator']);
209208
}
210209

211-
if (!empty($options['cache_listeners'])) {
212-
foreach ($options['cache_listeners'] as $i => $listener) {
213-
if (!empty($listener)) {
214-
$options['cache_listeners'][$i] = new Reference($listener);
215-
}
216-
}
210+
if (empty($options['blacklisted_paths'])) {
211+
unset($options['blacklisted_paths']);
217212
}
218-
if (!count($options['cache_listeners'])) {
213+
214+
$options['cache_listeners'] = array_map(function (string $serviceName): Reference {
215+
return new Reference($serviceName);
216+
}, $options['cache_listeners']);
217+
218+
if (0 === count($options['cache_listeners'])) {
219219
unset($options['cache_listeners']);
220220
}
221221

src/Resources/config/data-collector.xml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@
2424

2525
<service id="httplug.collector.twig.http_message" class="Http\HttplugBundle\Collector\Twig\HttpMessageMarkupExtension" public="false">
2626
<tag name="twig.extension" />
27-
<deprecated>The %service_id% service is deprecated since version 1.17 and will be removed in 2.0. Use "@Httplug/http_message.html.twig" template instead.</deprecated>
2827
</service>
2928

3029
<!-- Discovered clients -->

src/Resources/config/services.xml

Lines changed: 27 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,31 @@
4646
</service>
4747
<service id="Http\Client\HttpClient" alias="httplug.client" public="false" />
4848

49+
<!-- Discovery for PSR-18 -->
50+
<service id="httplug.psr18_client.default" class="Psr\Http\Client\ClientInterface">
51+
<factory class="Http\Discovery\Psr18ClientDiscovery" method="find" />
52+
</service>
53+
54+
<!-- Discovery for PSR-17 -->
55+
<service id="httplug.psr17_request_factory.default" class="Psr\Http\Message\RequestFactoryInterface">
56+
<factory class="Http\Discovery\Psr17FactoryDiscovery" method="findRequestFactory" />
57+
</service>
58+
<service id="httplug.psr17_response_factory.default" class="Psr\Http\Message\ResponseFactoryInterface">
59+
<factory class="Http\Discovery\Psr17FactoryDiscovery" method="findResponseFactory" />
60+
</service>
61+
<service id="httplug.psr17_stream_factory.default" class="Psr\Http\Message\StreamFactoryInterface">
62+
<factory class="Http\Discovery\Psr17FactoryDiscovery" method="findStreamFactory" />
63+
</service>
64+
<service id="httplug.psr17_uri_factory.default" class="Psr\Http\Message\UriFactoryInterface">
65+
<factory class="Http\Discovery\Psr17FactoryDiscovery" method="findUrlFactory" />
66+
</service>
67+
<service id="httplug.psr17_uploaded_file_factory.default" class="Psr\Http\Message\UploadedFileFactoryInterface">
68+
<factory class="Http\Discovery\Psr17FactoryDiscovery" method="findUploadedFileFactory" />
69+
</service>
70+
<service id="httplug.psr17_server_request_factory.default" class="Psr\Http\Message\ServerRequestFactoryInterface">
71+
<factory class="Http\Discovery\Psr17FactoryDiscovery" method="findServerRequestFactory" />
72+
</service>
73+
4974
<!-- PluginClientFactory -->
5075
<service id="Http\Client\Common\PluginClientFactory" class="Http\Client\Common\PluginClientFactory" public="false" />
5176

@@ -55,8 +80,8 @@
5580
<argument type="service" id="httplug.message_factory"/>
5681
</service>
5782
<service id="httplug.factory.curl" class="Http\HttplugBundle\ClientFactory\CurlFactory" public="false">
58-
<argument type="service" id="httplug.message_factory"/>
59-
<argument type="service" id="httplug.stream_factory"/>
83+
<argument type="service" id="httplug.psr17_response_factory"/>
84+
<argument type="service" id="httplug.psr17_stream_factory"/>
6085
</service>
6186
<service id="httplug.factory.guzzle5" class="Http\HttplugBundle\ClientFactory\Guzzle5Factory" public="false">
6287
<argument type="service" id="httplug.message_factory"/>

tests/Resources/Fixtures/config/full.php

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,13 @@
1313
'message_factory' => 'Http\Message\MessageFactory\GuzzleMessageFactory',
1414
'uri_factory' => 'Http\Message\UriFactory\GuzzleUriFactory',
1515
'stream_factory' => 'Http\Message\StreamFactory\GuzzleStreamFactory',
16+
'psr18_client' => 'Http\Adapter\Guzzle6\Client',
17+
'psr17_request_factory' => 'Nyholm\Psr7\Factory\Psr17Factory',
18+
'psr17_response_factory' => 'Nyholm\Psr7\Factory\Psr17Factory',
19+
'psr17_stream_factory' => 'Nyholm\Psr7\Factory\Psr17Factory',
20+
'psr17_uri_factory' => 'Nyholm\Psr7\Factory\Psr17Factory',
21+
'psr17_uploaded_file_factory' => 'Nyholm\Psr7\Factory\Psr17Factory',
22+
'psr17_server_request_factory' => 'Nyholm\Psr7\Factory\Psr17Factory',
1623
],
1724
'clients' => [
1825
'test' => [
@@ -102,6 +109,7 @@
102109
'methods' => ['GET'],
103110
'cache_key_generator' => null,
104111
'respect_response_cache_directives' => ['X-Foo'],
112+
'blacklisted_paths' => ['@/path/not-to-be/cached@'],
105113
'cache_listeners' => [],
106114
],
107115
],

tests/Resources/Fixtures/config/full.xml

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,13 @@
1414
<message-factory>Http\Message\MessageFactory\GuzzleMessageFactory</message-factory>
1515
<uri-factory>Http\Message\UriFactory\GuzzleUriFactory</uri-factory>
1616
<stream-factory>Http\Message\StreamFactory\GuzzleStreamFactory</stream-factory>
17+
<psr18-client>Http\Adapter\Guzzle6\Client</psr18-client>
18+
<psr17-request-factory>Nyholm\Psr7\Factory\Psr17Factory</psr17-request-factory>
19+
<psr17-response-factory>Nyholm\Psr7\Factory\Psr17Factory</psr17-response-factory>
20+
<psr17-stream-factory>Nyholm\Psr7\Factory\Psr17Factory</psr17-stream-factory>
21+
<psr17-uri-factory>Nyholm\Psr7\Factory\Psr17Factory</psr17-uri-factory>
22+
<psr17-uploaded-file-factory>Nyholm\Psr7\Factory\Psr17Factory</psr17-uploaded-file-factory>
23+
<psr17-server-request-factory>Nyholm\Psr7\Factory\Psr17Factory</psr17-server-request-factory>
1724
</classes>
1825
<client name="test" factory="httplug.factory.guzzle6" http-methods-client="true">
1926
<plugin>httplug.plugin.redirect</plugin>
@@ -54,9 +61,11 @@
5461
<my_service type="service" service="my_auth_service"/>
5562
</authentication>
5663
<cache cache-pool="my_cache_pool" stream-factory="my_other_stream_factory">
57-
<config default-ttl="42" cache-lifetime="2592000" hash-algo="sha1" cache-key-generator="null" cache-listeners="">
64+
<config default-ttl="42" cache-lifetime="2592000" hash-algo="sha1" cache-key-generator="null">
65+
<cache-listeners></cache-listeners>
5866
<respect-response-cache-directive>X-Foo</respect-response-cache-directive>
5967
<method>GET</method>
68+
<blacklisted-paths>@/path/not-to-be/cached@</blacklisted-paths>
6069
</config>
6170
</cache>
6271
<cookie cookie-jar="my_cookie_jar"/>

tests/Resources/Fixtures/config/full.yml

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,13 @@ httplug:
1010
message_factory: Http\Message\MessageFactory\GuzzleMessageFactory
1111
uri_factory: Http\Message\UriFactory\GuzzleUriFactory
1212
stream_factory: Http\Message\StreamFactory\GuzzleStreamFactory
13+
psr18_client: Http\Adapter\Guzzle6\Client
14+
psr17_request_factory: Nyholm\Psr7\Factory\Psr17Factory
15+
psr17_response_factory: Nyholm\Psr7\Factory\Psr17Factory
16+
psr17_stream_factory: Nyholm\Psr7\Factory\Psr17Factory
17+
psr17_uri_factory: Nyholm\Psr7\Factory\Psr17Factory
18+
psr17_uploaded_file_factory: Nyholm\Psr7\Factory\Psr17Factory
19+
psr17_server_request_factory: Nyholm\Psr7\Factory\Psr17Factory
1320
clients:
1421
test:
1522
factory: httplug.factory.guzzle6
@@ -73,6 +80,8 @@ httplug:
7380
cache_key_generator: null
7481
respect_response_cache_directives:
7582
- X-Foo
83+
blacklisted_paths:
84+
- '@/path/not-to-be/cached@'
7685
cache_listeners: []
7786
cookie:
7887
cookie_jar: my_cookie_jar

0 commit comments

Comments
 (0)