frankfurter/lib/app.rb

60 lines
1.3 KiB
Ruby
Raw Permalink Normal View History

2026-05-21 01:38:14 -06:00
# 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