Add CS Fixer

This commit is contained in:
jubianchi 2016-08-05 20:40:29 +02:00
parent 5cab89b06f
commit 456fbdc101
No known key found for this signature in database
GPG key ID: 5D9C896D2AA9E390
11 changed files with 427 additions and 92 deletions

2
.gitignore vendored
View file

@ -1,2 +1,4 @@
vendor/ vendor/
docker.lock docker.lock
bin/
!bin/dcv

11
.php_cs Normal file
View file

@ -0,0 +1,11 @@
<?php
$finder = Symfony\CS\Finder\DefaultFinder::create()
->exclude('somedir')
->in(__DIR__.DIRECTORY_SEPARATOR.'src')
->in(__DIR__.DIRECTORY_SEPARATOR.'spec')
;
return Symfony\CS\Config\Config::create()
->finder($finder)
;

View file

@ -5,13 +5,21 @@ COMPOSERFLAGS ?=
DOCKER ?= docker DOCKER ?= docker
PHP ?= php PHP ?= php
.PHONY: clean docker test .PHONY: clean docker test unit cs fix-cs
docker: docker.lock docker: docker.lock
test: vendor test: vendor unit cs
unit: vendor
$(PHP) bin/kahlan --pattern='*.php' --reporter=verbose --persistent=false --cc=true $(PHP) bin/kahlan --pattern='*.php' --reporter=verbose --persistent=false --cc=true
cs:
$(PHP) bin/php-cs-fixer fix --dry-run
fix-cs
$(PHP) bin/php-cs-fixer fix
clean: clean:
rm -rf vendor/ rm -rf vendor/

View file

@ -1,48 +0,0 @@
#!/usr/bin/env php
<?php
$autoloaders = [];
$vendorDir = 'vendor';
if ($composerPath = realpath(getcwd() . '/composer.json')) {
$composerJson = json_decode(file_get_contents($composerPath), true);
$vendorDir = isset($composerJson['vendor-dir']) ? $composerJson['vendor-dir'] : $vendorDir;
}
if ($relative = realpath(getcwd() . "/{$vendorDir}/autoload.php")) {
$autoloaders[] = include $relative;
}
if (!$absolute = realpath(__DIR__ . '/../../../autoload.php')) {
$absolute = realpath(__DIR__ . '/../vendor/autoload.php');
}
if ($absolute && $relative !== $absolute) {
$autoloaders[] = include $absolute;
}
if (!$autoloaders) {
echo "\033[1;31mYou need to set up the project dependencies using the following commands: \033[0m" . PHP_EOL;
echo 'curl -s http://getcomposer.org/installer | php' . PHP_EOL;
echo 'php composer.phar install' . PHP_EOL;
exit(1);
}
use Kahlan\Box\Box;
use Kahlan\Suite;
use Kahlan\Matcher;
use Kahlan\Cli\Kahlan;
$box = box('kahlan', new Box());
$box->service('suite.global', function() {
return new Suite();
});
$specs = new Kahlan([
'autoloader' => reset($autoloaders),
'suite' => $box->get('suite.global')
]);
$specs->loadConfig($argv);
$specs->run();
exit($specs->status());

View file

@ -8,7 +8,8 @@
"graphp/graphviz": "^0.2" "graphp/graphviz": "^0.2"
}, },
"require-dev": { "require-dev": {
"crysalead/kahlan": "^2.5.4" "crysalead/kahlan": "^2.5.4",
"friendsofphp/php-cs-fixer": "^1.11"
}, },
"license": "MIT", "license": "MIT",
"authors": [ "authors": [

370
composer.lock generated
View file

@ -4,8 +4,8 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
"This file is @generated automatically" "This file is @generated automatically"
], ],
"hash": "466baff14323f499d4a7257cdd2805bb", "hash": "696a6b3b1a107635fb32ba218a89999b",
"content-hash": "4685875c2d24d2ba11ca3ff77293a406", "content-hash": "507a2cc5a9d6155e47cca472793790e0",
"packages": [ "packages": [
{ {
"name": "clue/graph", "name": "clue/graph",
@ -364,6 +364,372 @@
"unit test" "unit test"
], ],
"time": "2016-06-15 15:07:49" "time": "2016-06-15 15:07:49"
},
{
"name": "friendsofphp/php-cs-fixer",
"version": "v1.11.6",
"source": {
"type": "git",
"url": "https://github.com/FriendsOfPHP/PHP-CS-Fixer.git",
"reference": "41dc93abd2937a85a3889e28765231d574d2bac8"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/FriendsOfPHP/PHP-CS-Fixer/zipball/41dc93abd2937a85a3889e28765231d574d2bac8",
"reference": "41dc93abd2937a85a3889e28765231d574d2bac8",
"shasum": ""
},
"require": {
"ext-tokenizer": "*",
"php": ">=5.3.6",
"sebastian/diff": "~1.1",
"symfony/console": "~2.3|~3.0",
"symfony/event-dispatcher": "~2.1|~3.0",
"symfony/filesystem": "~2.1|~3.0",
"symfony/finder": "~2.1|~3.0",
"symfony/process": "~2.3|~3.0",
"symfony/stopwatch": "~2.5|~3.0"
},
"conflict": {
"hhvm": "<3.9"
},
"require-dev": {
"phpunit/phpunit": "^4.5|^5",
"satooshi/php-coveralls": "^0.7.1"
},
"bin": [
"php-cs-fixer"
],
"type": "application",
"autoload": {
"psr-4": {
"Symfony\\CS\\": "Symfony/CS/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Dariusz Rumiński",
"email": "dariusz.ruminski@gmail.com"
},
{
"name": "Fabien Potencier",
"email": "fabien@symfony.com"
}
],
"description": "A tool to automatically fix PHP code style",
"time": "2016-07-22 06:46:28"
},
{
"name": "sebastian/diff",
"version": "1.4.1",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/diff.git",
"reference": "13edfd8706462032c2f52b4b862974dd46b71c9e"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/13edfd8706462032c2f52b4b862974dd46b71c9e",
"reference": "13edfd8706462032c2f52b4b862974dd46b71c9e",
"shasum": ""
},
"require": {
"php": ">=5.3.3"
},
"require-dev": {
"phpunit/phpunit": "~4.8"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.4-dev"
}
},
"autoload": {
"classmap": [
"src/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"BSD-3-Clause"
],
"authors": [
{
"name": "Kore Nordmann",
"email": "mail@kore-nordmann.de"
},
{
"name": "Sebastian Bergmann",
"email": "sebastian@phpunit.de"
}
],
"description": "Diff implementation",
"homepage": "https://github.com/sebastianbergmann/diff",
"keywords": [
"diff"
],
"time": "2015-12-08 07:14:41"
},
{
"name": "symfony/event-dispatcher",
"version": "v3.1.3",
"source": {
"type": "git",
"url": "https://github.com/symfony/event-dispatcher.git",
"reference": "c0c00c80b3a69132c4e55c3e7db32b4a387615e5"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/c0c00c80b3a69132c4e55c3e7db32b4a387615e5",
"reference": "c0c00c80b3a69132c4e55c3e7db32b4a387615e5",
"shasum": ""
},
"require": {
"php": ">=5.5.9"
},
"require-dev": {
"psr/log": "~1.0",
"symfony/config": "~2.8|~3.0",
"symfony/dependency-injection": "~2.8|~3.0",
"symfony/expression-language": "~2.8|~3.0",
"symfony/stopwatch": "~2.8|~3.0"
},
"suggest": {
"symfony/dependency-injection": "",
"symfony/http-kernel": ""
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "3.1-dev"
}
},
"autoload": {
"psr-4": {
"Symfony\\Component\\EventDispatcher\\": ""
},
"exclude-from-classmap": [
"/Tests/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Fabien Potencier",
"email": "fabien@symfony.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "Symfony EventDispatcher Component",
"homepage": "https://symfony.com",
"time": "2016-07-19 10:45:57"
},
{
"name": "symfony/filesystem",
"version": "v3.1.3",
"source": {
"type": "git",
"url": "https://github.com/symfony/filesystem.git",
"reference": "bb29adceb552d202b6416ede373529338136e84f"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/filesystem/zipball/bb29adceb552d202b6416ede373529338136e84f",
"reference": "bb29adceb552d202b6416ede373529338136e84f",
"shasum": ""
},
"require": {
"php": ">=5.5.9"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "3.1-dev"
}
},
"autoload": {
"psr-4": {
"Symfony\\Component\\Filesystem\\": ""
},
"exclude-from-classmap": [
"/Tests/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Fabien Potencier",
"email": "fabien@symfony.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "Symfony Filesystem Component",
"homepage": "https://symfony.com",
"time": "2016-07-20 05:44:26"
},
{
"name": "symfony/finder",
"version": "v3.1.3",
"source": {
"type": "git",
"url": "https://github.com/symfony/finder.git",
"reference": "8201978de88a9fa0923e18601bb17f1df9c721e7"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/finder/zipball/8201978de88a9fa0923e18601bb17f1df9c721e7",
"reference": "8201978de88a9fa0923e18601bb17f1df9c721e7",
"shasum": ""
},
"require": {
"php": ">=5.5.9"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "3.1-dev"
}
},
"autoload": {
"psr-4": {
"Symfony\\Component\\Finder\\": ""
},
"exclude-from-classmap": [
"/Tests/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Fabien Potencier",
"email": "fabien@symfony.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "Symfony Finder Component",
"homepage": "https://symfony.com",
"time": "2016-06-29 05:41:56"
},
{
"name": "symfony/process",
"version": "v3.1.3",
"source": {
"type": "git",
"url": "https://github.com/symfony/process.git",
"reference": "04c2dfaae4ec56a5c677b0c69fac34637d815758"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/process/zipball/04c2dfaae4ec56a5c677b0c69fac34637d815758",
"reference": "04c2dfaae4ec56a5c677b0c69fac34637d815758",
"shasum": ""
},
"require": {
"php": ">=5.5.9"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "3.1-dev"
}
},
"autoload": {
"psr-4": {
"Symfony\\Component\\Process\\": ""
},
"exclude-from-classmap": [
"/Tests/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Fabien Potencier",
"email": "fabien@symfony.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "Symfony Process Component",
"homepage": "https://symfony.com",
"time": "2016-07-28 11:13:48"
},
{
"name": "symfony/stopwatch",
"version": "v3.1.3",
"source": {
"type": "git",
"url": "https://github.com/symfony/stopwatch.git",
"reference": "bb42806b12c5f89db4ebf64af6741afe6d8457e1"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/stopwatch/zipball/bb42806b12c5f89db4ebf64af6741afe6d8457e1",
"reference": "bb42806b12c5f89db4ebf64af6741afe6d8457e1",
"shasum": ""
},
"require": {
"php": ">=5.5.9"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "3.1-dev"
}
},
"autoload": {
"psr-4": {
"Symfony\\Component\\Stopwatch\\": ""
},
"exclude-from-classmap": [
"/Tests/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Fabien Potencier",
"email": "fabien@symfony.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "Symfony Stopwatch Component",
"homepage": "https://symfony.com",
"time": "2016-06-29 05:41:56"
} }
], ],
"aliases": [], "aliases": [],

View file

@ -2,19 +2,19 @@
use function PMSIpilot\DockerComposeViz\fetchServices; use function PMSIpilot\DockerComposeViz\fetchServices;
require_once __DIR__ . '/../vendor/autoload.php'; require_once __DIR__.'/../vendor/autoload.php';
describe('Fetching services', function() { describe('Fetching services', function () {
describe('from a version 1 configuration', function() { describe('from a version 1 configuration', function () {
it('should fetch services from top-level keys', function() { it('should fetch services from top-level keys', function () {
$configuration = ['foo' => ['image' => 'bar'], 'baz' => ['build' => '.']]; $configuration = ['foo' => ['image' => 'bar'], 'baz' => ['build' => '.']];
expect(fetchServices($configuration))->toBe($configuration); expect(fetchServices($configuration))->toBe($configuration);
}); });
}); });
describe('from a version 2 configuration', function() { describe('from a version 2 configuration', function () {
it('should fetch services from the dedicated section', function() { it('should fetch services from the dedicated section', function () {
$configuration = ['version' => 2, 'services' => ['foo' => ['image' => 'bar'], 'baz' => ['build' => '.']]]; $configuration = ['version' => 2, 'services' => ['foo' => ['image' => 'bar'], 'baz' => ['build' => '.']]];
expect(fetchServices($configuration))->toBe($configuration['services']); expect(fetchServices($configuration))->toBe($configuration['services']);

View file

@ -2,19 +2,19 @@
use function PMSIpilot\DockerComposeViz\fetchVolumes; use function PMSIpilot\DockerComposeViz\fetchVolumes;
require_once __DIR__ . '/../vendor/autoload.php'; require_once __DIR__.'/../vendor/autoload.php';
describe('Fetching volumes', function() { describe('Fetching volumes', function () {
describe('from a version 1 configuration', function() { describe('from a version 1 configuration', function () {
it('should always return an empty array', function() { it('should always return an empty array', function () {
$configuration = ['volumes' => ['image' => 'bar']]; $configuration = ['volumes' => ['image' => 'bar']];
expect(fetchVolumes($configuration))->toBe([]); expect(fetchVolumes($configuration))->toBe([]);
}); });
}); });
describe('from a version 2 configuration', function() { describe('from a version 2 configuration', function () {
it('should fetch volumes from the dedicated section', function() { it('should fetch volumes from the dedicated section', function () {
$configuration = ['version' => 2, 'volumes' => ['foo' => [], 'bar' => []]]; $configuration = ['version' => 2, 'volumes' => ['foo' => [], 'bar' => []]];
expect(fetchVolumes($configuration))->toBe($configuration['volumes']); expect(fetchVolumes($configuration))->toBe($configuration['volumes']);

View file

@ -2,21 +2,21 @@
use function PMSIpilot\DockerComposeViz\readConfiguration; use function PMSIpilot\DockerComposeViz\readConfiguration;
require_once __DIR__ . '/../vendor/autoload.php'; require_once __DIR__.'/../vendor/autoload.php';
describe('Reading configuration', function() { describe('Reading configuration', function () {
it('should check if file exists', function() { it('should check if file exists', function () {
expect(function() { readConfiguration(uniqid()); }) expect(function () { readConfiguration(uniqid()); })
->toThrow(new InvalidArgumentException()); ->toThrow(new InvalidArgumentException());
}); });
it('should parse YAML and return an array', function() { it('should parse YAML and return an array', function () {
expect(readConfiguration(__DIR__.'/fixtures/read-configuration/valid.yml')) expect(readConfiguration(__DIR__.'/fixtures/read-configuration/valid.yml'))
->toBe(['version' => 2, 'services' => ['foo' => ['image' => 'bar']]]); ->toBe(['version' => 2, 'services' => ['foo' => ['image' => 'bar']]]);
}); });
it('should report if YAML is invalid', function() { it('should report if YAML is invalid', function () {
expect(function() { readConfiguration(__DIR__.'/fixtures/read-configuration/invalid.json'); }) expect(function () { readConfiguration(__DIR__.'/fixtures/read-configuration/invalid.json'); })
->toThrow(new InvalidArgumentException()); ->toThrow(new InvalidArgumentException());
}); });
}); });

View file

@ -4,21 +4,17 @@ namespace PMSIpilot\DockerComposeViz;
use Graphp\GraphViz\GraphViz; use Graphp\GraphViz\GraphViz;
use Symfony\Component\Console; use Symfony\Component\Console;
use Symfony\Component\Yaml\Yaml; use function PMSIpilot\DockerComposeViz\readConfiguration;
use function PMSIpilot\DockerComposeViz\fetchServices;
use function PMSIpilot\DockerComposeViz\{ use function PMSIpilot\DockerComposeViz\fetchVolumes;
readConfiguration, use function PMSIpilot\DockerComposeViz\fetchNetworks;
fetchServices, use function PMSIpilot\DockerComposeViz\createGraph;
fetchVolumes, use function PMSIpilot\DockerComposeViz\applyGraphvizStyle;
fetchNetworks,
createGraph,
applyGraphvizStyle
};
$application = new Console\Application(); $application = new Console\Application();
$application->register('render') $application->register('render')
->addArgument('input-file',Console\Input\InputArgument::OPTIONAL, 'Path to a docker compose file', getcwd().DIRECTORY_SEPARATOR.'docker-compose.yml') ->addArgument('input-file', Console\Input\InputArgument::OPTIONAL, 'Path to a docker compose file', getcwd().DIRECTORY_SEPARATOR.'docker-compose.yml')
->addOption('output-file', 'o', Console\Input\InputOption::VALUE_REQUIRED, 'Path to a output file (Only for "dot" and "image" output format)') ->addOption('output-file', 'o', Console\Input\InputOption::VALUE_REQUIRED, 'Path to a output file (Only for "dot" and "image" output format)')
->addOption('output-format', 'm', Console\Input\InputOption::VALUE_REQUIRED, 'Output format (one of: "dot", "image", "display")', 'display') ->addOption('output-format', 'm', Console\Input\InputOption::VALUE_REQUIRED, 'Output format (one of: "dot", "image", "display")', 'display')
@ -28,7 +24,7 @@ $application->register('render')
->addOption('no-volumes', null, Console\Input\InputOption::VALUE_NONE, 'Do not display volumes') ->addOption('no-volumes', null, Console\Input\InputOption::VALUE_NONE, 'Do not display volumes')
->addOption('horizontal', 'r', Console\Input\InputOption::VALUE_NONE, 'Display a horizontal graph') ->addOption('horizontal', 'r', Console\Input\InputOption::VALUE_NONE, 'Display a horizontal graph')
->setCode(function(Console\Input\InputInterface $input, Console\Output\OutputInterface $output) { ->setCode(function (Console\Input\InputInterface $input, Console\Output\OutputInterface $output) {
$inputFile = $input->getArgument('input-file'); $inputFile = $input->getArgument('input-file');
$outputFormat = $input->getOption('output-format'); $outputFormat = $input->getOption('output-format');
$outputFile = $input->getOption('output-file') ?: getcwd().DIRECTORY_SEPARATOR.'docker-compose.'.($outputFormat === 'dot' ? $outputFormat : 'png'); $outputFile = $input->getOption('output-file') ?: getcwd().DIRECTORY_SEPARATOR.'docker-compose.'.($outputFormat === 'dot' ? $outputFormat : 'png');
@ -62,7 +58,7 @@ $application->register('render')
$services = array_filter( $services = array_filter(
$services, $services,
function($service) use ($onlyServices) { function ($service) use ($onlyServices) {
return in_array($service, $onlyServices); return in_array($service, $onlyServices);
}, },
ARRAY_FILTER_USE_KEY ARRAY_FILTER_USE_KEY
@ -77,7 +73,7 @@ $application->register('render')
switch ($outputFormat) { switch ($outputFormat) {
case 'dot': case 'dot':
case 'image': case 'image':
$rendererClass = 'Graphp\GraphViz\\' . ucfirst($outputFormat); $rendererClass = 'Graphp\GraphViz\\'.ucfirst($outputFormat);
$renderer = new $rendererClass(); $renderer = new $rendererClass();
file_put_contents($outputFile, $renderer->getOutput($graph)); file_put_contents($outputFile, $renderer->getOutput($graph));

View file

@ -76,7 +76,6 @@ function fetchNetworks(array $configuration) : array
return $configuration['networks'] ?? []; return $configuration['networks'] ?? [];
} }
/** /**
* @public * @public
* *
@ -338,8 +337,8 @@ function addPort(Graph $graph, int $port, string $proto = null)
/** /**
* @internal * @internal
* *
* @param Graph $graph Input graph * @param Graph $graph Input graph
* @param string $path Path * @param string $path Path
* *
* @return Vertex * @return Vertex
*/ */
@ -358,9 +357,9 @@ function addVolume(Graph $graph, string $path)
/** /**
* @internal * @internal
* *
* @param Graph $graph Input graph * @param Graph $graph Input graph
* @param string $name Name of the network * @param string $name Name of the network
* @param string $type Network type * @param string $type Network type
* *
* @return Vertex * @return Vertex
*/ */