从模板生成 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_namelast_name 你只需要做 object["Person"]:

until ARGF.closed?
  puts "[#{ARGF.filename}]"
  data = YAML.load(ARGF.file.read)
  ARGF.skip
  puts render(template, data["Person"])
  puts
end