2010-12-28 8 views
2

Ich bin ziemlich aufgeregt über HAML und CoffeeScript und arbeite an einer Anleitung, die zeigt, wie man sie in einer Nicht-Rails-Umgebung verwendet. So hat haml einfaches BefehlszeilenprogrammVerwenden von HAML mit benutzerdefinierten Filtern

haml input.haml output.html. 

Und was groß ist, gibt es ein Projekt (eines von vielen Gabeln: https://github.com/aussiegeek/coffee-haml-filter) zu verwenden, sollten auf der Bereitstellung benutzerdefinierte Filter, Coffeescript in JS konvertiert innerhalb von HAML Dateien. Leider (oder fehlt mir etwas?) Erlaubt haml nicht benutzerdefinierte Filter in der Befehlszeile oder mit einer Konfigurationsdatei zu spezifizieren.

I (kein Ruby-Fan oder sogar wissen, dass es genug ist) geschafft, es zu lösen (basierend auf einigen cleveren Vorschlag irgendwo auf SO) mit dieser Hilfsskript: 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 

die recht einfach ist, außer benötigt am Anfang.

Nun werden die Fragen sind:

1) sollte ich es wirklich verwenden, oder gibt es eine andere Art und Weise on-demand HAML zu HTML Zusammenstellung mit benutzerdefinierten Filtern zu haben?

2) Was ist mit HAML Watch-Modus? Es ist großartig und praktisch. Ich kann natürlich ein Abfrageskript in python erstellen, das die Verzeichnisänderungen beobachten und dieses .rb Skript benennen wird, aber es sieht wie eine schmutzige Lösung aus.

Neben Heikki antworten, meine Lösung folgt: https://gist.github.com/759002

Fühlen Sie sich frei zu verwenden, wenn Sie es nützlich finden ja

Antwort

0

1) würde ich sagen. (Ich hatte auch kein Glück mit Befehlszeilenoptionen)

2) Ich habe dieses Beispiel mit Kaffee-Skript-Filter arbeiten. Die Dateiüberwachung erfolgt mit . Er verfolgt Änderungen an HAML-Dateien rekursiv im Eingabeordner und rendert sie als Ausgabeordner mit der Dateierweiterung .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 

Verbrauch:

ruby watch.rb input_folder output_folder 
+0

Ich lese haml - helfen, natürlich%) 1) versuchte dies bereits - kein Glück. Beachten Sie auch die Anzahl der benötigten Module (z. B. wird ActiveSupport für leere benötigt?Funktion) 2) in Python ist es auch ziemlich einfach, obwohl sieht aus wie bereits implementiert Feature reimplementieren, und hat einige Probleme mit warten, bis die Kompilierung abgeschlossen ist, bevor der Watcher – Guard

+0

die Antwort – Heikki

+0

Danke für Ihre Antwort abgeschlossen. Ich akzeptiere es, obwohl ich es bereits mit Python-Polling-Skript gemacht habe, das auch das Zielverzeichnis versteht. – Guard

1

Die --require/-r Option funktionieren sollte den Filter zum Laden Coffeescript. Es ist nicht in der neuesten Version, aber das ist ein Fehler; Es wird in der nächsten Version behoben werden.

+0

danke, dass Sie mich wissen lassen! Wird es auch erfordern Rubygems/Activesupport "erforderlich" sein? – Guard

+1

Wenn Sie '-r Rubygems' verwenden, wird es. Es sieht jedoch so aus, als ob das CoffeeScript-Filterpaket nicht wirklich alle Abhängigkeiten (wie ActiveSupport) erfordert, also müssen Sie es manuell tun. Wirklich, 'Kaffee-haml-Filter 'scheint überall ein ziemlich schlechtes Paket zu sein ... Ich würde vorschlagen, einen anderen zu finden oder zu schreiben. –

+0

danke für info, wieder. Eigentlich würde ich, wenn ich Ruby Boy bin, aber ich bin ein Pythonist, obwohl ich aufgeregt bin, wenn ich daran denke, HAML + SCSS + CoffeeScript in jeder Umgebung anstelle von HTML + CSS + JS zu verwenden. Derzeit arbeite ich an Tutorial, wie man es in Django Projekt – Guard

3

Gute Nachrichten: Es gibt einen neuen CoffeeScript Haml Filter, der entwickelt wurde, um unabhängig von Rails zu arbeiten!

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

Definitiv über Kaffee-haml-Filter empfohlen, die nie wirklich aktiv gehalten wurde.

Verwandte Themen