繁体   English   中英

YAML中的Ruby可执行文件

[英]Ruby executable in YAML

我有一个示例yaml文件( abc.yaml ),如下所示:

entity1:
  condition: "created_at >= #{Date.today - 3.months}"

我想从Ruby中的YAML中读取此条件,如下所示:

"created_at >= 2015-03-02"

但是当我这样做

YAML.load_file('abc.yaml')["entity1"]["condition"]

我得到:

"created_at >= \#{Date.today - 3.months}"

请让我知道如何解决此问题。

比较安全的选择是只转换预定格式的已知数据。 或者使用诸如settingslogic https://github.com/settingslogic/settingslogic之类的很酷的东西。 它使用ERB风格的格式加载设置,因此您可以安全地进行内置。

例如:

defaults: &defaults
  cool:
    saweet: nested settings
  neat_setting: 24
  awesome_setting: <%= "Did you know 5 + 5 = #{5 + 5}?" %>

仅当您绝对确定没有人可以更改yaml文件以注入有害内容时才执行此操作:

condition = YAML.load_file('abc.yaml')["entity1"]["condition"]
condition = eval "\"#{condition}\""

像这样使用

entity1:
  condition: "created_at >= <%= Date.today - 3.months %>"

并且在读取时像

abc = YAML.load(ERB.new(File.read("file_path")).result)
abc["entity1"]["condition"]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM