Как получить доступ к глобальным конфигам Sinatra внутри пользовательских тегов шаблонов Liquid? - PullRequest
0 голосов
/ 29 сентября 2011

Я пытаюсь создать собственный тег шаблона Liquid, например:

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)

Приведенный выше код находится во внешнем файле по адресу: (project_dir) /tags/scriptloader.rb

Этот файл включен в файл запуска app.rb.

Проблема, однако, в том, что переменная settings пуста даже после добавления конфигов в файл app.rb с помощью метода set.

Ответ при вызове {% script 'myfile'%} в моих шаблонах:

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

Любые идеи или рекомендации будут с благодарностью!

Спасибо!

1 Ответ

0 голосов
/ 30 сентября 2011

Хорошо, поэтому мне удалось обойти эту проблему.

Я создал объект config в 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
...