从模板生成虚张声势YAML?
我试图找到一个解决方案,其中我有一个带有变量的YAML模板和一个带有变量定义的配置文件。我在YAML模板上运行这个工具,它将为每个配置文件生成一个YAML文件从模板生成虚张声势YAML?,yaml,swagger,swagger-2.0,Yaml,Swagger,Swagger 2.0,我试图找到一个解决方案,其中我有一个带有变量的YAML模板和一个带有变量定义的配置文件。我在YAML模板上运行这个工具,它将为每个配置文件生成一个YAML文件 老实说,我很可能没有使用正确的关键字在线搜索。但是,如果有人有任何建议或知道这样一个工具来实现这一点,我们将不胜感激:)。您可以使用您想要的任何模板库来实现这一点,前提是您的替换相当简单。例如,您可以使用Ruby标准库中的库: #/usr/bin/env ruby 需要“雇员再培训局” 需要“yaml” def渲染(模板、数据) ERB.
老实说,我很可能没有使用正确的关键字在线搜索。但是,如果有人有任何建议或知道这样一个工具来实现这一点,我们将不胜感激:)。您可以使用您想要的任何模板库来实现这一点,前提是您的替换相当简单。例如,您可以使用Ruby标准库中的库:
#/usr/bin/env ruby
需要“雇员再培训局”
需要“yaml”
def渲染(模板、数据)
ERB.new(模板).result(绑定)
结束
模板=ARGF.file.read
ARGF.skip
直到ARGF关闭?
放置“[#{ARGF.filename}]”
数据=ARGF.file.read
ARGF.skip
放置渲染(模板,YAML.load(数据))
放
结束
用法
config-1.yml
:
config-2.yml
:
template.yml.erb
:
编辑
关于嵌套在顶级映射键下的数据的问题:
---
Person:
first_name: Yukihiro
last_name: Matsumoto
当您使用上述数据执行YAML.load(data)
操作时,而不是生成如下所示的哈希:
{ "first_name" => "Yukihiro",
"last_name" => "Matsumoto" }
{ "Person" => {
"first_name" => "Yukihiro",
"last_name" => "Matsumoto"
}
}
…它看起来是这样的:
{ "first_name" => "Yukihiro",
"last_name" => "Matsumoto" }
{ "Person" => {
"first_name" => "Yukihiro",
"last_name" => "Matsumoto"
}
}
因此,要获得名字和姓氏
,只需执行对象[“个人”]
:
通常情况下,您的招摇过市是使用代码注释自动生成的。你能详细解释一下你的用例吗?@Charlie在yaml文件中说,我有一个主机名,需要根据项目的当前状态进行更改。这符合使用代码注释的描述吗?如果您没有将say Swagger UI指向自动生成的代码,那么您可以执行此处建议的操作:这有帮助吗?有趣的解决方案!我将尝试一下,看看它是否能满足我的需要。:)您的示例不起作用,我一直在尝试将其拼凑在一起,但不断出现以下错误:(erb):2:inrender:main:Object(NameError)的未定义局部变量或方法from/System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/Ruby/2.0.0/erb.rb:849:ineval'from/System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/Ruby/2.0.0/erb.rb:849:in
result'from./yamGen.rb:6:inrender'from./yamGen.rb:21:in
“对不起,我应该有数据[“名字”]
而不是名字
。我已经更新了我的答案。谢谢你,乔丹!快速提问,如果数据是迭代的,我将如何访问它。例如,若配置文件是“人物:名字:yukihiro姓氏:matsumoto”,那个么“迭代”是什么意思还不清楚。你们能编辑你们的问题来包含一个YAML的例子吗?
{ "first_name" => "Yukihiro",
"last_name" => "Matsumoto" }
{ "Person" => {
"first_name" => "Yukihiro",
"last_name" => "Matsumoto"
}
}
until ARGF.closed?
puts "[#{ARGF.filename}]"
data = YAML.load(ARGF.file.read)
ARGF.skip
puts render(template, data["Person"])
puts
end