开发者

How to access global Sinatra configs inside custom Liquid template tags?

I'm trying to create a custom Liquid template tag like this:

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)

The above code is in an exter开发者_C百科nal file location at : (project_dir)/tags/scriptloader.rb

This file is being included in the app.rb startup file.

The problem though is that the settings variable is empty, even after adding the configs in the app.rb file using the set method.

The response when calling {% script 'myfile' %} in my templates:

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

Any ideas or guidance would be greatly appreciated!

Thanks!


Ok, so I've managed to work around the issue.

I created a config object in app.rb that loads the configs from a file, iterates over them and calls the set() method for each. This also stores the config key=>value sets in a class constant hash.

I can access the values like this:

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
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜