2009-07-30 6 views
2

J'utilise Haml de la ligne de commande pour faire une transformation de base d'un fichier .haml à .html, comme ceci:Passer des options à Haml sur la ligne de commande

> haml input.haml output.html 

La chose est, ce produit guillemets simples autour des attributs dans le code HTML résultant. Alors, comment passer l'option :attr_wrapper => '"' à partir de la ligne de commande?

Sinon, puis-je simplement définir globalement :attr_wrapper à un guillemet double?

Répondre

4

Ce que j'ai fini par faire est d'ajouter ce qui suit à haml/exec.rb à ~ ligne 302

opts.on('-q', '--double-quote-attribs', 
      'Set attribute wrapper to double-quotes (default is single).') do 
     @options[:for_engine][:attr_wrapper] = '"' 
    end 

Cela ajoute une option dédiée à faire ce que je dois.

Je ne suis pas certain de la raison d'être de l'utilisation de guillemets simples par défaut; les doubles guillemets feraient un défaut plus sensible, j'aurais pensé. Cela dit, ils sont parfaitement valables.

J'ai présenté cette mise à jour comme patch et il sera inclus dans la version 2.4

+0

Hampton Catlin aime juste des guillemets simples car ils sont moins intrusives ou quelque chose comme ça. Presque tout le monde est d'accord avec vous. – Chuck

1

Je ne connais pas un moyen de spécifier cette option au client de ligne de commande standard. Vous pouvez globalement patcher la valeur par défaut en changeant haml/ligne engine.rb 73 (en Haml 2.2.2) pour lire

:attr_wrapper => '"', 

C'est pour Haml 2.2.2. C'est différent dans les versions précédentes. Si vous utilisez encore l'un d'entre eux, vous pouvez simplement faire une recherche de texte pour ": attr_wrapper =>" et il trouvera la ligne correcte.

4

Je ne sais pas d'une façon de le transmettre comme argument, mais HAML est facile à utiliser par programme:

require 'haml' 

template = ARGV.length > 0 ? File.read(ARGV.shift) : STDIN.read 
haml_engine = Haml::Engine.new(template, :attr_wrapper => '"') 
file = ARGV.length > 0 ? File.open(ARGV.shift, 'w') : STDOUT 
file.write(haml_engine.render) 
file.close 

Rien joli, mais il va ouvrir le premier argument donné (ou si STDIN aucun argument n'est donné), et passez la sortie rendue au second argument (ou STDOUT de non donné).

Questions connexes