require "rack/app" require "yaml" require "erb" module Mountapi class DocRackApp < Rack::App spec_by_version = Mountapi.config.open_api_spec.map do |spec| version = YAML.safe_load(spec, symbolize_names: true).fetch(:info).fetch(:version) [version, spec] end doc_template = ERB.new(File.read(File.expand_path("templates/redoc.html.erb", __dir__)), trim_mode: "-") list_template = ERB.new(File.read(File.expand_path("templates/list.html.erb", __dir__)), trim_mode: "-") get "/" do list_template.result_with_hash(spec_by_version: spec_by_version, original_fullpath: request.env["ORIGINAL_FULLPATH"]) end spec_by_version.each do |version, spec| get "/#{version}.yaml" do spec end get "/#{version}" do doc_template.result_with_hash(open_api_url: "./#{version}.yaml") end end end end