J’avais montré dans le précédent Post, une fonction qui permet de créer des histogrammes.
J’ai décidé de la publier sous Packagist. Je n’avais jamais fais. Je vous propose de suivre mon cheminement
Je mets au propre le fichier
J’ajoute le composer.json
j’ajoute les tests unitaires
Je crée le dépôt sur Github
J’enregistre le dépôt sur Packagist
Industrialisation
Nous sommes partis du code suivant.
1234567891011121314151617181920212223242526272829
functionspark($array){$bars=array('▁','▂','▃','▄','▅','▆','▇','█');$divide=max($array);if($divide==0){$divide=1;}$countBars=count($bars)-1;$out='';foreach($arrayas$tick)$out.=$bars[round(($tick/$divide)*$countBars)];echo$out;}// si je n'ai aucun argument ..if(count($argv)==0){$str='';// recupère le flux d'entréewhile(!feof(STDIN)){$str.=fgets(STDIN);}// explode laisse la derniere ligne vide.// d'ou le array_filterspark(array_filter(explode("\n",$str),'strlen'));return0;}$iDontCare=array_shift($argv);spark($argv);return0;
Je vais découper cela en plusieurs fichiers et répertoires.
#!/usr/bin/env php<?phprequire_once__DIR__.'/../vendor/autoload.php';// Autoload files using Composer autoloaduseSpark\Spark;$iDontCare=array_shift($argv);if(count($argv)==0){$str='';while(!feof(STDIN)){$str.=fgets(STDIN);}echoSpark::spark(array_filter(explode("\n",$str),'strlen'));return0;}echoSpark::spark($argv);return0;
Le Composer.json
Pour publier sur Packagist il faut un composer.json
C’est plutôt simple en fait. Il suffit de lancer la commande composer init. Tout se fait de manière interactive.
à la fin j’obtiens.
1234567891011121314151617181920212223242526
{"name":"mcamuzat/spark","description":"histogram in command line. Clone of holman/spark","require-dev":{"phpunit/phpunit":"~4.0","squizlabs/php_codesniffer":"2.*"},"license":"MIT","authors":[{"name":"Marc Camuzat","email":"marc.camuzat@gmail.com"}],"minimum-stability":"dev","require":{},"autoload":{"psr-0":{"Spark":"src/"}},"config":{"bin-dir":"bin"},"bin":["bin/spark"]}
Je crée le Namespace et j’ajoute que j’ai un fichier à marquer comme exécutable de le répertoire bin/spark. Je n’ai aucune dépendance.
Ajoutons les tests.
Il faut un minimum de tests.
Pour avoir des tests il faut 3 fichiers
Un phpunit.xml.dist
Un bootstrap.php pour qui se borne à appeler l’autoload de composer
Enfin un fichier de test
Et installer PHPUnit (qui est déjà dans mon composer.json)
Le phpunit.xml.dist
12345678910111213141516171819202122232425
<?xml version="1.0" encoding="UTF-8"?><phpunitbackupGlobals="false"backupStaticAttributes="false"colors="true"convertErrorsToExceptions="true"convertNoticesToExceptions="true"convertWarningsToExceptions="true"processIsolation="false"stopOnFailure="false"syntaxCheck="false"bootstrap="tests/bootstrap.php"><testsuites><testsuitename="Spark Test Suite"><directory>./tests/</directory></testsuite></testsuites><filter><whitelist><directory>./src/</directory></whitelist></filter></phpunit>
On appelle le bootstrap.php qui fait venir l’autoloader