[英]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.