在Ruby中为动态变量创建占位符标签

赤井

我正在寻找一种定义一组占位符/合并标签或实现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文档中有关其“合并标签”功能的示例:如何使用合并标签添加动态内容

有没有现成的宝石可以做到这一点?如果没有,我将如何实施类似的措施?

埃里克·杜米尼尔(Eric Duminil)

这是先前答案的改编版本给定一个字符串和一个哈希值,该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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在 rails 项目中为 ruby 对象创建动态变量

来自分类Dev

Ruby中的动态变量名称

来自分类Dev

在Typescript中创建动态变量引用

来自分类Dev

在类中动态创建静态变量

来自分类Dev

从类内部为类创建动态变量

来自分类Dev

Ruby on Rails的管理工具中的动态变量

来自分类Dev

使用钩子在Reactjs中创建动态占位符

来自分类Dev

在foreach中为xpath插入动态变量

来自分类Dev

将方法中的动态变量设置为 Oninit

来自分类Dev

在$ .post中创建动态变量分配-JQuery

来自分类Dev

如何在Tcl中创建动态变量名称

来自分类Dev

如何在JS中创建动态变量?

来自分类Dev

在 JS 中创建动态变量名

来自分类Dev

JS中的动态变量

来自分类Dev

列表中的动态变量

来自分类Dev

Looper中的动态变量

来自分类Dev

外壳中的动态变量

来自分类Dev

C中的动态变量

来自分类Dev

SCSS 中的动态变量

来自分类Dev

UIAlertView中变量的占位符?

来自分类Dev

LibreOffice Writer 为标题标签定义和使用动态变量

来自分类Dev

创建动态变量名称

来自分类Dev

动态创建静态变量(枚举黑客)

来自分类Dev

如何使用jQuery创建动态变量?

来自分类Dev

用php创建并获取动态变量

来自分类Dev

使用动态变量创建SSIS包

来自分类Dev

JavaScript如何创建动态变量

来自分类Dev

如何使用jQuery创建动态变量?

来自分类Dev

创建动态变量名称