从模板生成 swagger YAML?
generating swagger YAML from template?
我正在尝试找到一个解决方案,其中我有类似带有变量的 YAML 模板和带有变量定义的配置文件。我 运行 YAML 模板上的这个工具,它会为每个配置文件生成一个 YAML 文件。
老实说,我很可能没有使用正确的在线关键字进行搜索。但是,如果有人有任何建议或知道这样的工具来完成此任务,我们将不胜感激:)。
您可以使用您想要的任何模板库来执行此操作,前提是您的替换相当简单。例如,您可以使用 Ruby 标准库中的 ERB 库:
#!/usr/bin/env ruby
require 'erb'
require 'yaml'
def render(template, data)
ERB.new(template).result(binding)
end
template = ARGF.file.read
ARGF.skip
until ARGF.closed?
puts "[#{ARGF.filename}]"
data = ARGF.file.read
ARGF.skip
puts render(template, YAML.load(data))
puts
end
用法
config-1.yml
:
---
first_name: Yukihiro
last_name: Matsumoto
config-2.yml
:
---
first_name: Alan
last_name: Kay
template.yml.erb
:
person:
first_name: <%= data["first_name"] %>
last_name: <%= data["last_name"] %>
email: <%= data["first_name"].downcase %>.<%= data["last_name"].downcase %>@example.com
命令行
$ ./template_merge.rb template.yml.erb config-1.yml config-2.yml
[config-1.rb]
person:
first_name: Yukihiro
last_name: Matsumoto
email: yukihiro.matsumoto@example.com
[config-2.rb]
person:
first_name: Alan
last_name: Kay
email: alan.kay@example.com
编辑
回复:关于嵌套在顶级映射键下的数据的问题:
---
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
和 last_name
你只需要做 object["Person"]
:
until ARGF.closed?
puts "[#{ARGF.filename}]"
data = YAML.load(ARGF.file.read)
ARGF.skip
puts render(template, data["Person"])
puts
end
我正在尝试找到一个解决方案,其中我有类似带有变量的 YAML 模板和带有变量定义的配置文件。我 运行 YAML 模板上的这个工具,它会为每个配置文件生成一个 YAML 文件。
老实说,我很可能没有使用正确的在线关键字进行搜索。但是,如果有人有任何建议或知道这样的工具来完成此任务,我们将不胜感激:)。
您可以使用您想要的任何模板库来执行此操作,前提是您的替换相当简单。例如,您可以使用 Ruby 标准库中的 ERB 库:
#!/usr/bin/env ruby
require 'erb'
require 'yaml'
def render(template, data)
ERB.new(template).result(binding)
end
template = ARGF.file.read
ARGF.skip
until ARGF.closed?
puts "[#{ARGF.filename}]"
data = ARGF.file.read
ARGF.skip
puts render(template, YAML.load(data))
puts
end
用法
config-1.yml
:
---
first_name: Yukihiro
last_name: Matsumoto
config-2.yml
:
---
first_name: Alan
last_name: Kay
template.yml.erb
:
person:
first_name: <%= data["first_name"] %>
last_name: <%= data["last_name"] %>
email: <%= data["first_name"].downcase %>.<%= data["last_name"].downcase %>@example.com
命令行
$ ./template_merge.rb template.yml.erb config-1.yml config-2.yml
[config-1.rb]
person:
first_name: Yukihiro
last_name: Matsumoto
email: yukihiro.matsumoto@example.com
[config-2.rb]
person:
first_name: Alan
last_name: Kay
email: alan.kay@example.com
编辑
回复:关于嵌套在顶级映射键下的数据的问题:
---
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
和 last_name
你只需要做 object["Person"]
:
until ARGF.closed?
puts "[#{ARGF.filename}]"
data = YAML.load(ARGF.file.read)
ARGF.skip
puts render(template, data["Person"])
puts
end