Question

Je me sens très enthousiasmé par HAML et CoffeeScript et je travaille à montrer tutoriel comment les utiliser dans un environnement non-Rails. Ainsi, haml a utilitaire facile à utiliser la ligne de commande

haml input.haml output.html.

Et, ce qui est grand, il existe un projet (l'une des nombreuses fourches: https: // github.com/aussiegeek/coffee-haml-filter ) visant à fournir un filtre personnalisé qui convertit en CoffeeScript JS à l'intérieur des fichiers hAML. Malheureusement (ou suis-je manque quelque chose?) Haml ne permet pas spécifier des filtres personnalisés sur la ligne de commande ou avec un certain fichier de configuration.

I (ne pas être fan Ruby ou même le savoir assez) a réussi à le résoudre (basé sur une part de suggestion intelligente sur le SO) avec ce script d'aide: haml.rb

require 'rubygems'
require 'active_support/core_ext/object/blank'
require 'haml'
require 'haml/filters/coffee'

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

Ce qui est assez simple, sauf demande au début.

Maintenant, les questions sont:

1) dois-je utiliser vraiment, ou est-il une autre façon d'avoir sur la demande HAML de compilation HTML avec des filtres personnalisés?

2) Qu'en est-il en mode veille HAML? Il est grand et pratique. Je peux, bien sûr, créer un script de vote python qui regarder les changements de répertoire et appeler ce script .rb, mais il ressemble à une solution sale.

En plus de répondre par Heikki , ma solution suivante: https://gist.github.com/759002

Ne hésitez pas à utiliser, si vous le trouvez utile

Était-ce utile?

La solution

1) Je dirais que oui. (Je n'ai pas eu la chance avec des options de ligne de commande soit)

2) Je suis arrivé cet exemple de travail avec filtre script café. l'observation des fichiers se fait avec FSSM petit bijou. Il suit les modifications des fichiers HAML récursive dans le dossier d'entrée et les rend dans le dossier de sortie avec l'extension .html.

watch.rb:

require 'rubygems'
require 'fssm'
require 'haml'
require 'coffee-haml-filter'
require 'active_support/core_ext/object/blank'

def render(input_dir, output_dir, relative)
  input_path = File.join(input_dir, relative)
  output_path = File.join(output_dir, relative).gsub(/\.haml$/, ".html")
  haml_engine = Haml::Engine.new(File.read(input_path))
  puts "Rendering #{input_path} -> #{output_path}"
  FileUtils.makedirs(File.dirname(output_path))
  File.open(output_path, 'w') do |file|
    file.write(haml_engine.render)
  end
end

input_dir = File.expand_path(ARGV.length > 0 ? ARGV.shift : '.')
output_dir = File.expand_path(ARGV.length > 0 ? ARGV.shift : input_dir)

puts "Input folder:  '#{input_dir}'"
puts "Output folder: '#{output_dir}'"

FSSM.monitor(input_dir, '**/*.haml') do
  create {|base, relative| render(input_dir, output_dir, relative) }
  update {|base, relative| render(input_dir, output_dir, relative) }
  delete {|base, relative|
    output_path = File.join(output_dir, relative).gsub(/\.haml$/, ".html")
    puts "Deleting #{output_path}"
    File.delete(output_path)
  }
end

Utilisation:

ruby watch.rb input_folder output_folder

Autres conseils

Bonnes nouvelles: Il y a un nouveau filtre CoffeeScript Haml qui est conçu pour fonctionner indépendamment des Rails

https://github.com/paulnicholson/coffee-filter

Définitivement recommandé un café-haml-filtre, qui n'a jamais été vraiment maintenu activement.

L'option --require / -r devrait fonctionner pour charger le filtre CoffeeScript. Il n'a pas dans la version la plus récente, mais qui est un bug; il sera corrigé dans la prochaine version.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top