Question Refactoring de l'outil de template EPS (et TDD)
- Broeglin Dominique
- Auteur du sujet
- Hors Ligne
- Nouveau membre
Réduire
Plus d'informations
- Messages : 10
- Remerciements reçus 0
il y a 8 ans 8 heures #22757
par Broeglin Dominique
Hello!
Je viens de mettre à jour le code de EPS ( 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 <br><br>Message édité par: dbroeglin, à: 8/12/16 22:43
Je viens de mettre à jour le code de EPS ( 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 <br><br>Message édité par: dbroeglin, à: 8/12/16 22:43
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
Réduire
Plus d'informations
- Messages : 6302
- Remerciements reçus 68
il y a 7 ans 11 mois #22765
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:Refactoring de l'outil de template EPS (et TDD)
Salut,
dbroeglin écrit:
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. \"
dbroeglin écrit:
T'es tu déjà dit à propos d'un logiciel \"il y a trop de doc \"?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.
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
Connexion ou Créer un compte pour participer à la conversation.
- Broeglin Dominique
- Auteur du sujet
- Hors Ligne
- Nouveau membre
Réduire
Plus d'informations
- Messages : 10
- Remerciements reçus 0
il y a 7 ans 11 mois #22779
par Broeglin Dominique
Réponse de Broeglin Dominique sur le sujet Re:Refactoring de l'outil de template EPS (et TDD)
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.
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.
Connexion ou Créer un compte pour participer à la conversation.
- Broeglin Dominique
- Auteur du sujet
- Hors Ligne
- Nouveau membre
Réduire
Plus d'informations
- Messages : 10
- Remerciements reçus 0
il y a 7 ans 8 mois #23385
par Broeglin Dominique
Réponse de Broeglin Dominique sur le sujet Re:Refactoring de l'outil de template EPS (et TDD)
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
github.com/dbroeglin/eps
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
Réduire
Plus d'informations
- Messages : 6302
- Remerciements reçus 68
il y a 7 ans 8 mois #23386
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:Refactoring de l'outil de template EPS (et TDD)
Merci.
A partir de ce type d'écriture :
[code:1]
<% \"Id\", \"Name\", \"Description\" | Each { -%>
[String]$<%= $_ -%>
<% } -Join \",`n\" -%>
[/code:1]
je suppose que l'on peut créer une fonction et paramétrer les données ?
[code:1]
function Param ([string[]]$Datas) {
<% $Datas | Each { -%>
[String]$<%= $_ -%>
<% } -Join \",`n\" -%>
}
@\"
function $Name {
param(
$(Param)
)
}
\"@
[/code:1]
A partir de ce type d'écriture :
[code:1]
<% \"Id\", \"Name\", \"Description\" | Each { -%>
[String]$<%= $_ -%>
<% } -Join \",`n\" -%>
[/code:1]
je suppose que l'on peut créer une fonction et paramétrer les données ?
[code:1]
function Param ([string[]]$Datas) {
<% $Datas | Each { -%>
[String]$<%= $_ -%>
<% } -Join \",`n\" -%>
}
@\"
function $Name {
param(
$(Param)
)
}
\"@
[/code:1]
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- Broeglin Dominique
- Auteur du sujet
- Hors Ligne
- Nouveau membre
Réduire
Plus d'informations
- Messages : 10
- Remerciements reçus 0
il y a 7 ans 8 mois #23387
par Broeglin Dominique
Réponse de Broeglin Dominique sur le sujet Re:Refactoring de l'outil de template EPS (et TDD)
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 <%= $Name %> {
Param(
<%- $Params | Each { -%>
[String]$<%= $_ -%>
<%- } -Join \",`n\" %>
)
}
'@
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
[code:1]
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
[/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.107 secondes
- Vous êtes ici :
- Accueil
- forum
- PowerShell
- Contributions à la communauté
- Refactoring de l'outil de template EPS (et TDD)