Question Refactoring de l'outil de template EPS (et TDD)

Plus d'informations
il y a 3 ans 9 mois #22757 par dbroeglin
Hello!

Je viens de mettre à jour le code de EPS ( https://github.com/straightdave/eps ) un outil de templating powershell que j'utilise beaucoup. Il supporte maintenant des tags multi-lignes et le nettoyage des espaces superflus. Ce qui permet d'écrire des templates plus lisibles tout en garantissant un résultat final propre (sans sauts de lignes ou indentations intempestifs par exemples)

Laurent, suite à tes commentaires, j'ai mis à jour la documentation du README: github.com/straightdave/eps si tu as un peu de temps pour reviewer les changements je pourrai incorporer tes remarques.

Ceci dit, les exemples continuent à montrer de la génération de texte vu qu'il est orienté template généraliste. Pas spécifiquement vers la génération de code. Les exemples étant déjà assez riches, j'ai hésité à ajouter un exemple spécifique pour du code, mais si tu penses que ça apporterais un plus j'en ajoute un.

Pour info, pour certaines parties je me suis inspiré de ce document docs.puppet.com/puppet/latest/lang_template_erb.html qui je trouve explique bien le fonctionnement d'ERB (le cousin écrit en Ruby d'EPS). Les exemples là dedans sont plus orientés génération de configuration ce qui est aussi mon cas d'usage principal, du coup je suis peut-être biaisé.

Update: J'ai failli oublier, le code d'EPS est quasi complètement ré-écrit. C'est la première fois que j'écris un code aussi compliqué en PowerShell. Du coup, j'ai profité de cette occasion pour expérimenter la démarche TDD (Test Driven Development) en PowerShell avec Pester. Chaque fonctionnalité ajoutée à d'abord eu son test en erreur. La fonctionnalité étant considérée comme implémentée une fois que les tests passent. Je peux faire le retour que PowerShell et Pester se prêtent très bien à la démarche. C'était un plaisir de développer le code de cette manière :laugh:<br><br>Message édité par: dbroeglin, à: 8/12/16 22:43

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 3 ans 9 mois #22765 par Laurent Dardenne
Salut,
dbroeglin écrit:

Les exemples étant déjà assez riches, j'ai hésité à ajouter un exemple spécifique pour du code, mais si tu penses que ça apporterais un plus j'en ajoute un.

T'es tu déjà dit à propos d'un logiciel \&quot;il y a trop de doc \&quot;? :-)
Et pourquoi ne pas préciser sur la page du projet ce que tu dis ici :
\&quot;les exemples continuent à montrer de la génération de texte vu qu'il est orienté template généraliste. Pas spécifiquement vers la génération de code.\&quot;

Pour ceci :
\&quot;It is conceptually and syntactically similar to ERB for Ruby or Twig for PHP.\&quot;
Si on ne connait pas ERB, on doit d'abord rechercher ce que c'est pour comprendre le principe d'EPS.
Nous n'avons pas tous les mêmes références.


Coquille:
\&quot;EPS is available in the PowerShell Gallary. \&quot;

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 3 ans 9 mois #22779 par dbroeglin
Merci beaucoup pour le retour.

OK, bon point pour le \&quot;trop\&quot; de doc ;)

Je vais ajouter tes corrections à la première occasion. Pour le code, j'ai un bon exemple dans Forge.Module que je vais reprendre.

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 3 ans 6 mois #23385 par dbroeglin
Choses promises choses dues, j'ai ajouté une documentation plus orientée génération de code en même temps que je documentais une nouvelle fonctionnalité:

github.com/dbroeglin/eps

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 3 ans 6 mois #23386 par Laurent Dardenne
Merci.
A partir de ce type d'écriture :
[code:1]
&lt;% \&quot;Id\&quot;, \&quot;Name\&quot;, \&quot;Description\&quot; | Each { -%&gt;
[String]$&lt;%= $_ -%&gt;
&lt;% } -Join \&quot;,`n\&quot; -%&gt;
[/code:1]
je suppose que l'on peut créer une fonction et paramétrer les données ?
[code:1]
function Param ([string[]]$Datas) {

&lt;% $Datas | Each { -%&gt;
[String]$&lt;%= $_ -%&gt;
&lt;% } -Join \&quot;,`n\&quot; -%&gt;
}

@\&quot;
function $Name {
param(
$(Param)
)
}
\&quot;@
[/code:1]

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 3 ans 6 mois #23387 par dbroeglin
Oui, en partant du principe que tu utilises ma branch master (en attendant que la version 0.4.0 de EPS sorte) tu peux écrire le code suivant:

[code:1]
function New-GenFunction {
Param(
[String]$Name,
[String[]]$Params
)

$template = @'
function &lt;%= $Name %&gt; {
Param(
&lt;%- $Params | Each { -%&gt;
[String]$&lt;%= $_ -%&gt;
&lt;%- } -Join \&quot;,`n\&quot; %&gt;
)
}
'@

Invoke-EPSTemplate -Template $Template -Binding $PSBoundParameters
}

New-GenFunction -Name Add-Todo -Params ID,Label,Description,DueDate
[/code:1]

Qui génèrera:
[code:1]
function Add-Todo {
Param(
[String]$ID,
[String]$Label,
[String]$Description,
[String]$DueDate
)
}
[/code:1]

Après, si c'est pour générer des portions de code non triviales on sort de la fonction de base de EPS c'est mieux d'utiliser un générateur de code comme Forge ;-) Un exemple relativement simple:

github.com/dbroeglin/Forge.Module/blob/m...tes/Function.ps1.eps

Et un sensiblement plus compliqué (c'est un petit générateur de code que j'utilise pour le module PowerShell NetScaler):

raw.githubusercontent.com/dbroeglin/Forg.../Templates/NSGet.eps

qui est appelé depuis:

github.com/dbroeglin/Forge.Netscaler/blo...er/New-NSGet.ps1#L59

Connexion ou Créer un compte pour participer à la conversation.

Temps de génération de la page : 0.566 secondes
Propulsé par Kunena