Было бы здорово иметь тег, который можно вызывать с литералами и переменными, такими как
{% assign v = 'art' %}
{% link_to_article v %}
или
{% link_to_article 'art' %}
или
{% link_to_article "art" %}
а также конечно
{% link_to_article include.article %}
Для того, чтобы я предложил вспомогательную функцию
def get_value(context, expression)
if (expression[0]=='"' and expression[-1]=='"') or (expression[0]=="'" and expression[-1]=="'")
# it is a literal
return expression[1..-2]
else
# it is a variable
lookup_path = expression.split('.')
result = context
puts lookup_path
lookup_path.each do |variable|
result = result[variable] if result
end
return result
end
end
А в рендере просто вызовите вспомогательную функцию, чтобы получить значение литерала или переменной.
def render(context)
v = get_value(context, @markup.strip)
end
К вашему сведению, инициализатор будет выглядеть так:
def initialize(tag_name, markup, tokens)
@markup = markup
super
end