Frage

Ich bin ziemlich aufgeregt über Haml und CoffeeScript und arbeite an Tutorial und zeigt, wie man sie in Nicht-Rails-Umgebung verwendet. Haml hat also einfach zu verwendende Befehlszeilen-Dienstprogramme

haml input.haml output.html.

Und was großartig ist, gibt es ein Projekt (eine von vielen Gabeln: https://github.com/aussiegeek/coffee-haml-filter) zielte darauf ab, benutzerdefinierten Filter bereitzustellen, der Coffeescript in JS innerhalb von HAML -Dateien umwandelt. Leider (oder fehlt mir etwas?) Erlaubt Haml nicht zu, benutzerdefinierte Filter in der Befehlszeile oder mit einer Konfigurationsdatei anzugeben.

Ich habe es geschafft, ihn (basierend auf einem cleveren Vorschlag irgendwo auf so) mit diesem Helfer -Skript zu lösen: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

Das ist ziemlich einfach, außer dass es am Anfang erforderlich ist.

Jetzt sind die Fragen:

1) Sollte ich es wirklich verwenden oder gibt es eine andere Möglichkeit, mit Haml-HTML-Kompilierung mit benutzerdefinierten Filtern aufzuhalten?

2) Was ist mit dem Haml Watch -Modus? Es ist großartig und bequem. Ich kann natürlich ein Umfragskript in erstellen python Das wird das Verzeichnis ändert und dies nennt .rb Skript, aber es sieht aus wie eine schmutzige Lösung.

Zusätzlich zur Antwort von Heikki, meine Lösung folgt:https://gist.github.com/759002

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

War es hilfreich?

Lösung

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

2) Ich habe dieses Beispiel mit dem Kaffee -Skriptfilter gearbeitet. Dateibeobachtung erfolgt mit mit FSSM -Edelstein. Es verfolgt Änderungen an HAML -Dateien rekursiv im Eingabeordner und rendert sie in den Ausgabeordner mit .html -Dateierweiterung.

Uhr.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

Verwendungszweck:

ruby watch.rb input_folder output_folder

Andere Tipps

Gute Nachrichten: Es gibt einen neuen CoffeeScript -Haml -Filter, der unabhängig von Rails arbeiten soll!

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

Auf jeden Fall für den Kaffee-Haml-Filter empfohlen, was nie wirklich aktiv gepflegt wurde.

Das --require/-r Die Option sollte zum Laden des CoffeeScript -Filters funktionieren. Es ist nicht in der neuesten Version, aber das ist ein Fehler. Es wird in der nächsten Veröffentlichung festgelegt.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top