通过'要求' haml guard

时间:2016-08-02 12:21:44

标签: ruby haml guard

手动将haml编译为具有外部文件要求的html,就像这样执行

haml --require .\stuff.rb  --require .\const.rb .\pages\exit.haml .\pages\exit.html

然而,我想切换到haml guard。不幸的是,我无法找到正确的标志来传递它的工作。我需要的是:

guard :haml, haml_options: {require: './stuff.rb ./const.rb'}  do
  watch(/^.+(\.haml)$/)
end

结果:

  

14:19:19 - 错误 - 页面/ exit.haml的HAML编译失败!   [#]错误:未定义的方法`html_safe'为零:NilClass

表明既不包括方法也不包括常量。

有什么想法吗?

编辑: 我使用Ruby 2.3.1p112(2016-04-26修订版54768)[x64-mingw32](Win10),Haml 4.0.7。

最小化的例子:

test.haml

!!!
%html
    %header
    %body
        %p
            =$BT_OK.html_safe

const.rb

$BT_OK      = "
".html_safe

helpers.rb

class String
  def html_safe?
    defined?(@html_safe) && @html_safe
  end

  def html_safe
    @html_safe = true
    self
  end
end

require 'haml/helpers/xss_mods'
module Haml::Helpers
  include Haml::Helpers::XssMods
end

使用命令行haml .\debug\test.haml .\debug\test.html -r .\const.rb -r .\helpers.rb

输出
<!DOCTYPE html>
<html>
  <header></header>
  <body>
    <p>
      &#13;
    </p>
  </body>
</html>

使用亚马逊解决方案时出错:

08:02:06 - ERROR - Invalid Guardfile, original error is:
> [#]
> [#] undefined method `html_escape' for module `Haml::Helpers',
> [#] backtrace:
> [#]   (dsl)> C
> [#]   (dsl)> C
> [#]   (dsl)> C
> [#]   (dsl)> C

1 个答案:

答案 0 :(得分:1)

guard-haml runs Haml “in process”,因此要在您的Haml脚本中提供这些文件,您需要在Guardfile中要求这些文件。你也需要先要求Haml,因为你的助手会参考Haml的模块中的一些:

require 'haml'
require './helpers'
require './const'
guard :haml do
  watch(/^.+(\.haml)$/)
end