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 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 diff --git a/src/Console/Command/GenerateCommand.php b/src/Console/Command/GenerateCommand.php index 836492a..40af0e6 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.') ; @@ -39,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) { @@ -60,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..0092b7b 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(): ?string + { + return $this->expanded ? PHP_EOL : null; + } } diff --git a/tests/Unit/Console/Command/GenerateFiltersTest.php b/tests/Unit/Console/Command/GenerateFiltersTest.php index cf3755b..59bca9f 100644 --- a/tests/Unit/Console/Command/GenerateFiltersTest.php +++ b/tests/Unit/Console/Command/GenerateFiltersTest.php @@ -34,7 +34,7 @@ class GenerateFiltersTest extends TestCase } /** @test */ - public function it_converts_filters_from_php_to_xml() + public function it_converts_filters_from_php_to_minified_xml() { $this->commandTester->execute([ '--input-file' => self::INPUT_FILENAME, @@ -48,4 +48,21 @@ class GenerateFiltersTest extends TestCase $this->assertEquals(trim($expected), $result); } + + /** @test */ + 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-expanded.xml'); + $result = file_get_contents(self::OUTPUT_FILENAME); + + $this->assertEquals(trim($expected), $result); + } } 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 = << 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 @@ + + + + + + + + diff --git a/tests/fixtures/simple/output.xml b/tests/fixtures/simple/output.xml index 5ab840f..eebac51 100644 --- a/tests/fixtures/simple/output.xml +++ b/tests/fixtures/simple/output.xml @@ -1,8 +1 @@ - - - - - - - - +