我正在寻找一种定义一组占位符/合并标签或实现DSL的方法,在该DSL中,视图文件中使用的一组模板标签将被动态替换为条件变量值。
例如,模板可能如下所示:
The quick <<COLOR>> <<ANIMAL_1>> jumps over the lazy <<ANIMAL_2>>
输出结果当然是:
The quick brown fox jumps over the lazy dog
这超出了在ERB模板中使用<%= animal.color%>的能力。在这种情况下,理想情况下,用户应该能够在表单输入中使用这些标签,并且将标签别名与其他文本一起保存在数据库中。
我不确定如何引用这些标签,因此这是Mandrill文档中有关其“合并标签”功能的示例:如何使用合并标签添加动态内容
有没有现成的宝石可以做到这一点?如果没有,我将如何实施类似的措施?
这是先前答案的改编版本。给定一个字符串和一个哈希值,该expand
方法将进行迭代,sub
直到找不到更多的占位符为止。
class String
def has_placeholder?
self=~/<<\w+>>/
end
end
wordbook = {
"<<COLOR>>"=> "brown",
"<<ANIMAL_1>>"=> "fox",
"<<ANIMAL_2>>"=> "dog"
}
def expand(sentence, wordbook)
while sentence.has_placeholder? do
sentence.sub!(/(<<\w+>>)/){wordbook[$1]}
end
sentence
end
puts expand("The quick <<COLOR>> <<ANIMAL_1>> jumps over the lazy <<ANIMAL_2>>", wordbook)
#=> The quick brown fox jumps over the lazy dog
也可以使用嵌套占位符:
wordbook = {
"<<ADJECTIVE_1>>"=> "quick",
"<<ADJECTIVE_2>>"=> "lazy",
"<<COLOR>>"=> "brown",
"<<ANIMAL_1>>"=> "<<ADJECTIVE_1>> <<COLOR>> fox",
"<<ANIMAL_2>>"=> "the <<ADJECTIVE_2>> dog"
}
puts expand("The <<ANIMAL_1>> jumps over <<ANIMAL_2>>.", wordbook)
#=> The quick brown fox jumps over the lazy dog.
如果您有兴趣,链接的答案会从多种可能性中随机选择一个字符串。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句