Flash info

"Les IT Pros sont en train de migrer rapidement car PowerShell est plus facile et plus puissant que VBScript."

Microsoft Scripting Guys

 
Accueil arrow Forum

Bienvenue sur le forum PowerShell-Scripting.com

 
dbroeglin
Utilisateur

PowerShelleur Débutant
Messages: 10
graphgraph
Karma: 2  
Refactoring de l'outil de template EPS (et TDD) - 8/12/16 22:38 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: https://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 https://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

Message édité par: dbroeglin, à: 8/12/16 22:43
  | | L'administrateur a désactivé l'accés public en écriture.
Laurent Dardenne
Utilisateur

PowerShelleur Platinum
Messages: 5239
graph
Karma: 191  
Re:Refactoring de l'outil de template EPS (et TDD) - 12/12/16 10:25 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 "il y a trop de doc "?
Et pourquoi ne pas préciser sur la page du projet ce que tu dis ici :
"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."

Pour ceci :
"It is conceptually and syntactically similar to ERB for Ruby or Twig for PHP."
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:
"EPS is available in the PowerShell Gallary. "
Tutoriels PowerShell
  | | L'administrateur a désactivé l'accés public en écriture.
dbroeglin
Utilisateur

PowerShelleur Débutant
Messages: 10
graphgraph
Karma: 2  
Re:Refactoring de l'outil de template EPS (et TDD) - 13/12/16 00:45 Merci beaucoup pour le retour.

OK, bon point pour le "trop" 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.
  | | L'administrateur a désactivé l'accés public en écriture.
dbroeglin
Utilisateur

PowerShelleur Débutant
Messages: 10
graphgraph
Karma: 2  
Re:Refactoring de l'outil de template EPS (et TDD) - 26/03/17 00:08 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é:

https://github.com/dbroeglin/eps
  | | L'administrateur a désactivé l'accés public en écriture.
Laurent Dardenne
Utilisateur

PowerShelleur Platinum
Messages: 5239
graph
Karma: 191  
Re:Refactoring de l'outil de template EPS (et TDD) - 26/03/17 11:04 Merci.
A partir de ce type d'écriture :
Code:

  <% "Id""Name""Description" Each { -%> [String]$<%= $_ -%> <% } -Join ",`n" -%>


je suppose que l'on peut créer une fonction et paramétrer les données ?
Code:

  function Param ([string[]]$Datas) {  <% $Datas Each { -%> [String]$<%= $_ -%> <% } -Join ",`n" -%> } @" function $Name {  param(  $(Param)  ) } "@

Tutoriels PowerShell
  | | L'administrateur a désactivé l'accés public en écriture.
dbroeglin
Utilisateur

PowerShelleur Débutant
Messages: 10
graphgraph
Karma: 2  
Re:Refactoring de l'outil de template EPS (et TDD) - 26/03/17 12:13 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:

  function New-GenFunction {     Param(         [String]$Name,         [String[]]$Params     )     $template = @' function <%= $Name %> {     Param(         <%- $Params | Each { -%>         [String]$<%= $_ -%>         <%- } -Join ",`n" %>     ) }     '@     Invoke-EPSTemplate -Template $Template -Binding $PSBoundParameters } New-GenFunction -Name Add-Todo -Params ID,Label,Description,DueDate



Qui génèrera:
Code:

  function Add-Todo {     Param(         [String]$ID,         [String]$Label,         [String]$Description,         [String]$DueDate     ) }



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:

https://github.com/dbroeglin/Forge.Module/blob/master/Forge.Module/Templates/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):

https://raw.githubusercontent.com/dbroeglin/Forge.Netscaler/master/Forge.Netscaler/Templates/ NSGet.eps

qui est appelé depuis:

https://github.com/dbroeglin/Forge.Netscaler/blob/master/Forge.Netscaler/New-NSGet.ps1#L59
  | | L'administrateur a désactivé l'accés public en écriture.
© 2017 PowerShell-Scripting.com