60 lines
1.3 KiB
Ruby
60 lines
1.3 KiB
Ruby
|
|
# frozen_string_literal: true
|
||
|
|
|
||
|
|
require "rack/cors"
|
||
|
|
require "roda"
|
||
|
|
|
||
|
|
require "no_store_on_error"
|
||
|
|
require "versions/v1"
|
||
|
|
require "versions/v2"
|
||
|
|
|
||
|
|
class App < Roda
|
||
|
|
use NoStoreOnError
|
||
|
|
use Rack::Cors do
|
||
|
|
allow do
|
||
|
|
origins "*"
|
||
|
|
resource "*", headers: :any, methods: [:get, :options]
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
opts[:root] = File.expand_path("..", __FILE__)
|
||
|
|
plugin :static,
|
||
|
|
{
|
||
|
|
"/favicon.ico" => "favicon.ico",
|
||
|
|
"/robots.txt" => "robots.txt",
|
||
|
|
"/v1/openapi.json" => "v1/openapi.json",
|
||
|
|
"/v2/openapi.json" => "v2/openapi.json",
|
||
|
|
},
|
||
|
|
header_rules: [
|
||
|
|
[:all, { "cache-control" => "public, max-age=86400" }],
|
||
|
|
]
|
||
|
|
plugin :json
|
||
|
|
plugin :caching
|
||
|
|
plugin :not_found do
|
||
|
|
{ status: 404, message: "not found" }
|
||
|
|
end
|
||
|
|
|
||
|
|
route do |r|
|
||
|
|
r.root do
|
||
|
|
response.cache_control(public: true, max_age: 86400)
|
||
|
|
|
||
|
|
{
|
||
|
|
name: "Frankfurter",
|
||
|
|
versions: {
|
||
|
|
v1: { base: "/v1", openapi: "/v1/openapi.json", status: "frozen" },
|
||
|
|
v2: { base: "/v2", openapi: "/v2/openapi.json", status: "current" },
|
||
|
|
},
|
||
|
|
docs: "https://frankfurter.dev",
|
||
|
|
source: "https://github.com/lineofflight/frankfurter",
|
||
|
|
}
|
||
|
|
end
|
||
|
|
|
||
|
|
r.on("v1") do
|
||
|
|
r.run(Versions::V1)
|
||
|
|
end
|
||
|
|
|
||
|
|
r.on("v2") do
|
||
|
|
r.run(Versions::V2)
|
||
|
|
end
|
||
|
|
end
|
||
|
|
end
|