Использование HAML с пользовательскими фильтрами

StackOverflow https://stackoverflow.com/questions/4549598

  •  13-10-2019
  •  | 
  •  

Вопрос

Я очень взволнован Haml и CoffeeScript и работаю над учебным пособием, показывающим, как использовать их в нерезовой среде. Таким образом, у Хэмла легко использовать утилиту командной строки

haml input.haml output.html.

И, что здорово, существует проект (один из многих вилок: https://github.com/aussieek/coffee-haml-filter), направленная на предоставление пользовательского фильтра, который преобразует кофериппиз в JS внутри файлов HAML. К сожалению (или я что -то упускаю?) HAML не разрешает определять пользовательские фильтры в командной строке или с некоторым файлом конфигурации.

Я (не являюсь поклонником рубины или даже не знал его), мне удалось решить его (на основе какого -то умного предложения где -то на этом) с помощью этого помощника сценария: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

Что довольно просто, за исключением случаев в начале.

Теперь вопросы:

1) Должен ли я действительно использовать его, или есть еще один способ, способный иметь компиляцию HAML по требованию с HTML с пользовательскими фильтрами?

2) А как насчет режима часов Haml? Это здорово и удобно. Я, конечно, могу создать сценарий опроса в python Это будет наблюдать за изменением каталога и назовут это .rb Скрипт, но он выглядит как грязное решение.

В дополнение к ответу Хейкки, мое решение следует:https://gist.github.com/759002

Не стесняйтесь использовать, если вы найдете это полезным

Это было полезно?

Решение

1) Я бы сказал да. (Мне тоже не повезло с параметрами командной строки)

2) Я получил этот пример, работая с фильтром сценариев кофе. Просмотр файлов выполняется с FSSM GEM. Анкет Он отслеживает изменения в файлах HAML в папке ввода и делает их для вывода папки с расширением файла .html.

Смотреть.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

Применение:

ruby watch.rb input_folder output_folder

Другие советы

Хорошие новости: есть новый фильтр CoffeeScript Haml, который предназначен для работы независимо от рельсов!

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

Определенно рекомендуется над кофейным фильтром, который никогда не поддерживался.

А --require/-r Опция должна работать для загрузки фильтра CoffeeScript. Это не в самой последней версии, но это ошибка; Это будет исправлено в следующем выпуске.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top