From b123dcf079fa721b9154372c78e80fb4a90c3550 Mon Sep 17 00:00:00 2001 From: Oliver Davies Date: Thu, 18 Apr 2019 21:30:58 +0100 Subject: [PATCH 1/6] Update test, add expanded option --- src/Console/Command/GenerateCommand.php | 3 ++- tests/Unit/Console/Command/GenerateFiltersTest.php | 5 +++-- tests/fixtures/simple/output-expanded.xml | 8 ++++++++ 3 files changed, 13 insertions(+), 3 deletions(-) create mode 100644 tests/fixtures/simple/output-expanded.xml diff --git a/src/Console/Command/GenerateCommand.php b/src/Console/Command/GenerateCommand.php index 836492a..896de6f 100644 --- a/src/Console/Command/GenerateCommand.php +++ b/src/Console/Command/GenerateCommand.php @@ -24,7 +24,8 @@ class GenerateCommand extends Command ->setName(self::NAME) ->setDefinition([ new InputOption('input-file', 'i', InputOption::VALUE_OPTIONAL, 'The name of the PHP file containing your filters.', 'filters.php'), - new InputOption('output-file', 'o', InputOption::VALUE_OPTIONAL, 'The name of the XML file to generate.', 'filters.xml') + new InputOption('output-file', 'o', InputOption::VALUE_OPTIONAL, 'The name of the XML file to generate.', 'filters.xml'), + new InputOption('expanded', 'e', InputOption::VALUE_NONE, 'Whether to generate expanded XML.') ]) ->setDescription('Generates XML for Gmail filters.') ; diff --git a/tests/Unit/Console/Command/GenerateFiltersTest.php b/tests/Unit/Console/Command/GenerateFiltersTest.php index cf3755b..fb51675 100644 --- a/tests/Unit/Console/Command/GenerateFiltersTest.php +++ b/tests/Unit/Console/Command/GenerateFiltersTest.php @@ -34,16 +34,17 @@ class GenerateFiltersTest extends TestCase } /** @test */ - public function it_converts_filters_from_php_to_xml() + public function it_converts_filters_from_php_to_expanded_xml() { $this->commandTester->execute([ '--input-file' => self::INPUT_FILENAME, '--output-file' => self::OUTPUT_FILENAME, + '--expanded' => true, ]); $this->assertTrue($this->fs->exists(self::OUTPUT_FILENAME)); - $expected = file_get_contents(__DIR__ . '/../../../fixtures/simple/output.xml'); + $expected = file_get_contents(__DIR__ . '/../../../fixtures/simple/output-expanded.xml'); $result = file_get_contents(self::OUTPUT_FILENAME); $this->assertEquals(trim($expected), $result); diff --git a/tests/fixtures/simple/output-expanded.xml b/tests/fixtures/simple/output-expanded.xml new file mode 100644 index 0000000..5ab840f --- /dev/null +++ b/tests/fixtures/simple/output-expanded.xml @@ -0,0 +1,8 @@ + + + + + + + + From 4c00155956b30fa4efe985e4ea2bb0ca9e0fb882 Mon Sep 17 00:00:00 2001 From: Oliver Davies Date: Thu, 18 Apr 2019 23:48:04 +0100 Subject: [PATCH 2/6] Generated filters can be expanded --- src/Console/Command/GenerateCommand.php | 4 ++-- src/Service/Builder.php | 21 +++++++++++++------ .../Console/Command/GenerateFiltersTest.php | 16 ++++++++++++++ tests/Unit/Service/BuilderTest.php | 2 +- 4 files changed, 34 insertions(+), 9 deletions(-) diff --git a/src/Console/Command/GenerateCommand.php b/src/Console/Command/GenerateCommand.php index 896de6f..40af0e6 100644 --- a/src/Console/Command/GenerateCommand.php +++ b/src/Console/Command/GenerateCommand.php @@ -40,7 +40,7 @@ class GenerateCommand extends Command try { // TODO: Inject this. - new Builder($this->filters($input), $outputFile = $this->outputFile($input)); + new Builder($this->filters($input), $outputFile = $this->outputFile($input), true, $input->getOption('expanded')); $io->success(sprintf('%s file generated.', $outputFile)); } catch (IOException $e) { @@ -61,6 +61,6 @@ class GenerateCommand extends Command throw new \RuntimeException('No input file found.'); } - return require_once $inputFile; + return require $inputFile; } } diff --git a/src/Service/Builder.php b/src/Service/Builder.php index 40bc4c2..c96878d 100644 --- a/src/Service/Builder.php +++ b/src/Service/Builder.php @@ -29,12 +29,16 @@ class Builder */ private $xml; - public function __construct(array $filters, $outputFile = 'filters.xml', $writeFile = true) + /** @var bool */ + private $expanded; + + public function __construct(array $filters, $outputFile = 'filters.xml', $writeFile = true, $expanded = false) { $this->filesystem = new Filesystem(); $this->filters = $filters; $this->outputFile = $outputFile; $this->writeFile = $writeFile; + $this->expanded = $expanded; $this->build(); } @@ -61,14 +65,14 @@ class Builder */ private function build(): void { - $prefix = "" . PHP_EOL . ""; + $prefix = "" . $this->glue() . ""; $suffix = ''; $xml = collect($this->filters)->map(function ($items) { return $this->buildEntry($items); - })->implode(PHP_EOL); + })->implode($this->glue()); - $this->xml = collect([$prefix, $xml, $suffix])->implode(PHP_EOL); + $this->xml = collect([$prefix, $xml, $suffix])->implode($this->glue()); if ($this->writeFile) { $this->filesystem->dumpFile($this->outputFile, $this->xml); @@ -88,9 +92,9 @@ class Builder ->map(function ($value, $key): string { return $this->buildProperty($value, $key); }) - ->implode(PHP_EOL); + ->implode($this->glue()); - return collect(['', $entry, ''])->implode(PHP_EOL); + return collect(['', $entry, ''])->implode($this->glue()); } /** @@ -128,4 +132,9 @@ class Builder return sprintf('(%s)', collect($value)->implode($separator)); } + + private function glue() + { + return $this->expanded ? PHP_EOL : null; + } } diff --git a/tests/Unit/Console/Command/GenerateFiltersTest.php b/tests/Unit/Console/Command/GenerateFiltersTest.php index fb51675..59bca9f 100644 --- a/tests/Unit/Console/Command/GenerateFiltersTest.php +++ b/tests/Unit/Console/Command/GenerateFiltersTest.php @@ -33,6 +33,22 @@ class GenerateFiltersTest extends TestCase $this->fs->remove([self::OUTPUT_FILENAME]); } + /** @test */ + public function it_converts_filters_from_php_to_minified_xml() + { + $this->commandTester->execute([ + '--input-file' => self::INPUT_FILENAME, + '--output-file' => self::OUTPUT_FILENAME, + ]); + + $this->assertTrue($this->fs->exists(self::OUTPUT_FILENAME)); + + $expected = file_get_contents(__DIR__ . '/../../../fixtures/simple/output.xml'); + $result = file_get_contents(self::OUTPUT_FILENAME); + + $this->assertEquals(trim($expected), $result); + } + /** @test */ public function it_converts_filters_from_php_to_expanded_xml() { diff --git a/tests/Unit/Service/BuilderTest.php b/tests/Unit/Service/BuilderTest.php index 4c40fc2..e8f7695 100644 --- a/tests/Unit/Service/BuilderTest.php +++ b/tests/Unit/Service/BuilderTest.php @@ -20,7 +20,7 @@ class BuilderTest extends TestCase ->star() ->important(); - $result = new Builder([$filterA, $filterB], '', false); + $result = new Builder([$filterA, $filterB], '', false, true); $expected = << From fb5b4922287bcfbba7b4b6024e30c6fa7ec58f3b Mon Sep 17 00:00:00 2001 From: Oliver Davies Date: Fri, 19 Apr 2019 00:36:36 +0100 Subject: [PATCH 3/6] Add return type --- src/Service/Builder.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Service/Builder.php b/src/Service/Builder.php index c96878d..0092b7b 100644 --- a/src/Service/Builder.php +++ b/src/Service/Builder.php @@ -133,7 +133,7 @@ class Builder return sprintf('(%s)', collect($value)->implode($separator)); } - private function glue() + private function glue(): ?string { return $this->expanded ? PHP_EOL : null; } From 739b86290bc654acee35ec2761c8ba455b55ac8e Mon Sep 17 00:00:00 2001 From: Oliver Davies Date: Fri, 19 Apr 2019 00:38:41 +0100 Subject: [PATCH 4/6] Add output.xml --- tests/fixtures/simple/output.xml | 1 + 1 file changed, 1 insertion(+) create mode 100644 tests/fixtures/simple/output.xml diff --git a/tests/fixtures/simple/output.xml b/tests/fixtures/simple/output.xml new file mode 100644 index 0000000..eebac51 --- /dev/null +++ b/tests/fixtures/simple/output.xml @@ -0,0 +1 @@ + From 640719256bdd6e4094e44d3a9e9113990f524929 Mon Sep 17 00:00:00 2001 From: Oliver Davies Date: Fri, 19 Apr 2019 00:39:31 +0100 Subject: [PATCH 5/6] Don't ignore XML files within fixtures --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 54fca72..d0300e9 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,4 @@ composer.lock filters.php *.xml +!/tests/fixtures/*/*.xml From 6a9562aa70fc3f4583d59f3ef831ab15c9dd51ea Mon Sep 17 00:00:00 2001 From: Oliver Davies Date: Fri, 19 Apr 2019 01:30:13 +0100 Subject: [PATCH 6/6] Create CHANGELOG.md --- CHANGELOG.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 CHANGELOG.md diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..1b5d417 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,5 @@ +# CHANGELOG + +## 2.x + +* [#21](https://github.com/opdavies/gmail-filter-builder/issues/21): Minify the generated XML by default