Sinatra渲染一个ruby文件

时间:2011-05-11 06:53:26

标签: ruby sinatra

如何渲染ruby文件(在我的例子中返回一个pdf文档),例如:

 get "/pdf" do
  @locals = {some_locals_hash}
  headers({'Content-Type' => 'application/pdf',
    'Content-Description' => 'File Transfer',
    'Content-Transfer-Encoding' => 'binary',
    'Content-Disposition' => "attachment;filename=\"test.pdf\"",
    'Expires' => '0',
    'Pragma' => 'public'})
  ruby :test, :layout => false, :locals => @locals
 end

我知道Tilt没有ruby模板。现在,我将所有内容放在*.haml文件中,如:

 -# PDF file description
 :ruby
   pdf = Prawn::Document.new(
     ... docs settings)
     ... docs content
   end
 = pdf.render()

我用haml :template ...etc...

渲染它

事实是,我只需要这个用于语法高亮,我的编辑器没有在haml文件中正确地突出显示嵌入的ruby代码:(。所以如果它复杂的话不要打扰......

1 个答案:

答案 0 :(得分:0)

我使用Tilt模板管理

module Tilt
  class RubyTemplate < Template
    def prepare
    end

    def evaluate(scope, locals, &block)
      super(scope, locals, &block)
    end

    def precompiled_template(locals)
      data.to_str
    end
  end
  register 'rb', RubyTemplate
end

并使用辅助方法

helpers do
  def ruby(*args) 
    render(:rb, *args) 
  end
end

我不确定这是最好的方法,但至少工作正常:)