Domanda

mi sento abbastanza eccitato circa HAML e CoffeeScript e sto lavorando a mostrare tutorial su come utilizzarli in ambiente non-Rails. Così, Haml è facile da utility di utilizzo della riga di comando

haml input.haml output.html.

E, ciò che è grande, esiste un progetto (una delle tante forcelle: https: // github.com/aussiegeek/coffee-haml-filter ) al fine di fornire filtro personalizzato che i convertiti CoffeeScript in JS all'interno del file Haml. Purtroppo (o mi sto perdendo qualcosa?) Haml non permette filtri personalizzati specificando sulla riga di comando o con qualche file di configurazione.

I (non essendo un fan Ruby o nemmeno saperlo abbastanza) è riuscito a risolverlo (sulla base di alcuni qualche intelligente suggerimento su SO) con questo script di supporto: 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

Il che è abbastanza semplice, tranne richiede in principio.

Ora, le domande sono:

1) dovrei davvero usarlo, o c'è un altro modo per avere HAML on-demand per la compilazione HTML con filtri personalizzati?

2) Quali modalità orologio HAML? E 'grande e comodo. Posso, ovviamente, creare uno script di polling in python che guardare le modifiche alla directory e chiamare questo script .rb, ma sembra che una soluzione sporca.

Oltre a rispondere da Heikki , la mia soluzione segue: https://gist.github.com/759002

Sentitevi liberi di utilizzare, se lo trovate utile

È stato utile?

Soluzione

1) direi di sì. (Non ho avuto fortuna con le opzioni della riga di comando o)

2) Ho ottenuto questo esempio di lavoro con filtro sceneggiatura caffè. guardare file è fatto con fssm gemma . Si tiene traccia delle modifiche ai file ricorsivamente HAML nella cartella di input e li rende a cartella di output con estensione .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

Utilizzo:

ruby watch.rb input_folder output_folder

Altri suggerimenti

Buone notizie: C'è un nuovo filtro CoffeeScript Haml che è progettato per lavorare in modo indipendente di Rails

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

Decisamente consigliato un caffè-Haml-filtro, che non fu mai veramente mantenuta attiva.

L'opzione --require / -r dovrebbe funzionare per caricare il filtro CoffeeScript. Lo fa non nella versione più recente, ma questo è un errore; esso verrà risolto nella prossima versione.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top