From be9ac8e2260333f643a42012d438f3879bd20177 Mon Sep 17 00:00:00 2001 From: Victor Bocharsky Date: Sat, 16 Dec 2017 12:16:04 +0200 Subject: [PATCH 1/6] Fix deprecations: Inject translation reader instead of loader --- src/FileStorage.php | 26 +++++++++++--------------- 1 file changed, 11 insertions(+), 15 deletions(-) diff --git a/src/FileStorage.php b/src/FileStorage.php index c8f8e68..e72a4ab 100644 --- a/src/FileStorage.php +++ b/src/FileStorage.php @@ -11,16 +11,16 @@ namespace Translation\SymfonyStorage; -use Symfony\Bundle\FrameworkBundle\Translation\TranslationLoader as SymfonyTranslationLoader; use Symfony\Component\Translation\MessageCatalogue; use Symfony\Component\Translation\MessageCatalogueInterface; +use Symfony\Component\Translation\Reader\TranslationReader; use Symfony\Component\Translation\Writer\TranslationWriter; use Translation\Common\Model\Message; use Translation\Common\Storage; use Translation\Common\TransferableStorage; /** - * This storage uses Symfony's writer and loader. + * This storage uses Symfony's writer and reader. * * @author Tobias Nyholm */ @@ -32,9 +32,9 @@ final class FileStorage implements Storage, TransferableStorage private $writer; /** - * @var TranslationLoader|SymfonyTranslationLoader + * @var TranslationReader */ - private $loader; + private $reader; /** * @var array directory path @@ -52,17 +52,13 @@ final class FileStorage implements Storage, TransferableStorage private $catalogues; /** - * @param TranslationWriter $writer - * @param SymfonyTranslationLoader|TranslationLoader $loader - * @param array $dir - * @param array $options + * @param TranslationWriter $writer + * @param TranslationReader $reader + * @param array $dir + * @param array $options */ - public function __construct(TranslationWriter $writer, $loader, array $dir, array $options = []) + public function __construct(TranslationWriter $writer, TranslationReader $reader, array $dir, array $options = []) { - if (!$loader instanceof SymfonyTranslationLoader && !$loader instanceof TranslationLoader) { - throw new \LogicException('Second parameter of FileStorage must be a Symfony translation loader or implement Translation\SymfonyStorage\TranslationLoader'); - } - if (empty($dir)) { throw new \LogicException('Third parameter of FileStorage cannot be empty'); } @@ -73,7 +69,7 @@ public function __construct(TranslationWriter $writer, $loader, array $dir, arra } $this->writer = $writer; - $this->loader = $loader; + $this->reader = $reader; $this->dir = $dir; $this->options = $options; } @@ -199,7 +195,7 @@ private function loadCatalogue($locale, array $dirs) $currentCatalogue = new MessageCatalogue($locale); foreach ($dirs as $path) { if (is_dir($path)) { - $this->loader->loadMessages($path, $currentCatalogue); + $this->reader->read($path, $currentCatalogue); } } From 9d45f178fd74f8626754eea5eb2275671366b457 Mon Sep 17 00:00:00 2001 From: Victor Bocharsky Date: Sat, 16 Dec 2017 12:35:26 +0200 Subject: [PATCH 2/6] Allow Symfony 4 --- composer.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/composer.json b/composer.json index b3c7943..aa08409 100644 --- a/composer.json +++ b/composer.json @@ -11,12 +11,12 @@ "require": { "php": "^5.5 || ^7.0", "php-translation/common": "^0.2.1", - "symfony/translation": "^2.7 || ^3.0", + "symfony/translation": "^2.7 || ^3.0 || ^4.0", "nyholm/nsa": "^1.1" }, "require-dev": { "phpunit/phpunit": "^4.8.36 || ^5.5 || ^6.2", - "symfony/framework-bundle": "^2.7 || ^3.0" + "symfony/framework-bundle": "^2.7 || ^3.0 || ^4.0" }, "autoload": { "psr-4": { From 7848d0e095ab522dfd96ed0dfa69df0eb4fdf8ad Mon Sep 17 00:00:00 2001 From: Victor Bocharsky Date: Sat, 16 Dec 2017 12:39:03 +0200 Subject: [PATCH 3/6] Test stable version of Symfony 3.4 / 4.0 --- .travis.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index bae956b..88d4170 100644 --- a/.travis.yml +++ b/.travis.yml @@ -38,9 +38,9 @@ matrix: - php: 7.0 env: SYMFONY_VERSION=2.8.* - php: 7.1 - env: SYMFONY_VERSION=3.4.x-dev + env: SYMFONY_VERSION=3.4.* - php: 7.1 - env: SYMFONY_VERSION=4.0.x-dev + env: SYMFONY_VERSION=4.0.* - php: 7.0 env: SYMFONY_VERSION=3.0.* - php: 7.0 From 242b6555d85adef60e107d2ad250e4fdfa31cf57 Mon Sep 17 00:00:00 2001 From: bocharsky-bw Date: Mon, 18 Dec 2017 00:29:50 +0200 Subject: [PATCH 4/6] Revert changes in FileStorage --- src/FileStorage.php | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/src/FileStorage.php b/src/FileStorage.php index e72a4ab..c8f8e68 100644 --- a/src/FileStorage.php +++ b/src/FileStorage.php @@ -11,16 +11,16 @@ namespace Translation\SymfonyStorage; +use Symfony\Bundle\FrameworkBundle\Translation\TranslationLoader as SymfonyTranslationLoader; use Symfony\Component\Translation\MessageCatalogue; use Symfony\Component\Translation\MessageCatalogueInterface; -use Symfony\Component\Translation\Reader\TranslationReader; use Symfony\Component\Translation\Writer\TranslationWriter; use Translation\Common\Model\Message; use Translation\Common\Storage; use Translation\Common\TransferableStorage; /** - * This storage uses Symfony's writer and reader. + * This storage uses Symfony's writer and loader. * * @author Tobias Nyholm */ @@ -32,9 +32,9 @@ final class FileStorage implements Storage, TransferableStorage private $writer; /** - * @var TranslationReader + * @var TranslationLoader|SymfonyTranslationLoader */ - private $reader; + private $loader; /** * @var array directory path @@ -52,13 +52,17 @@ final class FileStorage implements Storage, TransferableStorage private $catalogues; /** - * @param TranslationWriter $writer - * @param TranslationReader $reader - * @param array $dir - * @param array $options + * @param TranslationWriter $writer + * @param SymfonyTranslationLoader|TranslationLoader $loader + * @param array $dir + * @param array $options */ - public function __construct(TranslationWriter $writer, TranslationReader $reader, array $dir, array $options = []) + public function __construct(TranslationWriter $writer, $loader, array $dir, array $options = []) { + if (!$loader instanceof SymfonyTranslationLoader && !$loader instanceof TranslationLoader) { + throw new \LogicException('Second parameter of FileStorage must be a Symfony translation loader or implement Translation\SymfonyStorage\TranslationLoader'); + } + if (empty($dir)) { throw new \LogicException('Third parameter of FileStorage cannot be empty'); } @@ -69,7 +73,7 @@ public function __construct(TranslationWriter $writer, TranslationReader $reader } $this->writer = $writer; - $this->reader = $reader; + $this->loader = $loader; $this->dir = $dir; $this->options = $options; } @@ -195,7 +199,7 @@ private function loadCatalogue($locale, array $dirs) $currentCatalogue = new MessageCatalogue($locale); foreach ($dirs as $path) { if (is_dir($path)) { - $this->reader->read($path, $currentCatalogue); + $this->loader->loadMessages($path, $currentCatalogue); } } From 4eb4709d3aec0312f36022e1ba405bb3fad5e5e4 Mon Sep 17 00:00:00 2001 From: bocharsky-bw Date: Mon, 18 Dec 2017 00:46:45 +0200 Subject: [PATCH 5/6] Create LegacyTranslationLoader i.e. wrapper for TranslationReader --- src/FileStorage.php | 13 +++++++++---- src/LegacyTranslationLoader.php | 30 ++++++++++++++++++++++++++++++ tests/Unit/FileStorageTest.php | 33 +++++++++++++++++++++++---------- 3 files changed, 62 insertions(+), 14 deletions(-) create mode 100644 src/LegacyTranslationLoader.php diff --git a/src/FileStorage.php b/src/FileStorage.php index c8f8e68..c447d8e 100644 --- a/src/FileStorage.php +++ b/src/FileStorage.php @@ -14,6 +14,7 @@ use Symfony\Bundle\FrameworkBundle\Translation\TranslationLoader as SymfonyTranslationLoader; use Symfony\Component\Translation\MessageCatalogue; use Symfony\Component\Translation\MessageCatalogueInterface; +use Symfony\Component\Translation\Reader\TranslationReader; use Symfony\Component\Translation\Writer\TranslationWriter; use Translation\Common\Model\Message; use Translation\Common\Storage; @@ -52,13 +53,17 @@ final class FileStorage implements Storage, TransferableStorage private $catalogues; /** - * @param TranslationWriter $writer - * @param SymfonyTranslationLoader|TranslationLoader $loader - * @param array $dir - * @param array $options + * @param TranslationWriter $writer + * @param SymfonyTranslationLoader|TranslationLoader|TranslationReader $loader + * @param array $dir + * @param array $options */ public function __construct(TranslationWriter $writer, $loader, array $dir, array $options = []) { + // Create a legacy loader which is a wrapper for TranslationReader + if ($loader instanceof TranslationReader) { + $loader = new LegacyTranslationLoader($loader); + } if (!$loader instanceof SymfonyTranslationLoader && !$loader instanceof TranslationLoader) { throw new \LogicException('Second parameter of FileStorage must be a Symfony translation loader or implement Translation\SymfonyStorage\TranslationLoader'); } diff --git a/src/LegacyTranslationLoader.php b/src/LegacyTranslationLoader.php new file mode 100644 index 0000000..d8430ad --- /dev/null +++ b/src/LegacyTranslationLoader.php @@ -0,0 +1,30 @@ + + */ +class LegacyTranslationLoader implements TranslationLoader +{ + /** + * @var TranslationReader + */ + private $reader; + + public function __construct(TranslationReader $reader) + { + $this->reader = $reader; + } + + public function loadMessages($directory, MessageCatalogue $catalogue) + { + $this->reader->read($directory, $catalogue); + } +} diff --git a/tests/Unit/FileStorageTest.php b/tests/Unit/FileStorageTest.php index 8edd44e..26f6e1d 100644 --- a/tests/Unit/FileStorageTest.php +++ b/tests/Unit/FileStorageTest.php @@ -15,6 +15,7 @@ use Symfony\Bundle\FrameworkBundle\Translation\TranslationLoader; use Symfony\Component\Translation\MessageCatalogue; use Symfony\Component\Translation\MessageCatalogueInterface; +use Symfony\Component\Translation\Reader\TranslationReader; use Symfony\Component\Translation\Writer\TranslationWriter; use Translation\Common\Model\Message; use Translation\SymfonyStorage\FileStorage; @@ -27,7 +28,7 @@ class FileStorageTest extends TestCase { public function testConstructor() { - $storage = new FileStorage(new TranslationWriter(), new TranslationLoader(), ['foo']); + $storage = new FileStorage(new TranslationWriter(), $this->createTranslationLoader(), ['foo']); $this->assertInstanceOf(FileStorage::class, $storage); } @@ -44,7 +45,7 @@ public function testConstructorInvalidLoader() */ public function testConstructorEmptyArray() { - new FileStorage(new TranslationWriter(), new TranslationLoader(), []); + new FileStorage(new TranslationWriter(), $this->createTranslationLoader(), []); } public function testCreateNewCatalogue() @@ -61,7 +62,7 @@ public function testCreateNewCatalogue() ['path' => 'foo', 'xliff_version' => '2.0'] ); - $storage = new FileStorage($writer, new TranslationLoader(), ['foo']); + $storage = new FileStorage($writer, $this->createTranslationLoader(), ['foo']); $storage->create(new Message('key', 'domain', 'en', 'Message')); $writer = $this->getMockBuilder(TranslationWriter::class) @@ -76,7 +77,7 @@ public function testCreateNewCatalogue() ['path' => 'bar', 'default_output_format' => 'format', 'xliff_version' => '2.0'] ); - $storage = new FileStorage($writer, new TranslationLoader(), ['bar'], ['default_output_format' => 'format']); + $storage = new FileStorage($writer, $this->createTranslationLoader(), ['bar'], ['default_output_format' => 'format']); $storage->create(new Message('key', 'domain', 'en', 'Message')); } @@ -94,7 +95,7 @@ public function testCreateExistingCatalogue() ['path' => $this->getFixturePath(), 'xliff_version' => '2.0'] ); - $loader = new TranslationLoader(); + $loader = $this->createTranslationLoader(); $loader->addLoader('xlf', new XliffLoader()); $storage = new FileStorage($writer, $loader, ['foo', $this->getFixturePath()]); @@ -107,7 +108,7 @@ public function testGet() ->disableOriginalConstructor() ->getMock(); - $loader = new TranslationLoader(); + $loader = $this->createTranslationLoader(); $loader->addLoader('xlf', new XliffLoader()); $storage = new FileStorage($writer, $loader, [$this->getFixturePath()]); @@ -137,7 +138,7 @@ public function testUpdate() ['path' => $this->getFixturePath(), 'xliff_version' => '2.0'] ); - $loader = new TranslationLoader(); + $loader = $this->createTranslationLoader(); $loader->addLoader('xlf', new XliffLoader()); $storage = new FileStorage($writer, $loader, [$this->getFixturePath()]); @@ -162,7 +163,7 @@ public function testDelete() ['path' => $this->getFixturePath(), 'xliff_version' => '2.0'] ); - $loader = new TranslationLoader(); + $loader = $this->createTranslationLoader(); $loader->addLoader('xlf', new XliffLoader()); $storage = new FileStorage($writer, $loader, [$this->getFixturePath()]); @@ -186,7 +187,7 @@ public function testImport() ['path' => $this->getFixturePath(), 'xliff_version' => '2.0'] ); - $loader = new TranslationLoader(); + $loader = $this->createTranslationLoader(); $loader->addLoader('xlf', new XliffLoader()); $storage = new FileStorage($writer, $loader, [$this->getFixturePath()]); $catalogue = new MessageCatalogue('en', ['messages' => ['test_4711' => 'foobar']]); @@ -200,7 +201,7 @@ public function testExport() ->disableOriginalConstructor() ->getMock(); - $loader = new TranslationLoader(); + $loader = $this->createTranslationLoader(); $loader->addLoader('xlf', new XliffLoader()); $storage = new FileStorage($writer, $loader, [$this->getFixturePath()]); @@ -222,4 +223,16 @@ private function getFixturePath() { return realpath(__DIR__.'/../Fixtures/single-file'); } + + /** + * @return TranslationLoader|TranslationReader + */ + private function createTranslationLoader() + { + if (class_exists(TranslationReader::class)) { + return new TranslationReader(); + } + + return new TranslationLoader(); + } } From 33dc9097f304bd7e4e7754e043254096a7ef7518 Mon Sep 17 00:00:00 2001 From: bocharsky-bw Date: Mon, 18 Dec 2017 00:52:47 +0200 Subject: [PATCH 6/6] We don't need allow_failures for sf 3.4-dev and 4.0-dev anymore --- .travis.yml | 5 ----- 1 file changed, 5 deletions(-) diff --git a/.travis.yml b/.travis.yml index 88d4170..b81ef58 100644 --- a/.travis.yml +++ b/.travis.yml @@ -24,11 +24,6 @@ env: matrix: fast_finish: true - allow_failures: - - php: 7.1 - env: SYMFONY_VERSION=3.4.x-dev - - php: 7.1 - env: SYMFONY_VERSION=4.0.x-dev include: - php: 5.5 env: COMPOSER_FLAGS="--prefer-stable --prefer-lowest" COVERAGE=true TEST_COMMAND="composer test-ci" SYMFONY_VERSION=2.8.*