From 48a12284c13ae1ae577d92a721592b5067f819c1 Mon Sep 17 00:00:00 2001 From: Tobias Nyholm Date: Fri, 31 Mar 2017 18:29:53 +0200 Subject: [PATCH 1/9] Added VeryGenerator --- spec/Generator/VaryGeneratorSpec.php | 34 +++++++++++++++++++++++++ src/Generator/VaryGenerator.php | 38 ++++++++++++++++++++++++++++ 2 files changed, 72 insertions(+) create mode 100644 spec/Generator/VaryGeneratorSpec.php create mode 100644 src/Generator/VaryGenerator.php diff --git a/spec/Generator/VaryGeneratorSpec.php b/spec/Generator/VaryGeneratorSpec.php new file mode 100644 index 0000000..39f675b --- /dev/null +++ b/spec/Generator/VaryGeneratorSpec.php @@ -0,0 +1,34 @@ +beConstructedWith(['Authorization', 'Content-Type']); + } + + public function it_is_initializable() + { + $this->shouldHaveType('Http\Client\Common\Plugin\Generator\VaryGenerator'); + } + + public function it_is_a_key_generator() + { + $this->shouldImplement('Http\Client\Common\Plugin\Generator\CacheKeyGenerator'); + } + + public function it_generates_cache_from_request(RequestInterface $request) + { + $request->getMethod()->shouldBeCalled()->willReturn('GET'); + $request->getUri()->shouldBeCalled()->willReturn('http://example.com/foo'); + $request->getHeaderLine('Authorization')->shouldBeCalled()->willReturn('bar'); + $request->getHeaderLine('Content-Type')->shouldBeCalled()->willReturn('application/baz'); + + $this->generate($request)->shouldReturn('GET http://example.com/foo Authorization:"bar" Content-Type:"application/baz"'); + } +} diff --git a/src/Generator/VaryGenerator.php b/src/Generator/VaryGenerator.php new file mode 100644 index 0000000..ff76bb8 --- /dev/null +++ b/src/Generator/VaryGenerator.php @@ -0,0 +1,38 @@ + + */ +class VaryGenerator implements CacheKeyGenerator +{ + /** + * The header names we should vary on. + * + * @var array + */ + private $headerNames; + + /** + * @param $headerNames + */ + public function __construct(array $headerNames) + { + $this->headerNames = $headerNames; + } + + public function generate(RequestInterface $request) + { + $concatenatedHeaders = []; + foreach ($this->headerNames as $headerName) { + $concatenatedHeaders[] = sprintf(' %s:"%s"', $headerName, $request->getHeaderLine($headerName)); + } + + return $request->getMethod().' '.$request->getUri().implode('', $concatenatedHeaders); + } +} From d26041e239a0db00c820bf4c1a125e6a1aa88c39 Mon Sep 17 00:00:00 2001 From: Tobias Nyholm Date: Fri, 31 Mar 2017 23:51:53 +0200 Subject: [PATCH 2/9] Updated namespace --- spec/{ => Cache}/Generator/VaryGeneratorSpec.php | 6 +++--- src/{ => Cache}/Generator/VaryGenerator.php | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) rename spec/{ => Cache}/Generator/VaryGeneratorSpec.php (78%) rename src/{ => Cache}/Generator/VaryGenerator.php (94%) diff --git a/spec/Generator/VaryGeneratorSpec.php b/spec/Cache/Generator/VaryGeneratorSpec.php similarity index 78% rename from spec/Generator/VaryGeneratorSpec.php rename to spec/Cache/Generator/VaryGeneratorSpec.php index 39f675b..36ed2a1 100644 --- a/spec/Generator/VaryGeneratorSpec.php +++ b/spec/Cache/Generator/VaryGeneratorSpec.php @@ -1,6 +1,6 @@ shouldHaveType('Http\Client\Common\Plugin\Generator\VaryGenerator'); + $this->shouldHaveType('Http\Client\Common\Plugin\Cache\Generator\VaryGenerator'); } public function it_is_a_key_generator() { - $this->shouldImplement('Http\Client\Common\Plugin\Generator\CacheKeyGenerator'); + $this->shouldImplement('Http\Client\Common\Plugin\Cache\Generator\CacheKeyGenerator'); } public function it_generates_cache_from_request(RequestInterface $request) diff --git a/src/Generator/VaryGenerator.php b/src/Cache/Generator/VaryGenerator.php similarity index 94% rename from src/Generator/VaryGenerator.php rename to src/Cache/Generator/VaryGenerator.php index ff76bb8..9507d7b 100644 --- a/src/Generator/VaryGenerator.php +++ b/src/Cache/Generator/VaryGenerator.php @@ -1,6 +1,6 @@ Date: Mon, 3 Apr 2017 09:05:25 +0200 Subject: [PATCH 3/9] Renamed to HeaderHashGenerator --- .../{VaryGeneratorSpec.php => HeaderHashGeneratorSpec.php} | 4 ++-- .../{VaryGenerator.php => HeaderHashGenerator.php} | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) rename spec/Cache/Generator/{VaryGeneratorSpec.php => HeaderHashGeneratorSpec.php} (92%) rename src/Cache/Generator/{VaryGenerator.php => HeaderHashGenerator.php} (78%) diff --git a/spec/Cache/Generator/VaryGeneratorSpec.php b/spec/Cache/Generator/HeaderHashGeneratorSpec.php similarity index 92% rename from spec/Cache/Generator/VaryGeneratorSpec.php rename to spec/Cache/Generator/HeaderHashGeneratorSpec.php index 36ed2a1..6ee311e 100644 --- a/spec/Cache/Generator/VaryGeneratorSpec.php +++ b/spec/Cache/Generator/HeaderHashGeneratorSpec.php @@ -5,7 +5,7 @@ use PhpSpec\ObjectBehavior; use Psr\Http\Message\RequestInterface; -class VaryGeneratorSpec extends ObjectBehavior +class HeaderHashGeneratorSpec extends ObjectBehavior { public function let() { @@ -14,7 +14,7 @@ public function let() public function it_is_initializable() { - $this->shouldHaveType('Http\Client\Common\Plugin\Cache\Generator\VaryGenerator'); + $this->shouldHaveType('Http\Client\Common\Plugin\Cache\Generator\HeaderHashGenerator'); } public function it_is_a_key_generator() diff --git a/src/Cache/Generator/VaryGenerator.php b/src/Cache/Generator/HeaderHashGenerator.php similarity index 78% rename from src/Cache/Generator/VaryGenerator.php rename to src/Cache/Generator/HeaderHashGenerator.php index 9507d7b..25149da 100644 --- a/src/Cache/Generator/VaryGenerator.php +++ b/src/Cache/Generator/HeaderHashGenerator.php @@ -5,14 +5,14 @@ use Psr\Http\Message\RequestInterface; /** - * Generate a cache key and specify what headers you want to vary on. + * Generate a cache key by specify what headers you want to vary on. * * @author Tobias Nyholm */ -class VaryGenerator implements CacheKeyGenerator +class HeaderHashGenerator implements CacheKeyGenerator { /** - * The header names we should vary on. + * The header names we should take into account when creating the cache key. * * @var array */ From c340f6ba04e207748aad5efcdb493ebacacfce7e Mon Sep 17 00:00:00 2001 From: Tobias Nyholm Date: Wed, 5 Apr 2017 08:49:57 +0200 Subject: [PATCH 4/9] Renamed to SharedCacheKeyGenerator --- ...hGeneratorSpec.php => SharedCacheKeyGeneratorSpec.php} | 4 ++-- ...eaderHashGenerator.php => SharedCacheKeyGenerator.php} | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) rename spec/Cache/Generator/{HeaderHashGeneratorSpec.php => SharedCacheKeyGeneratorSpec.php} (92%) rename src/Cache/Generator/{HeaderHashGenerator.php => SharedCacheKeyGenerator.php} (73%) diff --git a/spec/Cache/Generator/HeaderHashGeneratorSpec.php b/spec/Cache/Generator/SharedCacheKeyGeneratorSpec.php similarity index 92% rename from spec/Cache/Generator/HeaderHashGeneratorSpec.php rename to spec/Cache/Generator/SharedCacheKeyGeneratorSpec.php index 6ee311e..b338d6b 100644 --- a/spec/Cache/Generator/HeaderHashGeneratorSpec.php +++ b/spec/Cache/Generator/SharedCacheKeyGeneratorSpec.php @@ -5,7 +5,7 @@ use PhpSpec\ObjectBehavior; use Psr\Http\Message\RequestInterface; -class HeaderHashGeneratorSpec extends ObjectBehavior +class SharedCacheKeyGeneratorSpec extends ObjectBehavior { public function let() { @@ -14,7 +14,7 @@ public function let() public function it_is_initializable() { - $this->shouldHaveType('Http\Client\Common\Plugin\Cache\Generator\HeaderHashGenerator'); + $this->shouldHaveType('Http\Client\Common\Plugin\Cache\Generator\SharedCacheKeyGenerator'); } public function it_is_a_key_generator() diff --git a/src/Cache/Generator/HeaderHashGenerator.php b/src/Cache/Generator/SharedCacheKeyGenerator.php similarity index 73% rename from src/Cache/Generator/HeaderHashGenerator.php rename to src/Cache/Generator/SharedCacheKeyGenerator.php index 25149da..e591d52 100644 --- a/src/Cache/Generator/HeaderHashGenerator.php +++ b/src/Cache/Generator/SharedCacheKeyGenerator.php @@ -5,11 +5,11 @@ use Psr\Http\Message\RequestInterface; /** - * Generate a cache key by specify what headers you want to vary on. + * Generate a cache key by vary on Cookie and Authorization header. * * @author Tobias Nyholm */ -class HeaderHashGenerator implements CacheKeyGenerator +class SharedCacheKeyGenerator implements CacheKeyGenerator { /** * The header names we should take into account when creating the cache key. @@ -19,9 +19,9 @@ class HeaderHashGenerator implements CacheKeyGenerator private $headerNames; /** - * @param $headerNames + * @param array $headerNames defaults to Authorization and Cookie */ - public function __construct(array $headerNames) + public function __construct(array $headerNames = ['Authorization', 'Cookie']) { $this->headerNames = $headerNames; } From ec0f9582fcc63ae7e5f2931ecae58a39f7219009 Mon Sep 17 00:00:00 2001 From: Tobias Nyholm Date: Wed, 5 Apr 2017 09:27:31 +0200 Subject: [PATCH 5/9] Revert "Renamed to SharedCacheKeyGenerator" This reverts commit c340f6ba04e207748aad5efcdb493ebacacfce7e. --- ...heKeyGeneratorSpec.php => HeaderHashGeneratorSpec.php} | 4 ++-- ...haredCacheKeyGenerator.php => HeaderHashGenerator.php} | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) rename spec/Cache/Generator/{SharedCacheKeyGeneratorSpec.php => HeaderHashGeneratorSpec.php} (92%) rename src/Cache/Generator/{SharedCacheKeyGenerator.php => HeaderHashGenerator.php} (73%) diff --git a/spec/Cache/Generator/SharedCacheKeyGeneratorSpec.php b/spec/Cache/Generator/HeaderHashGeneratorSpec.php similarity index 92% rename from spec/Cache/Generator/SharedCacheKeyGeneratorSpec.php rename to spec/Cache/Generator/HeaderHashGeneratorSpec.php index b338d6b..6ee311e 100644 --- a/spec/Cache/Generator/SharedCacheKeyGeneratorSpec.php +++ b/spec/Cache/Generator/HeaderHashGeneratorSpec.php @@ -5,7 +5,7 @@ use PhpSpec\ObjectBehavior; use Psr\Http\Message\RequestInterface; -class SharedCacheKeyGeneratorSpec extends ObjectBehavior +class HeaderHashGeneratorSpec extends ObjectBehavior { public function let() { @@ -14,7 +14,7 @@ public function let() public function it_is_initializable() { - $this->shouldHaveType('Http\Client\Common\Plugin\Cache\Generator\SharedCacheKeyGenerator'); + $this->shouldHaveType('Http\Client\Common\Plugin\Cache\Generator\HeaderHashGenerator'); } public function it_is_a_key_generator() diff --git a/src/Cache/Generator/SharedCacheKeyGenerator.php b/src/Cache/Generator/HeaderHashGenerator.php similarity index 73% rename from src/Cache/Generator/SharedCacheKeyGenerator.php rename to src/Cache/Generator/HeaderHashGenerator.php index e591d52..25149da 100644 --- a/src/Cache/Generator/SharedCacheKeyGenerator.php +++ b/src/Cache/Generator/HeaderHashGenerator.php @@ -5,11 +5,11 @@ use Psr\Http\Message\RequestInterface; /** - * Generate a cache key by vary on Cookie and Authorization header. + * Generate a cache key by specify what headers you want to vary on. * * @author Tobias Nyholm */ -class SharedCacheKeyGenerator implements CacheKeyGenerator +class HeaderHashGenerator implements CacheKeyGenerator { /** * The header names we should take into account when creating the cache key. @@ -19,9 +19,9 @@ class SharedCacheKeyGenerator implements CacheKeyGenerator private $headerNames; /** - * @param array $headerNames defaults to Authorization and Cookie + * @param $headerNames */ - public function __construct(array $headerNames = ['Authorization', 'Cookie']) + public function __construct(array $headerNames) { $this->headerNames = $headerNames; } From 4a1c4ef89191f464a8c1cd716db0a92a4960845d Mon Sep 17 00:00:00 2001 From: Tobias Nyholm Date: Wed, 5 Apr 2017 09:29:22 +0200 Subject: [PATCH 6/9] More renaming --- ...rHashGeneratorSpec.php => HeaderCacheKeyGeneratorSpec.php} | 4 ++-- .../{HeaderHashGenerator.php => HeaderCacheKeyGenerator.php} | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) rename spec/Cache/Generator/{HeaderHashGeneratorSpec.php => HeaderCacheKeyGeneratorSpec.php} (92%) rename src/Cache/Generator/{HeaderHashGenerator.php => HeaderCacheKeyGenerator.php} (93%) diff --git a/spec/Cache/Generator/HeaderHashGeneratorSpec.php b/spec/Cache/Generator/HeaderCacheKeyGeneratorSpec.php similarity index 92% rename from spec/Cache/Generator/HeaderHashGeneratorSpec.php rename to spec/Cache/Generator/HeaderCacheKeyGeneratorSpec.php index 6ee311e..37b498a 100644 --- a/spec/Cache/Generator/HeaderHashGeneratorSpec.php +++ b/spec/Cache/Generator/HeaderCacheKeyGeneratorSpec.php @@ -5,7 +5,7 @@ use PhpSpec\ObjectBehavior; use Psr\Http\Message\RequestInterface; -class HeaderHashGeneratorSpec extends ObjectBehavior +class HeaderCacheKeyGeneratorSpec extends ObjectBehavior { public function let() { @@ -14,7 +14,7 @@ public function let() public function it_is_initializable() { - $this->shouldHaveType('Http\Client\Common\Plugin\Cache\Generator\HeaderHashGenerator'); + $this->shouldHaveType('Http\Client\Common\Plugin\Cache\Generator\HeaderCacheKeyGenerator'); } public function it_is_a_key_generator() diff --git a/src/Cache/Generator/HeaderHashGenerator.php b/src/Cache/Generator/HeaderCacheKeyGenerator.php similarity index 93% rename from src/Cache/Generator/HeaderHashGenerator.php rename to src/Cache/Generator/HeaderCacheKeyGenerator.php index 25149da..04cd307 100644 --- a/src/Cache/Generator/HeaderHashGenerator.php +++ b/src/Cache/Generator/HeaderCacheKeyGenerator.php @@ -9,7 +9,7 @@ * * @author Tobias Nyholm */ -class HeaderHashGenerator implements CacheKeyGenerator +class HeaderCacheKeyGenerator implements CacheKeyGenerator { /** * The header names we should take into account when creating the cache key. From ea1ac1b0ef195be1685d486f623f95f8280b5a17 Mon Sep 17 00:00:00 2001 From: Tobias Nyholm Date: Wed, 5 Apr 2017 09:58:25 +0200 Subject: [PATCH 7/9] Doc update --- src/Cache/Generator/HeaderCacheKeyGenerator.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Cache/Generator/HeaderCacheKeyGenerator.php b/src/Cache/Generator/HeaderCacheKeyGenerator.php index 04cd307..70b5506 100644 --- a/src/Cache/Generator/HeaderCacheKeyGenerator.php +++ b/src/Cache/Generator/HeaderCacheKeyGenerator.php @@ -5,7 +5,7 @@ use Psr\Http\Message\RequestInterface; /** - * Generate a cache key by specify what headers you want to vary on. + * Generate a cache key by using HTTP headers. * * @author Tobias Nyholm */ From 04935d93a34123fb44a2aee50c6f736b75b6ad3c Mon Sep 17 00:00:00 2001 From: Tobias Nyholm Date: Wed, 5 Apr 2017 12:24:38 +0200 Subject: [PATCH 8/9] Added body --- src/Cache/Generator/HeaderCacheKeyGenerator.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Cache/Generator/HeaderCacheKeyGenerator.php b/src/Cache/Generator/HeaderCacheKeyGenerator.php index 70b5506..562ed48 100644 --- a/src/Cache/Generator/HeaderCacheKeyGenerator.php +++ b/src/Cache/Generator/HeaderCacheKeyGenerator.php @@ -33,6 +33,6 @@ public function generate(RequestInterface $request) $concatenatedHeaders[] = sprintf(' %s:"%s"', $headerName, $request->getHeaderLine($headerName)); } - return $request->getMethod().' '.$request->getUri().implode('', $concatenatedHeaders); + return $request->getMethod().' '.$request->getUri().implode('', $concatenatedHeaders).' '.$request->getBody(); } } From 9cdf59bfdff29e68ee91a5994d37a1b1cf3e31c2 Mon Sep 17 00:00:00 2001 From: Tobias Nyholm Date: Wed, 5 Apr 2017 13:11:57 +0200 Subject: [PATCH 9/9] Fixed broken tests --- spec/Cache/Generator/HeaderCacheKeyGeneratorSpec.php | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/spec/Cache/Generator/HeaderCacheKeyGeneratorSpec.php b/spec/Cache/Generator/HeaderCacheKeyGeneratorSpec.php index 37b498a..de20cad 100644 --- a/spec/Cache/Generator/HeaderCacheKeyGeneratorSpec.php +++ b/spec/Cache/Generator/HeaderCacheKeyGeneratorSpec.php @@ -4,6 +4,7 @@ use PhpSpec\ObjectBehavior; use Psr\Http\Message\RequestInterface; +use Psr\Http\Message\StreamInterface; class HeaderCacheKeyGeneratorSpec extends ObjectBehavior { @@ -22,13 +23,15 @@ public function it_is_a_key_generator() $this->shouldImplement('Http\Client\Common\Plugin\Cache\Generator\CacheKeyGenerator'); } - public function it_generates_cache_from_request(RequestInterface $request) + public function it_generates_cache_from_request(RequestInterface $request, StreamInterface $body) { $request->getMethod()->shouldBeCalled()->willReturn('GET'); $request->getUri()->shouldBeCalled()->willReturn('http://example.com/foo'); $request->getHeaderLine('Authorization')->shouldBeCalled()->willReturn('bar'); $request->getHeaderLine('Content-Type')->shouldBeCalled()->willReturn('application/baz'); + $request->getBody()->shouldBeCalled()->willReturn($body); + $body->__toString()->shouldBeCalled()->willReturn(''); - $this->generate($request)->shouldReturn('GET http://example.com/foo Authorization:"bar" Content-Type:"application/baz"'); + $this->generate($request)->shouldReturn('GET http://example.com/foo Authorization:"bar" Content-Type:"application/baz" '); } }