From f2065f1afdad031f42039568a15ba8da80517c2a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Milan=20P=C3=A1la?= Date: Thu, 16 Jun 2016 15:55:53 +0200 Subject: [PATCH 01/37] =?UTF-8?q?Sn=C3=AD=C5=BEena=20podpora=20PHP=20na=20?= =?UTF-8?q?5.5+=20+=20.gitignore?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 2 ++ composer.json | 2 +- src/Version/Extension.php | 1 + src/Version/Filter.php | 48 +++++++++++++++++++++------------------ 4 files changed, 30 insertions(+), 23 deletions(-) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ff72e2d --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +/composer.lock +/vendor diff --git a/composer.json b/composer.json index f4153f1..8d96b23 100644 --- a/composer.json +++ b/composer.json @@ -6,7 +6,7 @@ } }, "require": { - "php": "~7.0", + "php": ">5.5", "nette/http": "~2.0" }, "suggest": { diff --git a/src/Version/Extension.php b/src/Version/Extension.php index df00747..7ab1465 100644 --- a/src/Version/Extension.php +++ b/src/Version/Extension.php @@ -1,4 +1,5 @@ directory = $directory; $this->parameter = $parameter; } + public function setRequest(Nette\Http\IRequest $request) { $this->request = $request; } + public function setStorage( Nette\Caching\IStorage $storage, $expire @@ -58,36 +62,35 @@ public function setStorage( $this->expire = $expire instanceof DateTime ? $expire : new DateTime($expire); } + public function __invoke( $url, - string $directory = NULL, - string $parameter = NULL - ) : string - { - $arguments = [ - $url, - $directory ? : $this->directory, - $parameter ? : $this->parameter, - ]; + $directory = NULL, + $parameter = NULL + ) { + $directory = $directory ?: $this->directory; + $parameter = $parameter ?: $this->parameter; - return $this->cache ? $this->cache->load($arguments, function (& $dependencies) use - ( - $arguments + $cacheCallback = function (& $dependencies) use ( + $url, + $directory, + $parameter ) { $dependencies[Nette\Caching\Cache::EXPIRE] = $this->expire; - $arguments[] = &$dependencies; - return $this->process(...$arguments); - }) : $this->process(...$arguments); + return $this->process($url, $directory, $parameter, $dependencies); + }; + + return $this->cache ? $this->cache->load([$url, $directory, $parameter], $cacheCallback) : $this->process($url, $directory, $parameter); } + private function process( $url, - string $directory, - string $parameter, + $directory, + $parameter, array & $dependencies = [] - ) : string - { + ) { $url = new Nette\Http\Url($url); $time = NULL; if ($url->getHost() && ( ! $this->request || $url->getHost() !== $this->request->getUrl()->getHost())) { @@ -102,8 +105,9 @@ private function process( $time = filemtime($filename); unset($dependencies[Nette\Caching\Cache::EXPIRE]); $dependencies[Nette\Caching\Cache::FILES] = $filename; + $dependencies[Nette\Caching\Cache::SLIDING] = TRUE; } - $url->setQueryParameter($parameter, $time ? : ($this->time ? : $this->time = time())); + $url->setQueryParameter($parameter, $time ?: ($this->time ?: $this->time = time())); return preg_replace($pattern = '#^(\\+|/+)#', preg_match($pattern, $url->getPath()) ? DIRECTORY_SEPARATOR : NULL, $url); } From ef70c76fc2beea82634fa0a9d42bc7f04f8a8f2c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Milan=20P=C3=A1la?= Date: Fri, 17 Jun 2016 08:22:20 +0200 Subject: [PATCH 02/37] =?UTF-8?q?Cachuj=C3=AD=20se=20i=20z=C3=A1vislosti?= =?UTF-8?q?=20p=C5=99es=20HTTP=20a=20je=20mo=C5=BEn=C3=A9=20cache=20smazat?= =?UTF-8?q?=20Commandem?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- composer.json | 3 ++- src/Version/CleanCacheCommand.php | 41 +++++++++++++++++++++++++++++++ src/Version/Extension.php | 24 +++++++++++++++--- src/Version/Filter.php | 22 +++++++++++++---- 4 files changed, 81 insertions(+), 9 deletions(-) create mode 100644 src/Version/CleanCacheCommand.php diff --git a/composer.json b/composer.json index 8d96b23..5b3e182 100644 --- a/composer.json +++ b/composer.json @@ -7,7 +7,8 @@ }, "require": { "php": ">5.5", - "nette/http": "~2.0" + "nette/http": "~2.0", + "symfony/console": "~2.3" }, "suggest": { "nette/caching": "Caching support", diff --git a/src/Version/CleanCacheCommand.php b/src/Version/CleanCacheCommand.php new file mode 100644 index 0000000..e7e3294 --- /dev/null +++ b/src/Version/CleanCacheCommand.php @@ -0,0 +1,41 @@ +setName('vitkutny:version:clean-cache'); + $this->setDescription('Smaže cache verzí'); + } + + + protected function execute( + Symfony\Component\Console\Input\InputInterface $input, + Symfony\Component\Console\Output\OutputInterface $output + ) { + /** @var \Nette\Caching\IStorage $storage */ + $storage = $this->getHelper('container')->getByType(\Nette\Caching\IStorage::class); + $conditions = [ + 'tags' => [ + Filter::CACHE_TAG, + ], + ]; + + if ($output->getVerbosity() > Symfony\Component\Console\Output\Output::VERBOSITY_QUIET) { + $output->write('Smaže se cache verzí: '); + } + + $storage->clean($conditions); + + if ($output->getVerbosity() > Symfony\Component\Console\Output\Output::VERBOSITY_QUIET) { + $output->writeln('Smazáno'); + } + } + +} diff --git a/src/Version/Extension.php b/src/Version/Extension.php index 7ab1465..7ad66ba 100644 --- a/src/Version/Extension.php +++ b/src/Version/Extension.php @@ -2,8 +2,10 @@ namespace VitKutny\Version; +use Kdyby; use Nette; + final class Extension extends Nette\DI\CompilerExtension { @@ -17,6 +19,7 @@ final class Extension 'expire' => '+1 hour', ]; + public function beforeCompile() { parent::beforeCompile(); @@ -35,18 +38,33 @@ public function beforeCompile() $builder->getDefinition($engine)->addSetup('addFilter', [ 'version', $filter, - ]); + ]) + ; } } + public function loadConfiguration() { parent::loadConfiguration(); $this->config = $this->getConfig($this->defaults); $builder = $this->getContainerBuilder(); - $builder->addDefinition($this->prefix('filter'))->setClass(Filter::class)->setArguments([ + + $arguments = [ $this->config['directory'], $this->config['parameter'], - ]); + $builder->parameters['debugMode'], + ]; + $builder->addDefinition($this->prefix('filter'))->setClass(Filter::class)->setArguments($arguments); + + if ( ! class_exists(Kdyby\Console\DI\ConsoleExtension::class) || PHP_SAPI !== 'cli') { + return; + } + $builder = $this->getContainerBuilder(); + $builder + ->addDefinition($this->prefix('console.cleanCache')) + ->setClass(CleanCacheCommand::class) + ->addTag(Kdyby\Console\DI\ConsoleExtension::COMMAND_TAG) + ; } } diff --git a/src/Version/Filter.php b/src/Version/Filter.php index 3ab36cc..fa209bf 100644 --- a/src/Version/Filter.php +++ b/src/Version/Filter.php @@ -5,9 +5,12 @@ use DateTime; use Nette; + final class Filter { + const CACHE_TAG = 'vitkutny-version'; + /** * @var string */ @@ -38,13 +41,20 @@ final class Filter */ private $time; + /** + * @var bool + */ + private $debugMode; + public function __construct( $directory, - $parameter + $parameter, + $debugMode ) { $this->directory = $directory; $this->parameter = $parameter; + $this->debugMode = $debugMode; } @@ -81,7 +91,7 @@ public function __invoke( return $this->process($url, $directory, $parameter, $dependencies); }; - return $this->cache ? $this->cache->load([$url, $directory, $parameter], $cacheCallback) : $this->process($url, $directory, $parameter); + return $this->cache ? $this->cache->load([$url, $directory, $parameter, $this->debugMode], $cacheCallback) : $this->process($url, $directory, $parameter); } @@ -103,10 +113,12 @@ private function process( ltrim($url->getPath(), '\\/'), ]))) { $time = filemtime($filename); - unset($dependencies[Nette\Caching\Cache::EXPIRE]); - $dependencies[Nette\Caching\Cache::FILES] = $filename; - $dependencies[Nette\Caching\Cache::SLIDING] = TRUE; + if ($this->debugMode) { + $dependencies[Nette\Caching\Cache::FILES] = $filename; + } } + $dependencies[Nette\Caching\Cache::SLIDING] = TRUE; + $dependencies[Nette\Caching\Cache::TAGS] = [self::CACHE_TAG]; $url->setQueryParameter($parameter, $time ?: ($this->time ?: $this->time = time())); return preg_replace($pattern = '#^(\\+|/+)#', preg_match($pattern, $url->getPath()) ? DIRECTORY_SEPARATOR : NULL, $url); From 6562c8c59a00078607ddd5a2a28dbb1e1f100eef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Milan=20P=C3=A1la?= Date: Fri, 29 Jul 2016 11:29:03 +0200 Subject: [PATCH 03/37] =?UTF-8?q?=C4=8Casov=C3=A1=20verze=20zm=C4=9Bn?= =?UTF-8?q?=C4=9Bna=20na=20obsahovou=20verzi?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Aby se opravdu načítala vždy jen změněná verze, je nutné verzovat obsahem souboru, protože soubory se mohou kompilací měnit --- src/Version/Filter.php | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/Version/Filter.php b/src/Version/Filter.php index fa209bf..ca17c1d 100644 --- a/src/Version/Filter.php +++ b/src/Version/Filter.php @@ -102,24 +102,26 @@ private function process( array & $dependencies = [] ) { $url = new Nette\Http\Url($url); - $time = NULL; + $version = NULL; if ($url->getHost() && ( ! $this->request || $url->getHost() !== $this->request->getUrl()->getHost())) { $headers = @get_headers($url, TRUE); - if (is_array($headers) && isset($headers['Last-Modified'])) { - $time = (new DateTime($headers['Last-Modified']))->getTimestamp(); + if (is_array($headers) && isset($headers['ETag'])) { + $version = preg_replace('~[^a-z0-9\-]~', '', $headers['ETag']); + } elseif (is_array($headers) && isset($headers['Last-Modified'])) { + $version = (new DateTime($headers['Last-Modified']))->getTimestamp(); } } elseif (is_file($filename = implode(DIRECTORY_SEPARATOR, [ rtrim($directory, '\\/'), ltrim($url->getPath(), '\\/'), ]))) { - $time = filemtime($filename); + $version = sha1_file($filename); if ($this->debugMode) { $dependencies[Nette\Caching\Cache::FILES] = $filename; } } $dependencies[Nette\Caching\Cache::SLIDING] = TRUE; $dependencies[Nette\Caching\Cache::TAGS] = [self::CACHE_TAG]; - $url->setQueryParameter($parameter, $time ?: ($this->time ?: $this->time = time())); + $url->setQueryParameter($parameter, $version ?: time()); return preg_replace($pattern = '#^(\\+|/+)#', preg_match($pattern, $url->getPath()) ? DIRECTORY_SEPARATOR : NULL, $url); } From e284f7e8ad09a0393e9b578fd789d451b7509aef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Milan=20P=C3=A1la?= Date: Sun, 12 Mar 2017 16:59:56 +0100 Subject: [PATCH 04/37] =?UTF-8?q?P=C5=99id=C3=A1na=20podpora=20nov=C3=BDch?= =?UTF-8?q?=20major=20verz=C3=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- composer.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/composer.json b/composer.json index 5b3e182..8d47260 100644 --- a/composer.json +++ b/composer.json @@ -7,8 +7,8 @@ }, "require": { "php": ">5.5", - "nette/http": "~2.0", - "symfony/console": "~2.3" + "nette/http": "~2.0|~3.0", + "symfony/console": "~2.3|~3.0" }, "suggest": { "nette/caching": "Caching support", From de50efb9640607cde24087bc668c0bf24a1f9d20 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Milan=20P=C3=A1la?= Date: Sun, 12 Mar 2017 17:09:59 +0100 Subject: [PATCH 05/37] =?UTF-8?q?P=C5=99id=C3=A1na=20podpora=20nov=C3=BDch?= =?UTF-8?q?=20major=20verz=C3=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- composer.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/composer.json b/composer.json index 8d47260..99da8dd 100644 --- a/composer.json +++ b/composer.json @@ -7,8 +7,8 @@ }, "require": { "php": ">5.5", - "nette/http": "~2.0|~3.0", - "symfony/console": "~2.3|~3.0" + "nette/http": "~2.0 || ~3.0", + "symfony/console": "~2.3 || ~3.0" }, "suggest": { "nette/caching": "Caching support", From 01823e94e890becd7c36a077b58dd45143060b75 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Milan=20P=C3=A1la?= Date: Fri, 30 Nov 2018 14:21:14 +0100 Subject: [PATCH 06/37] =?UTF-8?q?Refaktoring,=20nov=C3=BD=20namespace,=20C?= =?UTF-8?q?S=20a=20PHPStan?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .travis.yml | 18 +++++ composer.json | 16 +++- src/CleanCacheCommand.php | 38 +++++++++ src/{Version => }/Extension.php | 32 ++++---- src/Filter.php | 119 +++++++++++++++++++++++++++ src/Version/CleanCacheCommand.php | 41 ---------- src/Version/Filter.php | 128 ------------------------------ 7 files changed, 203 insertions(+), 189 deletions(-) create mode 100644 .travis.yml create mode 100644 src/CleanCacheCommand.php rename src/{Version => }/Extension.php (63%) create mode 100644 src/Filter.php delete mode 100644 src/Version/CleanCacheCommand.php delete mode 100644 src/Version/Filter.php diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..73fafca --- /dev/null +++ b/.travis.yml @@ -0,0 +1,18 @@ +language: php +php: + - 7.1 + +script: + - composer validate + - vendor/bin/phpcs src/ --standard=vendor/pd/coding-standard/src/PeckaCodingStandard/ruleset.xml + - vendor/bin/phpcs src/ --standard=vendor/pd/coding-standard/src/PeckaCodingStandardStrict/ruleset.xml + - vendor/bin/phpstan analyse src/ --level 2 --no-progress + +before_script: + - composer install --no-interaction --prefer-dist + +sudo: false + +cache: + directories: + - $HOME/.composer/cache diff --git a/composer.json b/composer.json index 99da8dd..d0e7c1f 100644 --- a/composer.json +++ b/composer.json @@ -1,22 +1,30 @@ { - "name": "vitkutny/version", + "name": "pd/version", + "description": "Filtr pro zjisštění verze obsahu URL", "extra": { "extensions": { - "vitkutny.version": "VitKutny\\Version\\Extension" + "pd.version": "Pd\\Version\\Extension" } }, "require": { - "php": ">5.5", + "php": "7.1.*", "nette/http": "~2.0 || ~3.0", + "nette/caching": "2.4.* || 2.5.*", + "nette/application": "2.3.* || 2.4.*", + "kdyby/console": "2.6.* || 2.7.*", "symfony/console": "~2.3 || ~3.0" }, + "require-dev": { + "pd/coding-standard": "1.16.*", + "phpstan/phpstan-strict-rules": "0.10.*" + }, "suggest": { "nette/caching": "Caching support", "nette/di": "Register filter using extension" }, "autoload": { "psr-4": { - "VitKutny\\": "src/" + "Pd\\Version\\": "src/" } } } diff --git a/src/CleanCacheCommand.php b/src/CleanCacheCommand.php new file mode 100644 index 0000000..285af77 --- /dev/null +++ b/src/CleanCacheCommand.php @@ -0,0 +1,38 @@ +setName('pd:version:clean-cache'); + $this->setDescription('Smaže cache verzí'); + } + + + protected function execute( + \Symfony\Component\Console\Input\InputInterface $input, + \Symfony\Component\Console\Output\OutputInterface $output + ) { + /** @var \Nette\Caching\IStorage $storage */ + $storage = $this->getHelper('container')->getByType(\Nette\Caching\IStorage::class); + $conditions = [ + 'tags' => [ + Filter::CACHE_TAG, + ], + ]; + + if ($output->getVerbosity() > \Symfony\Component\Console\Output\Output::VERBOSITY_QUIET) { + $output->write('Smaže se cache verzí: '); + } + + $storage->clean($conditions); + + if ($output->getVerbosity() > \Symfony\Component\Console\Output\Output::VERBOSITY_QUIET) { + $output->writeln('Smazáno'); + } + } + +} diff --git a/src/Version/Extension.php b/src/Extension.php similarity index 63% rename from src/Version/Extension.php rename to src/Extension.php index 7ad66ba..c68bcf4 100644 --- a/src/Version/Extension.php +++ b/src/Extension.php @@ -1,13 +1,8 @@ - '%wwwDir%', 'parameter' => 'version', - 'expire' => '+1 hour', ]; - public function beforeCompile() + public function beforeCompile(): void { parent::beforeCompile(); $builder = $this->getContainerBuilder(); $filter = $builder->getDefinition($this->prefix('filter')); - if ($request = $builder->getByType(Nette\Http\IRequest::class)) { + + $request = $builder->getByType(\Nette\Http\IRequest::class); + if ($request) { $filter->addSetup('setRequest', [$builder->getDefinition($request)]); } - if ($storage = $builder->getByType(Nette\Caching\IStorage::class)) { + + $storage = $builder->getByType(\Nette\Caching\IStorage::class); + if ($storage) { $filter->addSetup('setStorage', [ $builder->getDefinition($storage), $this->config['expire'], ]); } - if ($engine = $builder->getByType(Nette\Bridges\ApplicationLatte\ILatteFactory::class)) { + + $engine = $builder->getByType(\Nette\Bridges\ApplicationLatte\ILatteFactory::class); + if ($engine) { $builder->getDefinition($engine)->addSetup('addFilter', [ 'version', $filter, @@ -44,7 +44,7 @@ public function beforeCompile() } - public function loadConfiguration() + public function loadConfiguration(): void { parent::loadConfiguration(); $this->config = $this->getConfig($this->defaults); @@ -57,14 +57,14 @@ public function loadConfiguration() ]; $builder->addDefinition($this->prefix('filter'))->setClass(Filter::class)->setArguments($arguments); - if ( ! class_exists(Kdyby\Console\DI\ConsoleExtension::class) || PHP_SAPI !== 'cli') { + if ( ! \class_exists(\Kdyby\Console\DI\ConsoleExtension::class) || \PHP_SAPI !== 'cli') { return; } $builder = $this->getContainerBuilder(); $builder ->addDefinition($this->prefix('console.cleanCache')) ->setClass(CleanCacheCommand::class) - ->addTag(Kdyby\Console\DI\ConsoleExtension::COMMAND_TAG) + ->addTag(\Kdyby\Console\DI\ConsoleExtension::COMMAND_TAG) ; } } diff --git a/src/Filter.php b/src/Filter.php new file mode 100644 index 0000000..421e0ec --- /dev/null +++ b/src/Filter.php @@ -0,0 +1,119 @@ +directory = $directory; + $this->parameter = $parameter; + $this->debugMode = $debugMode; + } + + + public function setRequest(\Nette\Http\IRequest $request) + { + $this->request = $request; + } + + + public function setStorage( + \Nette\Caching\IStorage $storage + ) { + $this->cache = new \Nette\Caching\Cache($storage, \strtr(self::class, '\\', \Nette\Caching\Cache::NAMESPACE_SEPARATOR)); + } + + + public function __invoke( + $url, + $directory = NULL, + $parameter = NULL + ) { + $directory = $directory ?: $this->directory; + $parameter = $parameter ?: $this->parameter; + + $cacheCallback = function (& $dependencies) use ( + $url, + $directory, + $parameter + ) { + $dependencies[\Nette\Caching\Cache::EXPIRE] = $this->expire; + + return $this->process($url, $directory, $parameter, $dependencies); + }; + + return $this->cache ? $this->cache->load([$url, $directory, $parameter, $this->debugMode], $cacheCallback) : $this->process($url, $directory, $parameter); + } + + + private function process( + $url, + $directory, + $parameter, + array & $dependencies = [] + ) { + $url = new \Nette\Http\Url($url); + $version = NULL; + if ($url->getHost() && ( ! $this->request || $url->getHost() !== $this->request->getUrl()->getHost())) { + $headers = @\get_headers($url, TRUE); + if (\is_array($headers) && isset($headers['ETag'])) { + $version = \preg_replace('~[^a-z0-9\-]~', '', $headers['ETag']); + } elseif (\is_array($headers) && isset($headers['Last-Modified'])) { + $version = (new \DateTime($headers['Last-Modified']))->getTimestamp(); + } + } else { + $filename = \implode(\DIRECTORY_SEPARATOR, [ + \rtrim($directory, '\\/'), + \ltrim($url->getPath(), '\\/'), + ]); + if (\is_file($filename)) { + $version = \sha1_file($filename); + if ($this->debugMode) { + $dependencies[\Nette\Caching\Cache::FILES] = $filename; + } + } + } + $dependencies[\Nette\Caching\Cache::TAGS] = [self::CACHE_TAG]; + $url->setQueryParameter($parameter, $version ?: \time()); + + return \preg_replace($pattern = '#^(\\+|/+)#', \preg_match($pattern, $url->getPath()) ? \DIRECTORY_SEPARATOR : NULL, $url); + } +} diff --git a/src/Version/CleanCacheCommand.php b/src/Version/CleanCacheCommand.php deleted file mode 100644 index e7e3294..0000000 --- a/src/Version/CleanCacheCommand.php +++ /dev/null @@ -1,41 +0,0 @@ -setName('vitkutny:version:clean-cache'); - $this->setDescription('Smaže cache verzí'); - } - - - protected function execute( - Symfony\Component\Console\Input\InputInterface $input, - Symfony\Component\Console\Output\OutputInterface $output - ) { - /** @var \Nette\Caching\IStorage $storage */ - $storage = $this->getHelper('container')->getByType(\Nette\Caching\IStorage::class); - $conditions = [ - 'tags' => [ - Filter::CACHE_TAG, - ], - ]; - - if ($output->getVerbosity() > Symfony\Component\Console\Output\Output::VERBOSITY_QUIET) { - $output->write('Smaže se cache verzí: '); - } - - $storage->clean($conditions); - - if ($output->getVerbosity() > Symfony\Component\Console\Output\Output::VERBOSITY_QUIET) { - $output->writeln('Smazáno'); - } - } - -} diff --git a/src/Version/Filter.php b/src/Version/Filter.php deleted file mode 100644 index ca17c1d..0000000 --- a/src/Version/Filter.php +++ /dev/null @@ -1,128 +0,0 @@ -directory = $directory; - $this->parameter = $parameter; - $this->debugMode = $debugMode; - } - - - public function setRequest(Nette\Http\IRequest $request) - { - $this->request = $request; - } - - - public function setStorage( - Nette\Caching\IStorage $storage, - $expire - ) { - $this->cache = new Nette\Caching\Cache($storage, strtr(self::class, '\\', Nette\Caching\Cache::NAMESPACE_SEPARATOR)); - $this->expire = $expire instanceof DateTime ? $expire : new DateTime($expire); - } - - - public function __invoke( - $url, - $directory = NULL, - $parameter = NULL - ) { - $directory = $directory ?: $this->directory; - $parameter = $parameter ?: $this->parameter; - - $cacheCallback = function (& $dependencies) use ( - $url, - $directory, - $parameter - ) { - $dependencies[Nette\Caching\Cache::EXPIRE] = $this->expire; - - return $this->process($url, $directory, $parameter, $dependencies); - }; - - return $this->cache ? $this->cache->load([$url, $directory, $parameter, $this->debugMode], $cacheCallback) : $this->process($url, $directory, $parameter); - } - - - private function process( - $url, - $directory, - $parameter, - array & $dependencies = [] - ) { - $url = new Nette\Http\Url($url); - $version = NULL; - if ($url->getHost() && ( ! $this->request || $url->getHost() !== $this->request->getUrl()->getHost())) { - $headers = @get_headers($url, TRUE); - if (is_array($headers) && isset($headers['ETag'])) { - $version = preg_replace('~[^a-z0-9\-]~', '', $headers['ETag']); - } elseif (is_array($headers) && isset($headers['Last-Modified'])) { - $version = (new DateTime($headers['Last-Modified']))->getTimestamp(); - } - } elseif (is_file($filename = implode(DIRECTORY_SEPARATOR, [ - rtrim($directory, '\\/'), - ltrim($url->getPath(), '\\/'), - ]))) { - $version = sha1_file($filename); - if ($this->debugMode) { - $dependencies[Nette\Caching\Cache::FILES] = $filename; - } - } - $dependencies[Nette\Caching\Cache::SLIDING] = TRUE; - $dependencies[Nette\Caching\Cache::TAGS] = [self::CACHE_TAG]; - $url->setQueryParameter($parameter, $version ?: time()); - - return preg_replace($pattern = '#^(\\+|/+)#', preg_match($pattern, $url->getPath()) ? DIRECTORY_SEPARATOR : NULL, $url); - } -} From f01b13dfc91b912bfd2d6d67335dd2b01dd47c8f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Milan=20P=C3=A1la?= Date: Fri, 30 Nov 2018 15:22:25 +0100 Subject: [PATCH 07/37] =?UTF-8?q?Expirace=20se=20u=C5=BE=20nepou=C5=BE?= =?UTF-8?q?=C3=ADv=C3=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Extension.php | 1 - src/Filter.php | 7 ------- 2 files changed, 8 deletions(-) diff --git a/src/Extension.php b/src/Extension.php index c68bcf4..5458057 100644 --- a/src/Extension.php +++ b/src/Extension.php @@ -29,7 +29,6 @@ public function beforeCompile(): void if ($storage) { $filter->addSetup('setStorage', [ $builder->getDefinition($storage), - $this->config['expire'], ]); } diff --git a/src/Filter.php b/src/Filter.php index 421e0ec..12f423a 100644 --- a/src/Filter.php +++ b/src/Filter.php @@ -22,11 +22,6 @@ final class Filter */ private $cache; - /** - * @var \DateTime - */ - private $expire; - /** * @var string */ @@ -75,8 +70,6 @@ public function __invoke( $directory, $parameter ) { - $dependencies[\Nette\Caching\Cache::EXPIRE] = $this->expire; - return $this->process($url, $directory, $parameter, $dependencies); }; From b8647b43a8b2ec571f9d3c7a1ea0d9722ee3efaa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Milan=20P=C3=A1la?= Date: Fri, 30 Nov 2018 16:16:22 +0100 Subject: [PATCH 08/37] =?UTF-8?q?Prom=C4=9Bnn=C3=A1=20=20mus=C3=AD=20b?= =?UTF-8?q?=C3=BDt=20inicializovan=C3=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Filter.php | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/Filter.php b/src/Filter.php index 12f423a..2e8784e 100644 --- a/src/Filter.php +++ b/src/Filter.php @@ -65,11 +65,15 @@ public function __invoke( $directory = $directory ?: $this->directory; $parameter = $parameter ?: $this->parameter; - $cacheCallback = function (& $dependencies) use ( + $cacheCallback = function (?array &$dependencies) use ( $url, $directory, $parameter ) { + if ( ! $dependencies) { + $dependencies = []; + } + return $this->process($url, $directory, $parameter, $dependencies); }; From 9edad66aa861b5e533f0c07d1caccddb44cf1f8d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Milan=20P=C3=A1la?= Date: Fri, 30 Nov 2018 16:38:02 +0100 Subject: [PATCH 09/37] =?UTF-8?q?Funkce=20o=C4=8Dek=C3=A1vaj=C3=AD=20strin?= =?UTF-8?q?g?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Filter.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Filter.php b/src/Filter.php index 2e8784e..1a1f4e9 100644 --- a/src/Filter.php +++ b/src/Filter.php @@ -90,7 +90,7 @@ private function process( $url = new \Nette\Http\Url($url); $version = NULL; if ($url->getHost() && ( ! $this->request || $url->getHost() !== $this->request->getUrl()->getHost())) { - $headers = @\get_headers($url, TRUE); + $headers = @\get_headers($url->getAbsoluteUrl(), 1); if (\is_array($headers) && isset($headers['ETag'])) { $version = \preg_replace('~[^a-z0-9\-]~', '', $headers['ETag']); } elseif (\is_array($headers) && isset($headers['Last-Modified'])) { @@ -111,6 +111,6 @@ private function process( $dependencies[\Nette\Caching\Cache::TAGS] = [self::CACHE_TAG]; $url->setQueryParameter($parameter, $version ?: \time()); - return \preg_replace($pattern = '#^(\\+|/+)#', \preg_match($pattern, $url->getPath()) ? \DIRECTORY_SEPARATOR : NULL, $url); + return \preg_replace($pattern = '#^(\\+|/+)#', \preg_match($pattern, $url->getPath()) ? \DIRECTORY_SEPARATOR : NULL, $url->getAbsoluteUrl()); } } From 239a4c1a5cd1cc376cd7f775d20ecdc4e2d540b8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Milan=20P=C3=A1la?= Date: Fri, 7 Dec 2018 12:06:40 +0100 Subject: [PATCH 10/37] =?UTF-8?q?P=C5=99id=C3=A1na=20podpora=20pro=20PHP?= =?UTF-8?q?=207.2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .travis.yml | 1 + composer.json | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 73fafca..289c64b 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,6 +1,7 @@ language: php php: - 7.1 + - 7.2 script: - composer validate diff --git a/composer.json b/composer.json index d0e7c1f..9b22e75 100644 --- a/composer.json +++ b/composer.json @@ -7,7 +7,7 @@ } }, "require": { - "php": "7.1.*", + "php": "7.1.* || 7.2.*", "nette/http": "~2.0 || ~3.0", "nette/caching": "2.4.* || 2.5.*", "nette/application": "2.3.* || 2.4.*", From 9bb103b54f3d72694f3c0210ae78c3f3c554e378 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Milan=20P=C3=A1la?= Date: Fri, 1 Feb 2019 22:32:03 +0100 Subject: [PATCH 11/37] =?UTF-8?q?P=C5=99id=C3=A1na=20podpora=20pro=20PHP?= =?UTF-8?q?=207.3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .travis.yml | 1 + composer.json | 6 +++--- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/.travis.yml b/.travis.yml index 289c64b..ad659c8 100644 --- a/.travis.yml +++ b/.travis.yml @@ -2,6 +2,7 @@ language: php php: - 7.1 - 7.2 + - 7.3 script: - composer validate diff --git a/composer.json b/composer.json index 9b22e75..9626850 100644 --- a/composer.json +++ b/composer.json @@ -7,15 +7,15 @@ } }, "require": { - "php": "7.1.* || 7.2.*", + "php": "7.1.* || 7.2.* || 7.3.*", "nette/http": "~2.0 || ~3.0", "nette/caching": "2.4.* || 2.5.*", "nette/application": "2.3.* || 2.4.*", "kdyby/console": "2.6.* || 2.7.*", - "symfony/console": "~2.3 || ~3.0" + "symfony/console": "~2.3 || ~3.0 || ~4.0" }, "require-dev": { - "pd/coding-standard": "1.16.*", + "pd/coding-standard": "1.17.*", "phpstan/phpstan-strict-rules": "0.10.*" }, "suggest": { From d0bd5d5613f93bd1266fd11c5c210a2f8e463861 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Milan=20P=C3=A1la?= Date: Fri, 31 May 2019 15:05:32 +0200 Subject: [PATCH 12/37] Nette 3 --- .gitignore | 3 +++ .travis.yml | 3 ++- composer.json | 9 +++++---- src/Extension.php | 38 +++++++++++++++++++++++++++---------- tests/DI/ExtensionTest.phpt | 27 ++++++++++++++++++++++++++ tests/DI/cache/.gitignore | 3 +++ tests/DI/extension.neon | 3 +++ tests/bootstrap.php | 5 +++++ 8 files changed, 76 insertions(+), 15 deletions(-) create mode 100644 tests/DI/ExtensionTest.phpt create mode 100644 tests/DI/cache/.gitignore create mode 100644 tests/DI/extension.neon create mode 100644 tests/bootstrap.php diff --git a/.gitignore b/.gitignore index ff72e2d..025eb3d 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,5 @@ /composer.lock /vendor +/tests/**/*.actual +/tests/**/*.expected + diff --git a/.travis.yml b/.travis.yml index ad659c8..32aaa95 100644 --- a/.travis.yml +++ b/.travis.yml @@ -5,12 +5,13 @@ php: - 7.3 script: - - composer validate - vendor/bin/phpcs src/ --standard=vendor/pd/coding-standard/src/PeckaCodingStandard/ruleset.xml - vendor/bin/phpcs src/ --standard=vendor/pd/coding-standard/src/PeckaCodingStandardStrict/ruleset.xml - vendor/bin/phpstan analyse src/ --level 2 --no-progress + - vendor/bin/tester tests/ before_script: + - composer validate - composer install --no-interaction --prefer-dist sudo: false diff --git a/composer.json b/composer.json index 9626850..792698e 100644 --- a/composer.json +++ b/composer.json @@ -8,14 +8,15 @@ }, "require": { "php": "7.1.* || 7.2.* || 7.3.*", - "nette/http": "~2.0 || ~3.0", - "nette/caching": "2.4.* || 2.5.*", - "nette/application": "2.3.* || 2.4.*", - "kdyby/console": "2.6.* || 2.7.*", + "nette/http": "3.0.*", + "nette/caching": "3.0.*", + "nette/application": "3.0.*", + "kdyby/console": "2.8.*@dev", "symfony/console": "~2.3 || ~3.0 || ~4.0" }, "require-dev": { "pd/coding-standard": "1.17.*", + "nette/tester": "2.1.*", "phpstan/phpstan-strict-rules": "0.10.*" }, "suggest": { diff --git a/src/Extension.php b/src/Extension.php index 5458057..a89c7c2 100644 --- a/src/Extension.php +++ b/src/Extension.php @@ -6,18 +6,34 @@ final class Extension extends \Nette\DI\CompilerExtension { /** - * @var array + * @var string */ - private $defaults = [ - 'directory' => '%wwwDir%', - 'parameter' => 'version', - ]; + private $directory; + + /** + * @var string + */ + private $parameter; + + /** + * @var bool + */ + private $debugMode; + + + public function __construct(string $directory = '%wwwDir%', string $parameter = 'version', bool $debugMode = FALSE) + { + $this->directory = $directory; + $this->parameter = $parameter; + $this->debugMode = $debugMode; + } public function beforeCompile(): void { parent::beforeCompile(); $builder = $this->getContainerBuilder(); + /** @var \Nette\DI\Definitions\ServiceDefinition $filter */ $filter = $builder->getDefinition($this->prefix('filter')); $request = $builder->getByType(\Nette\Http\IRequest::class); @@ -34,7 +50,9 @@ public function beforeCompile(): void $engine = $builder->getByType(\Nette\Bridges\ApplicationLatte\ILatteFactory::class); if ($engine) { - $builder->getDefinition($engine)->addSetup('addFilter', [ + /** @var \Nette\DI\ServiceDefinition $latteEngine */ + $latteEngine = $builder->getDefinition($engine); + $latteEngine->addSetup('addFilter', [ 'version', $filter, ]) @@ -46,13 +64,13 @@ public function beforeCompile(): void public function loadConfiguration(): void { parent::loadConfiguration(); - $this->config = $this->getConfig($this->defaults); + $builder = $this->getContainerBuilder(); $arguments = [ - $this->config['directory'], - $this->config['parameter'], - $builder->parameters['debugMode'], + $this->directory, + $this->parameter, + $this->debugMode, ]; $builder->addDefinition($this->prefix('filter'))->setClass(Filter::class)->setArguments($arguments); diff --git a/tests/DI/ExtensionTest.phpt b/tests/DI/ExtensionTest.phpt new file mode 100644 index 0000000..8203c76 --- /dev/null +++ b/tests/DI/ExtensionTest.phpt @@ -0,0 +1,27 @@ +addConfig(__DIR__ . '/extension.neon'); + $configurator->setTempDirectory(__DIR__); + $container = $configurator->createContainer(); + + $service = $container->getByType(\Pd\Version\Filter::class); + \Tester\Assert::truthy($service); + + $service = $container->getByType(\Pd\Version\CleanCacheCommand::class); + \Tester\Assert::truthy($service); + } +} + + +(new ExtensionTest())->run(); diff --git a/tests/DI/cache/.gitignore b/tests/DI/cache/.gitignore new file mode 100644 index 0000000..cec9082 --- /dev/null +++ b/tests/DI/cache/.gitignore @@ -0,0 +1,3 @@ +* + +!.gitignore diff --git a/tests/DI/extension.neon b/tests/DI/extension.neon new file mode 100644 index 0000000..57326e6 --- /dev/null +++ b/tests/DI/extension.neon @@ -0,0 +1,3 @@ +extensions: + version: Pd\Version\Extension + console: Kdyby\Console\DI\ConsoleExtension diff --git a/tests/bootstrap.php b/tests/bootstrap.php new file mode 100644 index 0000000..1241910 --- /dev/null +++ b/tests/bootstrap.php @@ -0,0 +1,5 @@ + Date: Fri, 7 Jun 2019 08:57:29 +0200 Subject: [PATCH 13/37] =?UTF-8?q?Opraveno=20napojov=C3=A1n=C3=AD=20latte?= =?UTF-8?q?=20filtru?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- composer.json | 3 ++- src/Extension.php | 4 ++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/composer.json b/composer.json index 792698e..c8c96bd 100644 --- a/composer.json +++ b/composer.json @@ -17,7 +17,8 @@ "require-dev": { "pd/coding-standard": "1.17.*", "nette/tester": "2.1.*", - "phpstan/phpstan-strict-rules": "0.10.*" + "phpstan/phpstan-strict-rules": "0.10.*", + "latte/latte": "^2.5.1" }, "suggest": { "nette/caching": "Caching support", diff --git a/src/Extension.php b/src/Extension.php index a89c7c2..0b1a86f 100644 --- a/src/Extension.php +++ b/src/Extension.php @@ -50,9 +50,9 @@ public function beforeCompile(): void $engine = $builder->getByType(\Nette\Bridges\ApplicationLatte\ILatteFactory::class); if ($engine) { - /** @var \Nette\DI\ServiceDefinition $latteEngine */ + /** @var \Nette\DI\Definitions\FactoryDefinition $latteEngine */ $latteEngine = $builder->getDefinition($engine); - $latteEngine->addSetup('addFilter', [ + $latteEngine->getResultDefinition()->addSetup('addFilter', [ 'version', $filter, ]) From be5a54cb7c905c50f1c9a0a0c5a4a7482f821d17 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Milan=20P=C3=A1la?= Date: Tue, 3 Mar 2020 10:19:22 +0100 Subject: [PATCH 14/37] PHP 7.4 --- .travis.yml | 3 ++- composer.json | 7 ++++--- src/CleanCacheCommand.php | 2 ++ tests/DI/{ExtensionTest.phpt => ExtensionTest.php} | 0 4 files changed, 8 insertions(+), 4 deletions(-) rename tests/DI/{ExtensionTest.phpt => ExtensionTest.php} (100%) diff --git a/.travis.yml b/.travis.yml index 32aaa95..1dde76d 100644 --- a/.travis.yml +++ b/.travis.yml @@ -2,7 +2,8 @@ language: php php: - 7.1 - 7.2 - - 7.3 + - 7.3 + - 7.4 script: - vendor/bin/phpcs src/ --standard=vendor/pd/coding-standard/src/PeckaCodingStandard/ruleset.xml diff --git a/composer.json b/composer.json index c8c96bd..65774d2 100644 --- a/composer.json +++ b/composer.json @@ -7,7 +7,7 @@ } }, "require": { - "php": "7.1.* || 7.2.* || 7.3.*", + "php": "7.1.* || 7.2.* || 7.3.* || 7.4.*", "nette/http": "3.0.*", "nette/caching": "3.0.*", "nette/application": "3.0.*", @@ -16,8 +16,9 @@ }, "require-dev": { "pd/coding-standard": "1.17.*", - "nette/tester": "2.1.*", - "phpstan/phpstan-strict-rules": "0.10.*", + "nette/tester": "2.3.*", + "nette/bootstrap": "3.0.*", + "phpstan/phpstan-strict-rules": "0.12.*", "latte/latte": "^2.5.1" }, "suggest": { diff --git a/src/CleanCacheCommand.php b/src/CleanCacheCommand.php index 285af77..ff79aae 100644 --- a/src/CleanCacheCommand.php +++ b/src/CleanCacheCommand.php @@ -33,6 +33,8 @@ protected function execute( if ($output->getVerbosity() > \Symfony\Component\Console\Output\Output::VERBOSITY_QUIET) { $output->writeln('Smazáno'); } + + return 0; } } diff --git a/tests/DI/ExtensionTest.phpt b/tests/DI/ExtensionTest.php similarity index 100% rename from tests/DI/ExtensionTest.phpt rename to tests/DI/ExtensionTest.php From 66523ec58d0124a1226ebdb841887627188eb7bc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Milan=20P=C3=A1la?= Date: Mon, 23 Mar 2020 16:47:06 +0100 Subject: [PATCH 15/37] =?UTF-8?q?Dopln=C4=9Bn=20interface=20na=20filter?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Filter.php | 2 +- src/IFilter.php | 14 ++++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) create mode 100644 src/IFilter.php diff --git a/src/Filter.php b/src/Filter.php index 1a1f4e9..6dd9fa5 100644 --- a/src/Filter.php +++ b/src/Filter.php @@ -2,7 +2,7 @@ namespace Pd\Version; -final class Filter +final class Filter implements IFilter { public const CACHE_TAG = 'pd-version'; diff --git a/src/IFilter.php b/src/IFilter.php new file mode 100644 index 0000000..e4144f8 --- /dev/null +++ b/src/IFilter.php @@ -0,0 +1,14 @@ + Date: Wed, 3 Jun 2020 22:40:24 +0200 Subject: [PATCH 16/37] =?UTF-8?q?Povoleny=20nov=C4=9Bj=C5=A1=C3=AD=20verze?= =?UTF-8?q?=20Nette/Application?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- composer.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/composer.json b/composer.json index 65774d2..59589fc 100644 --- a/composer.json +++ b/composer.json @@ -10,7 +10,7 @@ "php": "7.1.* || 7.2.* || 7.3.* || 7.4.*", "nette/http": "3.0.*", "nette/caching": "3.0.*", - "nette/application": "3.0.*", + "nette/application": ">3.0.0", "kdyby/console": "2.8.*@dev", "symfony/console": "~2.3 || ~3.0 || ~4.0" }, From 5139c9623a05cd580095d041f4f7e53e9f3f5342 Mon Sep 17 00:00:00 2001 From: Petr Gala Date: Fri, 16 Oct 2020 11:13:57 +0200 Subject: [PATCH 17/37] pridani resloveru na relativni cesty --- src/Extension.php | 28 +++++- src/Filter.php | 86 ++++--------------- src/Resolvers/AbsoluteUrlResolver.php | 47 ++++++++++ src/Resolvers/AbstractPathResolver.php | 38 ++++++++ src/Resolvers/Getter/RelativePathGetter.php | 22 +++++ .../Getter/RelativePathGetterInterface.php | 10 +++ src/Resolvers/PathResolver.php | 57 ++++++++++++ src/Resolvers/PathResolverInterface.php | 12 +++ 8 files changed, 226 insertions(+), 74 deletions(-) create mode 100644 src/Resolvers/AbsoluteUrlResolver.php create mode 100644 src/Resolvers/AbstractPathResolver.php create mode 100644 src/Resolvers/Getter/RelativePathGetter.php create mode 100644 src/Resolvers/Getter/RelativePathGetterInterface.php create mode 100644 src/Resolvers/PathResolver.php create mode 100644 src/Resolvers/PathResolverInterface.php diff --git a/src/Extension.php b/src/Extension.php index 0b1a86f..087f7b5 100644 --- a/src/Extension.php +++ b/src/Extension.php @@ -35,15 +35,23 @@ public function beforeCompile(): void $builder = $this->getContainerBuilder(); /** @var \Nette\DI\Definitions\ServiceDefinition $filter */ $filter = $builder->getDefinition($this->prefix('filter')); + /** @var \Nette\DI\Definitions\ServiceDefinition $absoluteUrlResolver */ + $absoluteUrlResolver = $builder->getDefinition($this->prefix('absoluteUrlResolver')); + /** @var \Nette\DI\Definitions\ServiceDefinition $pathResolver */ + $pathResolver = $builder->getDefinition($this->prefix('pathResolver')); $request = $builder->getByType(\Nette\Http\IRequest::class); if ($request) { - $filter->addSetup('setRequest', [$builder->getDefinition($request)]); + $absoluteUrlResolver->addSetup('setRequest', [$builder->getDefinition($request)]); + $pathResolver->addSetup('setRequest', [$builder->getDefinition($request)]); } $storage = $builder->getByType(\Nette\Caching\IStorage::class); if ($storage) { - $filter->addSetup('setStorage', [ + $absoluteUrlResolver->addSetup('setStorage', [ + $builder->getDefinition($storage), + ]); + $pathResolver->addSetup('setStorage', [ $builder->getDefinition($storage), ]); } @@ -67,13 +75,27 @@ public function loadConfiguration(): void $builder = $this->getContainerBuilder(); + $absoluteUrlResolver = $builder->addDefinition($this->prefix('absoluteUrlResolver')) + ->setFactory(\Pd\Version\Resolvers\AbsoluteUrlResolver::class) + ; + + $pathResolver = $builder->addDefinition($this->prefix('pathResolver')) + ->setFactory(\Pd\Version\Resolvers\PathResolver::class) + ->setArguments([$this->debugMode]) + ; + $arguments = [ $this->directory, $this->parameter, - $this->debugMode, + $absoluteUrlResolver, + $pathResolver, ]; $builder->addDefinition($this->prefix('filter'))->setClass(Filter::class)->setArguments($arguments); + $builder->addDefinition($this->prefix('relativePathGetter')) + ->setFactory(\Pd\Version\Resolvers\Getter\RelativePathGetter::class) + ; + if ( ! \class_exists(\Kdyby\Console\DI\ConsoleExtension::class) || \PHP_SAPI !== 'cli') { return; } diff --git a/src/Filter.php b/src/Filter.php index 6dd9fa5..3db56d1 100644 --- a/src/Filter.php +++ b/src/Filter.php @@ -12,48 +12,28 @@ final class Filter implements IFilter */ private $directory; - /** - * @var \Nette\Http\IRequest - */ - private $request; - - /** - * @var \Nette\Caching\Cache|null - */ - private $cache; /** * @var string */ private $parameter; + /** - * @var bool + * @var \Pd\Version\Resolvers\PathResolverInterface[] */ - private $debugMode; + private $getters; public function __construct( $directory, $parameter, - $debugMode - ) { + \Pd\Version\Resolvers\PathResolverInterface ...$getters + ) + { $this->directory = $directory; $this->parameter = $parameter; - $this->debugMode = $debugMode; - } - - - public function setRequest(\Nette\Http\IRequest $request) - { - $this->request = $request; - } - - - public function setStorage( - \Nette\Caching\IStorage $storage - ) { - $this->cache = new \Nette\Caching\Cache($storage, \strtr(self::class, '\\', \Nette\Caching\Cache::NAMESPACE_SEPARATOR)); + $this->getters = $getters; } @@ -61,56 +41,20 @@ public function __invoke( $url, $directory = NULL, $parameter = NULL - ) { + ): ?string + { $directory = $directory ?: $this->directory; $parameter = $parameter ?: $this->parameter; - $cacheCallback = function (?array &$dependencies) use ( - $url, - $directory, - $parameter - ) { - if ( ! $dependencies) { - $dependencies = []; - } - - return $this->process($url, $directory, $parameter, $dependencies); - }; - - return $this->cache ? $this->cache->load([$url, $directory, $parameter, $this->debugMode], $cacheCallback) : $this->process($url, $directory, $parameter); - } - - - private function process( - $url, - $directory, - $parameter, - array & $dependencies = [] - ) { $url = new \Nette\Http\Url($url); - $version = NULL; - if ($url->getHost() && ( ! $this->request || $url->getHost() !== $this->request->getUrl()->getHost())) { - $headers = @\get_headers($url->getAbsoluteUrl(), 1); - if (\is_array($headers) && isset($headers['ETag'])) { - $version = \preg_replace('~[^a-z0-9\-]~', '', $headers['ETag']); - } elseif (\is_array($headers) && isset($headers['Last-Modified'])) { - $version = (new \DateTime($headers['Last-Modified']))->getTimestamp(); - } - } else { - $filename = \implode(\DIRECTORY_SEPARATOR, [ - \rtrim($directory, '\\/'), - \ltrim($url->getPath(), '\\/'), - ]); - if (\is_file($filename)) { - $version = \sha1_file($filename); - if ($this->debugMode) { - $dependencies[\Nette\Caching\Cache::FILES] = $filename; - } + foreach ($this->getters as $getter) { + $filePath = $getter->resolve($url, $directory, $parameter); + if ($filePath) { + return $filePath; } } - $dependencies[\Nette\Caching\Cache::TAGS] = [self::CACHE_TAG]; - $url->setQueryParameter($parameter, $version ?: \time()); - return \preg_replace($pattern = '#^(\\+|/+)#', \preg_match($pattern, $url->getPath()) ? \DIRECTORY_SEPARATOR : NULL, $url->getAbsoluteUrl()); + return NULL; } + } diff --git a/src/Resolvers/AbsoluteUrlResolver.php b/src/Resolvers/AbsoluteUrlResolver.php new file mode 100644 index 0000000..666f965 --- /dev/null +++ b/src/Resolvers/AbsoluteUrlResolver.php @@ -0,0 +1,47 @@ +isAbsoluteUrl($url)) { + return NULL; + } + + if ( ! $this->cache) { + return $this->process($url, $parameter); + } + + return $this->cache->load([$url->path, $directory, $parameter], function () use ($url, $parameter): ?string { + return $this->process($url, $parameter); + }); + } + + + private function process(\Nette\Http\Url $url, string $parameter): ?string + { + $version = NULL; + $headers = @\get_headers($url->getAbsoluteUrl(), 1); + if (\is_array($headers) && isset($headers['ETag'])) { + $version = \preg_replace('~[^a-z0-9\-]~', '', $headers['ETag']); + } elseif (\is_array($headers) && isset($headers['Last-Modified'])) { + $version = (new \DateTime($headers['Last-Modified']))->getTimestamp(); + } + + return $this->getPath($url, $version, $parameter); + } + + + private function isAbsoluteUrl(\Nette\Http\Url $url): bool + { + if ( ! \Nette\Utils\Strings::length($url->getHost())) { + return FALSE; + } + + return $this->request && $url->getHost() !== $this->request->getUrl()->getHost(); + } + +} diff --git a/src/Resolvers/AbstractPathResolver.php b/src/Resolvers/AbstractPathResolver.php new file mode 100644 index 0000000..05f1ce1 --- /dev/null +++ b/src/Resolvers/AbstractPathResolver.php @@ -0,0 +1,38 @@ +request = $request; + } + + + public function setStorage(\Nette\Caching\IStorage $storage): void + { + $this->cache = new \Nette\Caching\Cache($storage, \strtr(self::class, '\\', \Nette\Caching\Cache::NAMESPACE_SEPARATOR)); + } + + + protected function getPath(\Nette\Http\Url $url, string $version, string $parameter): string + { + $url->setQueryParameter($parameter, $version ?: \time()); + + return \preg_replace($pattern = '#^(\\+|/+)#', \preg_match($pattern, $url->getPath()) ? \DIRECTORY_SEPARATOR : NULL, $url->getAbsoluteUrl()); + } + +} diff --git a/src/Resolvers/Getter/RelativePathGetter.php b/src/Resolvers/Getter/RelativePathGetter.php new file mode 100644 index 0000000..e5d8b46 --- /dev/null +++ b/src/Resolvers/Getter/RelativePathGetter.php @@ -0,0 +1,22 @@ +debugMode = $debugMode; + $this->relativePathGetter = $relativePathGetter; + } + + + public function resolve(\Nette\Http\Url $url, string $directory, string $parameter): ?string + { + $realPath = $this->relativePathGetter->getFileName($directory, $url->getPath()); + + if ( ! $realPath) { + return NULL; + } + + if ( ! $this->cache) { + return $this->process($url, $realPath, $parameter); + } + + return $this->cache->load([$realPath, $directory, $parameter], function (?array $dependencies) use ($url, $realPath, $parameter): ?string { + return $this->process($url, $realPath, $parameter, $dependencies); + }); + } + + + private function process(\Nette\Http\Url $url, string $realPath, string $parameter, ?array $dependencies = NULL): ?string + { + $version = \sha1_file($realPath); + if ($this->debugMode && $dependencies) { + $dependencies[\Nette\Caching\Cache::FILES] = $realPath; + } + + return $this->getPath($url, $version, $parameter); + } + +} diff --git a/src/Resolvers/PathResolverInterface.php b/src/Resolvers/PathResolverInterface.php new file mode 100644 index 0000000..88a01dd --- /dev/null +++ b/src/Resolvers/PathResolverInterface.php @@ -0,0 +1,12 @@ + Date: Tue, 1 Dec 2020 13:43:16 +0100 Subject: [PATCH 18/37] =?UTF-8?q?#3493:=20p=C5=99id=C3=A1n=C3=AD=20cache?= =?UTF-8?q?=20tagu=20pro=20invalidaci?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Resolvers/PathResolver.php | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Resolvers/PathResolver.php b/src/Resolvers/PathResolver.php index 77d95df..27ffba8 100644 --- a/src/Resolvers/PathResolver.php +++ b/src/Resolvers/PathResolver.php @@ -50,6 +50,7 @@ private function process(\Nette\Http\Url $url, string $realPath, string $paramet if ($this->debugMode && $dependencies) { $dependencies[\Nette\Caching\Cache::FILES] = $realPath; } + $dependencies[\Nette\Caching\Cache::TAGS] = \Pd\Version\Filter::CACHE_TAG; return $this->getPath($url, $version, $parameter); } From c8407894041634923663a86fad3ccb728a6b9cab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pavel=20Jura=CC=81sek?= Date: Thu, 11 Feb 2021 17:06:10 +0100 Subject: [PATCH 19/37] Update PHPStan --- .travis.yml | 2 +- composer.json | 3 ++- src/CleanCacheCommand.php | 2 +- src/Filter.php | 11 +++++++---- src/IFilter.php | 9 ++++++--- src/Resolvers/AbsoluteUrlResolver.php | 8 ++++---- src/Resolvers/AbstractPathResolver.php | 2 +- src/Resolvers/PathResolver.php | 9 ++++++--- 8 files changed, 28 insertions(+), 18 deletions(-) diff --git a/.travis.yml b/.travis.yml index 1dde76d..026e89f 100644 --- a/.travis.yml +++ b/.travis.yml @@ -8,7 +8,7 @@ php: script: - vendor/bin/phpcs src/ --standard=vendor/pd/coding-standard/src/PeckaCodingStandard/ruleset.xml - vendor/bin/phpcs src/ --standard=vendor/pd/coding-standard/src/PeckaCodingStandardStrict/ruleset.xml - - vendor/bin/phpstan analyse src/ --level 2 --no-progress + - vendor/bin/phpstan analyse src/ --level 8 --no-progress - vendor/bin/tester tests/ before_script: diff --git a/composer.json b/composer.json index 59589fc..849306e 100644 --- a/composer.json +++ b/composer.json @@ -18,7 +18,8 @@ "pd/coding-standard": "1.17.*", "nette/tester": "2.3.*", "nette/bootstrap": "3.0.*", - "phpstan/phpstan-strict-rules": "0.12.*", + "phpstan/phpstan": "0.12.80", + "phpstan/phpstan-strict-rules": "0.12.9", "latte/latte": "^2.5.1" }, "suggest": { diff --git a/src/CleanCacheCommand.php b/src/CleanCacheCommand.php index ff79aae..abbd7e0 100644 --- a/src/CleanCacheCommand.php +++ b/src/CleanCacheCommand.php @@ -5,7 +5,7 @@ final class CleanCacheCommand extends \Symfony\Component\Console\Command\Command { - protected function configure() + protected function configure(): void { $this->setName('pd:version:clean-cache'); $this->setDescription('Smaže cache verzí'); diff --git a/src/Filter.php b/src/Filter.php index 3db56d1..ffc2ae9 100644 --- a/src/Filter.php +++ b/src/Filter.php @@ -26,8 +26,8 @@ final class Filter implements IFilter public function __construct( - $directory, - $parameter, + string $directory, + string $parameter, \Pd\Version\Resolvers\PathResolverInterface ...$getters ) { @@ -37,10 +37,13 @@ public function __construct( } + /** + * @param string|\Nette\Http\Url|\Nette\Http\UrlImmutable $url + */ public function __invoke( $url, - $directory = NULL, - $parameter = NULL + ?string $directory = NULL, + ?string $parameter = NULL ): ?string { $directory = $directory ?: $this->directory; diff --git a/src/IFilter.php b/src/IFilter.php index e4144f8..5a60d44 100644 --- a/src/IFilter.php +++ b/src/IFilter.php @@ -5,10 +5,13 @@ interface IFilter { + /** + * @param string|\Nette\Http\Url|\Nette\Http\UrlImmutable $url + */ public function __invoke( $url, - $directory = NULL, - $parameter = NULL - ); + ?string $directory = NULL, + ?string $parameter = NULL + ): ?string; } diff --git a/src/Resolvers/AbsoluteUrlResolver.php b/src/Resolvers/AbsoluteUrlResolver.php index 666f965..25136c9 100644 --- a/src/Resolvers/AbsoluteUrlResolver.php +++ b/src/Resolvers/AbsoluteUrlResolver.php @@ -15,20 +15,20 @@ public function resolve(\Nette\Http\Url $url, string $directory, string $paramet return $this->process($url, $parameter); } - return $this->cache->load([$url->path, $directory, $parameter], function () use ($url, $parameter): ?string { + return $this->cache->load([$url->path, $directory, $parameter], function () use ($url, $parameter): string { return $this->process($url, $parameter); }); } - private function process(\Nette\Http\Url $url, string $parameter): ?string + private function process(\Nette\Http\Url $url, string $parameter): string { - $version = NULL; + $version = ''; $headers = @\get_headers($url->getAbsoluteUrl(), 1); if (\is_array($headers) && isset($headers['ETag'])) { $version = \preg_replace('~[^a-z0-9\-]~', '', $headers['ETag']); } elseif (\is_array($headers) && isset($headers['Last-Modified'])) { - $version = (new \DateTime($headers['Last-Modified']))->getTimestamp(); + $version = (string) (new \DateTime($headers['Last-Modified']))->getTimestamp(); } return $this->getPath($url, $version, $parameter); diff --git a/src/Resolvers/AbstractPathResolver.php b/src/Resolvers/AbstractPathResolver.php index 05f1ce1..9086f9c 100644 --- a/src/Resolvers/AbstractPathResolver.php +++ b/src/Resolvers/AbstractPathResolver.php @@ -32,7 +32,7 @@ protected function getPath(\Nette\Http\Url $url, string $version, string $parame { $url->setQueryParameter($parameter, $version ?: \time()); - return \preg_replace($pattern = '#^(\\+|/+)#', \preg_match($pattern, $url->getPath()) ? \DIRECTORY_SEPARATOR : NULL, $url->getAbsoluteUrl()); + return (string) \preg_replace($pattern = '#^(\\+|/+)#', \preg_match($pattern, $url->getPath()) ? \DIRECTORY_SEPARATOR : '', $url->getAbsoluteUrl()); } } diff --git a/src/Resolvers/PathResolver.php b/src/Resolvers/PathResolver.php index 27ffba8..c5a9c23 100644 --- a/src/Resolvers/PathResolver.php +++ b/src/Resolvers/PathResolver.php @@ -38,15 +38,18 @@ public function resolve(\Nette\Http\Url $url, string $directory, string $paramet return $this->process($url, $realPath, $parameter); } - return $this->cache->load([$realPath, $directory, $parameter], function (?array $dependencies) use ($url, $realPath, $parameter): ?string { + return $this->cache->load([$realPath, $directory, $parameter], function (?array $dependencies) use ($url, $realPath, $parameter): string { return $this->process($url, $realPath, $parameter, $dependencies); }); } - private function process(\Nette\Http\Url $url, string $realPath, string $parameter, ?array $dependencies = NULL): ?string + /** + * @param array $dependencies + */ + private function process(\Nette\Http\Url $url, string $realPath, string $parameter, ?array $dependencies = NULL): string { - $version = \sha1_file($realPath); + $version = (string) \sha1_file($realPath); if ($this->debugMode && $dependencies) { $dependencies[\Nette\Caching\Cache::FILES] = $realPath; } From 604fe8b3d527838c3e463784b42018a3453d4063 Mon Sep 17 00:00:00 2001 From: jakubenglicky Date: Tue, 23 Mar 2021 12:53:12 +0100 Subject: [PATCH 20/37] =?UTF-8?q?P=C5=99echod=20na=20Github=20Actions?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/ci.yml | 23 +++++++++++++++++++++++ .travis.yml | 22 ---------------------- Makefile | 13 +++++++++++++ 3 files changed, 36 insertions(+), 22 deletions(-) create mode 100644 .github/workflows/ci.yml delete mode 100644 .travis.yml create mode 100644 Makefile diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..73fedd2 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,23 @@ +name: CI + +on: + pull_request: + +jobs: + build: + name: Build + runs-on: ubuntu-20.04 + strategy: + matrix: + php: [ 7.1, 7.2, 7.3, 7.4 ] + steps: + - uses: actions/checkout@v2 + - uses: shivammathur/setup-php@v2 + with: + php-version: ${{ matrix.php }} + extensions: tokenizer + + - run: make composer + - run: make cs + - run: make phpstan + - run: make run-tests diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 026e89f..0000000 --- a/.travis.yml +++ /dev/null @@ -1,22 +0,0 @@ -language: php -php: - - 7.1 - - 7.2 - - 7.3 - - 7.4 - -script: - - vendor/bin/phpcs src/ --standard=vendor/pd/coding-standard/src/PeckaCodingStandard/ruleset.xml - - vendor/bin/phpcs src/ --standard=vendor/pd/coding-standard/src/PeckaCodingStandardStrict/ruleset.xml - - vendor/bin/phpstan analyse src/ --level 8 --no-progress - - vendor/bin/tester tests/ - -before_script: - - composer validate - - composer install --no-interaction --prefer-dist - -sudo: false - -cache: - directories: - - $HOME/.composer/cache diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..b3e768e --- /dev/null +++ b/Makefile @@ -0,0 +1,13 @@ +composer: + composer validate + composer install --no-interaction --prefer-dist + +phpstan: + vendor/bin/phpstan analyse src/ --level 8 --no-progress + +cs: + vendor/bin/phpcs src/ --standard=vendor/pd/coding-standard/src/PeckaCodingStandard/ruleset.xml + vendor/bin/phpcs src/ --standard=vendor/pd/coding-standard/src/PeckaCodingStandardStrict/ruleset.xml + +run-tests: + vendor/bin/tester -C tests/ From 543c97561081574c77f569a0c822f91cb93e735b Mon Sep 17 00:00:00 2001 From: jakubenglicky Date: Tue, 23 Mar 2021 13:41:01 +0100 Subject: [PATCH 21/37] =?UTF-8?q?P=C5=99echod=20na=20Github=20Actions?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 73fedd2..55b608a 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -15,9 +15,9 @@ jobs: - uses: shivammathur/setup-php@v2 with: php-version: ${{ matrix.php }} - extensions: tokenizer - run: make composer - run: make cs + if: matrix.php == '7.4' - run: make phpstan - run: make run-tests From 4c6616c545239b56581c66d2858718fd7213cc20 Mon Sep 17 00:00:00 2001 From: jakubenglicky Date: Tue, 23 Mar 2021 13:46:02 +0100 Subject: [PATCH 22/37] =?UTF-8?q?P=C5=99echod=20na=20Github=20Actions?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/ci.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 55b608a..6a10cfd 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -16,6 +16,8 @@ jobs: with: php-version: ${{ matrix.php }} + - run: echo matrix.php + - run: make composer - run: make cs if: matrix.php == '7.4' From a09c72e0d0b5005fc30cab9dc1989c989d089e4a Mon Sep 17 00:00:00 2001 From: jakubenglicky Date: Tue, 23 Mar 2021 13:46:57 +0100 Subject: [PATCH 23/37] =?UTF-8?q?P=C5=99echod=20na=20Github=20Actions?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/ci.yml | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 6a10cfd..3c5518b 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -16,10 +16,12 @@ jobs: with: php-version: ${{ matrix.php }} - - run: echo matrix.php - - run: make composer - - run: make cs - if: matrix.php == '7.4' - - run: make phpstan + + - if: matrix.php == '7.4' + run: make cs + + - if: matrix.php == '7.4' + run: make phpstan + - run: make run-tests From 3db3c0185cf69142d4e766867a4282bacd7b0471 Mon Sep 17 00:00:00 2001 From: jakubenglicky Date: Tue, 23 Mar 2021 11:41:55 +0100 Subject: [PATCH 24/37] =?UTF-8?q?Dopln=C4=9Bn=C3=AD=20referencov=C3=A1n?= =?UTF-8?q?=C3=AD=20pomoc=C3=AD=20&?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - při nastavení tagu do dependencies této proměnné chybělo referencování - tím pádem se sice v rámci metody tag nastavil, ale ven se již nedostal --- src/Resolvers/PathResolver.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Resolvers/PathResolver.php b/src/Resolvers/PathResolver.php index c5a9c23..972974c 100644 --- a/src/Resolvers/PathResolver.php +++ b/src/Resolvers/PathResolver.php @@ -38,7 +38,7 @@ public function resolve(\Nette\Http\Url $url, string $directory, string $paramet return $this->process($url, $realPath, $parameter); } - return $this->cache->load([$realPath, $directory, $parameter], function (?array $dependencies) use ($url, $realPath, $parameter): string { + return $this->cache->load([$realPath, $directory, $parameter], function (?array &$dependencies) use ($url, $realPath, $parameter): string { return $this->process($url, $realPath, $parameter, $dependencies); }); } @@ -47,7 +47,7 @@ public function resolve(\Nette\Http\Url $url, string $directory, string $paramet /** * @param array $dependencies */ - private function process(\Nette\Http\Url $url, string $realPath, string $parameter, ?array $dependencies = NULL): string + private function process(\Nette\Http\Url $url, string $realPath, string $parameter, ?array &$dependencies = NULL): string { $version = (string) \sha1_file($realPath); if ($this->debugMode && $dependencies) { From c7287d4612a65d185d0f1c7448debb66c2a9330b Mon Sep 17 00:00:00 2001 From: jakubenglicky Date: Tue, 23 Mar 2021 11:43:30 +0100 Subject: [PATCH 25/37] =?UTF-8?q?Podm=C3=ADnka=20nemohla=20b=C3=BDt=20spln?= =?UTF-8?q?=C4=9Bna?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - z podstaty fungování není proměnná $dependencies naplněna, takže podmínka se nikdy nesplnila --- src/Resolvers/PathResolver.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Resolvers/PathResolver.php b/src/Resolvers/PathResolver.php index 972974c..650bcc8 100644 --- a/src/Resolvers/PathResolver.php +++ b/src/Resolvers/PathResolver.php @@ -50,7 +50,7 @@ public function resolve(\Nette\Http\Url $url, string $directory, string $paramet private function process(\Nette\Http\Url $url, string $realPath, string $parameter, ?array &$dependencies = NULL): string { $version = (string) \sha1_file($realPath); - if ($this->debugMode && $dependencies) { + if ($this->debugMode) { $dependencies[\Nette\Caching\Cache::FILES] = $realPath; } $dependencies[\Nette\Caching\Cache::TAGS] = \Pd\Version\Filter::CACHE_TAG; From 934aaf5fc5b9927b57b0dd7c6a4bada136eff711 Mon Sep 17 00:00:00 2001 From: jakubenglicky Date: Tue, 23 Mar 2021 11:44:52 +0100 Subject: [PATCH 26/37] Tagy, jsou pole MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - dependencies::TAGS se očekává jako pole, byť si s tím Cache poradí, zachoval bych formát pole. viz. https://doc.nette.org/cs/3.1/caching#toc-invalidace-pomoci-tagu --- src/Resolvers/PathResolver.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Resolvers/PathResolver.php b/src/Resolvers/PathResolver.php index 650bcc8..42fd1c9 100644 --- a/src/Resolvers/PathResolver.php +++ b/src/Resolvers/PathResolver.php @@ -53,7 +53,7 @@ private function process(\Nette\Http\Url $url, string $realPath, string $paramet if ($this->debugMode) { $dependencies[\Nette\Caching\Cache::FILES] = $realPath; } - $dependencies[\Nette\Caching\Cache::TAGS] = \Pd\Version\Filter::CACHE_TAG; + $dependencies[\Nette\Caching\Cache::TAGS] = [\Pd\Version\Filter::CACHE_TAG]; return $this->getPath($url, $version, $parameter); } From d68424069558b4cde4e6c45a193e57a6a148f40d Mon Sep 17 00:00:00 2001 From: jakubenglicky Date: Tue, 23 Mar 2021 12:06:48 +0100 Subject: [PATCH 27/37] =?UTF-8?q?Refactoring=20test=C5=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - vytvořena TestCase, která vytváří kontejner - úprava strktury složek --- .gitignore | 2 +- composer.json | 5 ++++ tests/DI/ExtensionTest.php | 27 ------------------- tests/DI/cache/.gitignore | 3 --- tests/PdTests/Version/DI/ExtensionTest.php | 20 ++++++++++++++ tests/{ => PdTests/Version}/DI/extension.neon | 0 tests/TestCase.php | 26 ++++++++++++++++++ 7 files changed, 52 insertions(+), 31 deletions(-) delete mode 100644 tests/DI/ExtensionTest.php delete mode 100644 tests/DI/cache/.gitignore create mode 100644 tests/PdTests/Version/DI/ExtensionTest.php rename tests/{ => PdTests/Version}/DI/extension.neon (100%) create mode 100644 tests/TestCase.php diff --git a/.gitignore b/.gitignore index 025eb3d..b5c3db2 100644 --- a/.gitignore +++ b/.gitignore @@ -2,4 +2,4 @@ /vendor /tests/**/*.actual /tests/**/*.expected - +/tests/temp diff --git a/composer.json b/composer.json index 849306e..205e66a 100644 --- a/composer.json +++ b/composer.json @@ -30,5 +30,10 @@ "psr-4": { "Pd\\Version\\": "src/" } + }, + "autoload-dev": { + "classmap": [ + "tests/" + ] } } diff --git a/tests/DI/ExtensionTest.php b/tests/DI/ExtensionTest.php deleted file mode 100644 index 8203c76..0000000 --- a/tests/DI/ExtensionTest.php +++ /dev/null @@ -1,27 +0,0 @@ -addConfig(__DIR__ . '/extension.neon'); - $configurator->setTempDirectory(__DIR__); - $container = $configurator->createContainer(); - - $service = $container->getByType(\Pd\Version\Filter::class); - \Tester\Assert::truthy($service); - - $service = $container->getByType(\Pd\Version\CleanCacheCommand::class); - \Tester\Assert::truthy($service); - } -} - - -(new ExtensionTest())->run(); diff --git a/tests/DI/cache/.gitignore b/tests/DI/cache/.gitignore deleted file mode 100644 index cec9082..0000000 --- a/tests/DI/cache/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -* - -!.gitignore diff --git a/tests/PdTests/Version/DI/ExtensionTest.php b/tests/PdTests/Version/DI/ExtensionTest.php new file mode 100644 index 0000000..1942bc6 --- /dev/null +++ b/tests/PdTests/Version/DI/ExtensionTest.php @@ -0,0 +1,20 @@ +container->getByType(\Pd\Version\Filter::class); + \Tester\Assert::truthy($service); + + $service = $this->container->getByType(\Pd\Version\CleanCacheCommand::class); + \Tester\Assert::truthy($service); + } +} +(new ExtensionTest())->run(); diff --git a/tests/DI/extension.neon b/tests/PdTests/Version/DI/extension.neon similarity index 100% rename from tests/DI/extension.neon rename to tests/PdTests/Version/DI/extension.neon diff --git a/tests/TestCase.php b/tests/TestCase.php new file mode 100644 index 0000000..5848a49 --- /dev/null +++ b/tests/TestCase.php @@ -0,0 +1,26 @@ +addConfig(__DIR__ . '/PdTests/Version/DI/extension.neon'); + $configurator->setTempDirectory(__DIR__ . '/temp'); + + $this->container = $configurator->createContainer(); + } + +} From 5c644f2d8569dc005853fb483ebf27666e63ed75 Mon Sep 17 00:00:00 2001 From: jakubenglicky Date: Tue, 23 Mar 2021 12:41:57 +0100 Subject: [PATCH 28/37] =?UTF-8?q?P=C5=99id=C3=A1n=20test=20na=20p=C5=99id?= =?UTF-8?q?=C3=A1n=C3=AD=20tag=C5=AF=20do=20cache?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - test, kontroluje zda při ukládání do cache jsou správně předány dependencies --- tests/PdTests/Version/Cache/TagsTest.php | 28 +++++++++++++++++++ .../Version/Cache/TestDevNullStorage.php | 27 ++++++++++++++++++ tests/PdTests/Version/Cache/files/test.txt | 1 + tests/PdTests/Version/DI/extension.neon | 3 ++ tests/TestCase.php | 2 +- 5 files changed, 60 insertions(+), 1 deletion(-) create mode 100644 tests/PdTests/Version/Cache/TagsTest.php create mode 100644 tests/PdTests/Version/Cache/TestDevNullStorage.php create mode 100644 tests/PdTests/Version/Cache/files/test.txt diff --git a/tests/PdTests/Version/Cache/TagsTest.php b/tests/PdTests/Version/Cache/TagsTest.php new file mode 100644 index 0000000..335d08c --- /dev/null +++ b/tests/PdTests/Version/Cache/TagsTest.php @@ -0,0 +1,28 @@ +container->getByType(\PdTests\Version\Cache\TestDevNullStorage::class); + + /** @var \Pd\Version\Resolvers\PathResolver $resolver */ + $resolver = $this->container->getByType(\Pd\Version\Resolvers\PathResolver::class); + $resolver->resolve(new \Nette\Http\Url('test.txt'), __DIR__ . '/files', ''); + + \Tester\Assert::true(isset($storage->getDependencies()[\Nette\Caching\Cache::TAGS])); + + $defaultTag = \current($storage->getDependencies()[\Nette\Caching\Cache::TAGS]); + + \Tester\Assert::same($defaultTag, \Pd\Version\Filter::CACHE_TAG); + } + +} +(new TagsTest())->run(); diff --git a/tests/PdTests/Version/Cache/TestDevNullStorage.php b/tests/PdTests/Version/Cache/TestDevNullStorage.php new file mode 100644 index 0000000..eb2ccc6 --- /dev/null +++ b/tests/PdTests/Version/Cache/TestDevNullStorage.php @@ -0,0 +1,27 @@ +dependencies = $dependencies; + + parent::write($key,$data, $dependencies); + } + + + public function getDependencies(): array + { + return $this->dependencies; + } + +} diff --git a/tests/PdTests/Version/Cache/files/test.txt b/tests/PdTests/Version/Cache/files/test.txt new file mode 100644 index 0000000..1daa932 --- /dev/null +++ b/tests/PdTests/Version/Cache/files/test.txt @@ -0,0 +1 @@ +Tohle je test cache diff --git a/tests/PdTests/Version/DI/extension.neon b/tests/PdTests/Version/DI/extension.neon index 57326e6..73d1eed 100644 --- a/tests/PdTests/Version/DI/extension.neon +++ b/tests/PdTests/Version/DI/extension.neon @@ -1,3 +1,6 @@ extensions: version: Pd\Version\Extension console: Kdyby\Console\DI\ConsoleExtension + +services: + cache.storage: PdTests\Version\Cache\TestDevNullStorage diff --git a/tests/TestCase.php b/tests/TestCase.php index 5848a49..dcbc425 100644 --- a/tests/TestCase.php +++ b/tests/TestCase.php @@ -14,7 +14,7 @@ class TestCase extends \Tester\TestCase protected $container; - public function setUp() + public function setUp(): void { $configurator = new \Nette\Configurator(); $configurator->addConfig(__DIR__ . '/PdTests/Version/DI/extension.neon'); From 7683c35bb95dec25869b6bdcc35469b5f7c56c42 Mon Sep 17 00:00:00 2001 From: jakubenglicky Date: Thu, 25 Mar 2021 13:55:54 +0100 Subject: [PATCH 29/37] =?UTF-8?q?Sjednocen=C3=AD=20se=20=C5=A1ablonou=20Pa?= =?UTF-8?q?ckage=20CI?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/ci.yml | 8 ++++---- Makefile | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 3c5518b..9fd5d09 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,12 +1,12 @@ -name: CI +name: Package CI on: pull_request: jobs: - build: - name: Build - runs-on: ubuntu-20.04 + checks: + name: Checks + runs-on: ubuntu-latest strategy: matrix: php: [ 7.1, 7.2, 7.3, 7.4 ] diff --git a/Makefile b/Makefile index b3e768e..a3302bd 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,6 @@ composer: composer validate - composer install --no-interaction --prefer-dist + composer update --no-interaction --prefer-dist phpstan: vendor/bin/phpstan analyse src/ --level 8 --no-progress From 1c584a68cf7e1d6dc86b977ed8779de53d5e3812 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pavel=20Jura=CC=81sek?= Date: Mon, 31 May 2021 12:36:50 +0200 Subject: [PATCH 30/37] =?UTF-8?q?#3804:=20pov=C3=BD=C5=A1en=C3=AD=20na=20P?= =?UTF-8?q?HP=208:=20composer?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- composer.json | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/composer.json b/composer.json index 205e66a..c97ff78 100644 --- a/composer.json +++ b/composer.json @@ -7,20 +7,20 @@ } }, "require": { - "php": "7.1.* || 7.2.* || 7.3.* || 7.4.*", - "nette/http": "3.0.*", - "nette/caching": "3.0.*", - "nette/application": ">3.0.0", + "php": "^7.4 | ^8.0", + "nette/http": "^3.0", + "nette/caching": "^3.0", + "nette/application": "^3.0", "kdyby/console": "2.8.*@dev", - "symfony/console": "~2.3 || ~3.0 || ~4.0" + "symfony/console": "^3.0 | ^4.0 | ^5.0" }, "require-dev": { - "pd/coding-standard": "1.17.*", - "nette/tester": "2.3.*", - "nette/bootstrap": "3.0.*", - "phpstan/phpstan": "0.12.80", + "pd/coding-standard": "v1.27.2", + "nette/tester": "^2.4", + "nette/bootstrap": "^3.0", + "phpstan/phpstan": "0.12.88", "phpstan/phpstan-strict-rules": "0.12.9", - "latte/latte": "^2.5.1" + "latte/latte": "^2.9" }, "suggest": { "nette/caching": "Caching support", From c64bbaccc9cddb18e2183358c71af03b74f20656 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pavel=20Jura=CC=81sek?= Date: Mon, 31 May 2021 12:39:19 +0200 Subject: [PATCH 31/37] =?UTF-8?q?#3804:=20pov=C3=BD=C5=A1en=C3=AD=20na=20P?= =?UTF-8?q?HP=208:=20CI?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/ci.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 9fd5d09..480bd08 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -9,7 +9,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - php: [ 7.1, 7.2, 7.3, 7.4 ] + php: [ 7.4, 8.0 ] steps: - uses: actions/checkout@v2 - uses: shivammathur/setup-php@v2 @@ -18,10 +18,10 @@ jobs: - run: make composer - - if: matrix.php == '7.4' + - if: matrix.php == '8.0' run: make cs - - if: matrix.php == '7.4' + - if: matrix.php == '8.0' run: make phpstan - run: make run-tests From 8f46b9c151f3bc77ad1f708b5a63e1b06c17b388 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pavel=20Jura=CC=81sek?= Date: Mon, 31 May 2021 12:43:45 +0200 Subject: [PATCH 32/37] =?UTF-8?q?#3804:=20pov=C3=BD=C5=A1en=C3=AD=20na=20P?= =?UTF-8?q?HP=208:=20back=20compatibility?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Makefile | 2 +- phpstan.neon | 5 +++++ src/Resolvers/AbsoluteUrlResolver.php | 2 +- 3 files changed, 7 insertions(+), 2 deletions(-) create mode 100644 phpstan.neon diff --git a/Makefile b/Makefile index a3302bd..fa09bf8 100644 --- a/Makefile +++ b/Makefile @@ -3,7 +3,7 @@ composer: composer update --no-interaction --prefer-dist phpstan: - vendor/bin/phpstan analyse src/ --level 8 --no-progress + vendor/bin/phpstan analyse src/ -c phpstan.neon --level 8 --no-progress cs: vendor/bin/phpcs src/ --standard=vendor/pd/coding-standard/src/PeckaCodingStandard/ruleset.xml diff --git a/phpstan.neon b/phpstan.neon new file mode 100644 index 0000000..542cbdf --- /dev/null +++ b/phpstan.neon @@ -0,0 +1,5 @@ +parameters: + ignoreErrors: + - + message: '~^Parameter #2 \$(format|associative) of function get_headers expects (int|bool), int\|true given\.$~' + path: src/Resolvers/AbsoluteUrlResolver.php diff --git a/src/Resolvers/AbsoluteUrlResolver.php b/src/Resolvers/AbsoluteUrlResolver.php index 25136c9..ad69ab7 100644 --- a/src/Resolvers/AbsoluteUrlResolver.php +++ b/src/Resolvers/AbsoluteUrlResolver.php @@ -24,7 +24,7 @@ public function resolve(\Nette\Http\Url $url, string $directory, string $paramet private function process(\Nette\Http\Url $url, string $parameter): string { $version = ''; - $headers = @\get_headers($url->getAbsoluteUrl(), 1); + $headers = @\get_headers($url->getAbsoluteUrl(), \PHP_VERSION_ID >= 80000 ? TRUE : 1); if (\is_array($headers) && isset($headers['ETag'])) { $version = \preg_replace('~[^a-z0-9\-]~', '', $headers['ETag']); } elseif (\is_array($headers) && isset($headers['Last-Modified'])) { From 148fef7b8f4428f87425382f275867b91387ebab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pavel=20Jura=CC=81sek?= Date: Mon, 31 May 2021 13:34:49 +0200 Subject: [PATCH 33/37] =?UTF-8?q?#3804:=20pov=C3=BD=C5=A1en=C3=AD=20na=20P?= =?UTF-8?q?HP=208:=20typed=20properties,=20whitespaces?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Extension.php | 16 ++++------------ src/Filter.php | 13 +++---------- src/Resolvers/AbstractPathResolver.php | 12 +++--------- src/Resolvers/PathResolver.php | 10 ++-------- src/Resolvers/PathResolverInterface.php | 1 + 5 files changed, 13 insertions(+), 39 deletions(-) diff --git a/src/Extension.php b/src/Extension.php index 087f7b5..e6e124b 100644 --- a/src/Extension.php +++ b/src/Extension.php @@ -5,20 +5,11 @@ final class Extension extends \Nette\DI\CompilerExtension { - /** - * @var string - */ - private $directory; + private string $directory; - /** - * @var string - */ - private $parameter; + private string $parameter; - /** - * @var bool - */ - private $debugMode; + private bool $debugMode; public function __construct(string $directory = '%wwwDir%', string $parameter = 'version', bool $debugMode = FALSE) @@ -106,4 +97,5 @@ public function loadConfiguration(): void ->addTag(\Kdyby\Console\DI\ConsoleExtension::COMMAND_TAG) ; } + } diff --git a/src/Filter.php b/src/Filter.php index ffc2ae9..e0c36a1 100644 --- a/src/Filter.php +++ b/src/Filter.php @@ -7,22 +7,15 @@ final class Filter implements IFilter public const CACHE_TAG = 'pd-version'; - /** - * @var string - */ - private $directory; - - /** - * @var string - */ - private $parameter; + private string $directory; + private string $parameter; /** * @var \Pd\Version\Resolvers\PathResolverInterface[] */ - private $getters; + private array $getters; public function __construct( diff --git a/src/Resolvers/AbstractPathResolver.php b/src/Resolvers/AbstractPathResolver.php index 9086f9c..9f1a9aa 100644 --- a/src/Resolvers/AbstractPathResolver.php +++ b/src/Resolvers/AbstractPathResolver.php @@ -5,15 +5,9 @@ abstract class AbstractPathResolver implements \Pd\Version\Resolvers\PathResolverInterface { - /** - * @var ?\Nette\Caching\Cache - */ - protected $cache; - - /** - * @var ?\Nette\Http\IRequest - */ - protected $request; + protected ?\Nette\Caching\Cache $cache = NULL; + + protected ?\Nette\Http\IRequest $request = NULL; public function setRequest(\Nette\Http\IRequest $request): void diff --git a/src/Resolvers/PathResolver.php b/src/Resolvers/PathResolver.php index 42fd1c9..b0961f5 100644 --- a/src/Resolvers/PathResolver.php +++ b/src/Resolvers/PathResolver.php @@ -5,15 +5,9 @@ class PathResolver extends \Pd\Version\Resolvers\AbstractPathResolver { - /** - * @var bool - */ - private $debugMode; + private bool $debugMode; - /** - * @var \Pd\Version\Resolvers\Getter\RelativePathGetterInterface - */ - private $relativePathGetter; + private \Pd\Version\Resolvers\Getter\RelativePathGetterInterface $relativePathGetter; public function __construct( diff --git a/src/Resolvers/PathResolverInterface.php b/src/Resolvers/PathResolverInterface.php index 88a01dd..624a0ca 100644 --- a/src/Resolvers/PathResolverInterface.php +++ b/src/Resolvers/PathResolverInterface.php @@ -7,6 +7,7 @@ interface PathResolverInterface public function resolve(\Nette\Http\Url $url, string $directory, string $parameter): ?string; + public function setStorage(\Nette\Caching\IStorage $storage): void; } From 09d37fb8dc2a951969baf3b015465fbf3f371dba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pavel=20Jura=CC=81sek?= Date: Mon, 31 May 2021 13:55:49 +0200 Subject: [PATCH 34/37] =?UTF-8?q?#3804:=20pov=C3=BD=C5=A1en=C3=AD=20na=20P?= =?UTF-8?q?HP=208:=20tester=20lep=C5=A1=C3=AD=20asserce?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tests/PdTests/Version/DI/ExtensionTest.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/PdTests/Version/DI/ExtensionTest.php b/tests/PdTests/Version/DI/ExtensionTest.php index 1942bc6..8569d21 100644 --- a/tests/PdTests/Version/DI/ExtensionTest.php +++ b/tests/PdTests/Version/DI/ExtensionTest.php @@ -11,10 +11,10 @@ class ExtensionTest extends \PdTests\Version\TestCase public function testExtension() { $service = $this->container->getByType(\Pd\Version\Filter::class); - \Tester\Assert::truthy($service); + \Tester\Assert::type(\Pd\Version\Filter::class, $service); $service = $this->container->getByType(\Pd\Version\CleanCacheCommand::class); - \Tester\Assert::truthy($service); + \Tester\Assert::type(\Pd\Version\CleanCacheCommand::class, $service); } } (new ExtensionTest())->run(); From 87d0b2ab16f4c2bf377b12df842fbcecceedd2ec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pavel=20Jura=CC=81sek?= Date: Mon, 31 May 2021 14:02:44 +0200 Subject: [PATCH 35/37] =?UTF-8?q?#3804:=20pov=C3=BD=C5=A1en=C3=AD=20na=20P?= =?UTF-8?q?HP=208:=20nette=20compatibility?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Extension.php | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/src/Extension.php b/src/Extension.php index e6e124b..1812a86 100644 --- a/src/Extension.php +++ b/src/Extension.php @@ -22,7 +22,6 @@ public function __construct(string $directory = '%wwwDir%', string $parameter = public function beforeCompile(): void { - parent::beforeCompile(); $builder = $this->getContainerBuilder(); /** @var \Nette\DI\Definitions\ServiceDefinition $filter */ $filter = $builder->getDefinition($this->prefix('filter')); @@ -62,8 +61,6 @@ public function beforeCompile(): void public function loadConfiguration(): void { - parent::loadConfiguration(); - $builder = $this->getContainerBuilder(); $absoluteUrlResolver = $builder->addDefinition($this->prefix('absoluteUrlResolver')) @@ -81,7 +78,11 @@ public function loadConfiguration(): void $absoluteUrlResolver, $pathResolver, ]; - $builder->addDefinition($this->prefix('filter'))->setClass(Filter::class)->setArguments($arguments); + $builder + ->addDefinition($this->prefix('filter')) + ->setFactory(Filter::class) + ->setArguments($arguments) + ; $builder->addDefinition($this->prefix('relativePathGetter')) ->setFactory(\Pd\Version\Resolvers\Getter\RelativePathGetter::class) @@ -93,8 +94,8 @@ public function loadConfiguration(): void $builder = $this->getContainerBuilder(); $builder ->addDefinition($this->prefix('console.cleanCache')) - ->setClass(CleanCacheCommand::class) - ->addTag(\Kdyby\Console\DI\ConsoleExtension::COMMAND_TAG) + ->setFactory(CleanCacheCommand::class) + ->addTag(\Kdyby\Console\DI\ConsoleExtension::TAG_COMMAND) ; } From 253102054c76858247e948a0a41a449af322fb9c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Milan=20P=C3=A1la?= Date: Fri, 13 Sep 2019 14:27:57 +0200 Subject: [PATCH 36/37] =?UTF-8?q?Krom=C4=9B=20Kdyby/Console=20p=C5=99id?= =?UTF-8?q?=C3=A1na=20podpora=20pro=20dal=C5=A1=C3=AD=20knihovny?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- composer.json | 5 +++-- src/Extension.php | 9 ++++++--- tests/PdTests/Version/DI/extension.neon | 1 - 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/composer.json b/composer.json index c97ff78..4e84052 100644 --- a/composer.json +++ b/composer.json @@ -11,7 +11,6 @@ "nette/http": "^3.0", "nette/caching": "^3.0", "nette/application": "^3.0", - "kdyby/console": "2.8.*@dev", "symfony/console": "^3.0 | ^4.0 | ^5.0" }, "require-dev": { @@ -24,7 +23,9 @@ }, "suggest": { "nette/caching": "Caching support", - "nette/di": "Register filter using extension" + "nette/di": "Register filter using extension", + "kdyby/console": "For Symfony Console support", + "contributte/console": "For Symfony Console support" }, "autoload": { "psr-4": { diff --git a/src/Extension.php b/src/Extension.php index 1812a86..40d24eb 100644 --- a/src/Extension.php +++ b/src/Extension.php @@ -88,15 +88,18 @@ public function loadConfiguration(): void ->setFactory(\Pd\Version\Resolvers\Getter\RelativePathGetter::class) ; - if ( ! \class_exists(\Kdyby\Console\DI\ConsoleExtension::class) || \PHP_SAPI !== 'cli') { + if (\PHP_SAPI !== 'cli') { return; } $builder = $this->getContainerBuilder(); - $builder + $cleanCacheDefinition = $builder ->addDefinition($this->prefix('console.cleanCache')) ->setFactory(CleanCacheCommand::class) - ->addTag(\Kdyby\Console\DI\ConsoleExtension::TAG_COMMAND) ; + + if (\class_exists('\Kdyby\Console\DI\ConsoleExtension')) { + $cleanCacheDefinition->addTag('kdyby.console.command'); + } } } diff --git a/tests/PdTests/Version/DI/extension.neon b/tests/PdTests/Version/DI/extension.neon index 73d1eed..21e8a6b 100644 --- a/tests/PdTests/Version/DI/extension.neon +++ b/tests/PdTests/Version/DI/extension.neon @@ -1,6 +1,5 @@ extensions: version: Pd\Version\Extension - console: Kdyby\Console\DI\ConsoleExtension services: cache.storage: PdTests\Version\Cache\TestDevNullStorage From d9a24044cb65d757961a7056ec7cd83af7070f5b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=A1clav=20=C4=8Cevela?= Date: Mon, 20 Jun 2022 16:17:41 +0200 Subject: [PATCH 37/37] nette/cache 3.1.3+ support (#22) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit nette/cache 3.1.3+ support namespace separator do lokální konstanty --- src/Resolvers/AbstractPathResolver.php | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/Resolvers/AbstractPathResolver.php b/src/Resolvers/AbstractPathResolver.php index 9f1a9aa..7079e31 100644 --- a/src/Resolvers/AbstractPathResolver.php +++ b/src/Resolvers/AbstractPathResolver.php @@ -5,6 +5,9 @@ abstract class AbstractPathResolver implements \Pd\Version\Resolvers\PathResolverInterface { + public const NAMESPACE_SEPARATOR = "\x00"; + + protected ?\Nette\Caching\Cache $cache = NULL; protected ?\Nette\Http\IRequest $request = NULL; @@ -18,7 +21,7 @@ public function setRequest(\Nette\Http\IRequest $request): void public function setStorage(\Nette\Caching\IStorage $storage): void { - $this->cache = new \Nette\Caching\Cache($storage, \strtr(self::class, '\\', \Nette\Caching\Cache::NAMESPACE_SEPARATOR)); + $this->cache = new \Nette\Caching\Cache($storage, \strtr(self::class, '\\', self::NAMESPACE_SEPARATOR)); }