2011-09-29 39 views
0

我試圖創建一個自定義模板液標籤是這樣的:/tags/scriptloader.rb如何訪問全球Sinatra配置裏面自定義液體模板標籤?

這個文件是(PROJECT_DIR):

class ScriptLoader < Liquid::Tag  
    def initialize(tag_name, filename, tokens) 
     super 
     @file = filename 
    end 
    def render(context) 
     settings.cdn_url << 'script/' << @file 
    end  
end 

Liquid::Template.register_tag('script', ScriptLoader) 

上面的代碼是在一個外部文件位置在被包含在app.rb啓動文件中。

雖然問題是設置變量爲空,即使在使用set方法添加app.rb文件中的配置之後。

響應調用我的模板{%腳本 'MYFILE' %}時:

Liquid error: undefined method `cdn_url' for Sinatra::Application:Class 

任何意見或指導意見,將不勝感激!

謝謝!

回答

0

好吧,所以我設法解決了這個問題。

我在app.rb中創建了一個配置對象,它從文件加載配置文件,對它們進行迭代併爲每個文件調用set()方法。這也將配置密鑰=>值集存儲在類常量哈希中。

我可以訪問值,像這樣:

class ScriptLoader < Liquid::Tag  
    def initialize(tag_name, filename, tokens) 
     super 
     @file = filename 
    end 
    def render(context) 
     MyObject::CONFIG[:cdn_url] << 'script/' << @file 
    end  
end