如何获取Sinatra应用程序中使用的所有路由的列表?

tes*_*ter 16 routes sinatra

说我有:

require 'sinatra'

get '/' { "hi" }
get '/a' { "a" }
get '/b' { "b" }
Run Code Online (Sandbox Code Playgroud)

在我的Sinatra应用程序中是否有任何简单方法获取所有已定义路径的列表?

我调查过Sinatra::Base.routes,但似乎并没有包含我刚刚定义的路线.

我希望有一个很好的方法来制作一个自我记录API,routes.each { |r| p r }以获得:

/
/a
/b
Run Code Online (Sandbox Code Playgroud)

Mii*_*kka 28

您应该调查Sinatra::Application.routes,其中包含您的路线.这将打印路径模式的正则表达式:

require 'sinatra'

get '/'  do "root" end
get '/a' do "a" end
get '/b' do "b" end

Sinatra::Application.routes["GET"].each do |route|
  puts route[0]
end
Run Code Online (Sandbox Code Playgroud)

为了简化操作,请查看sinatra-advanced-routes扩展.它为您提供了一个很好的API来反省路线:

require 'sinatra'
require 'sinatra/advanced_routes'

get '/'  do "root" end
get '/a' do "a" end
get '/b' do "b" end

Sinatra::Application.each_route do |route|
  puts route.verb + " " + route.path
end
Run Code Online (Sandbox Code Playgroud)

有关更多文档和示例,请参阅sinatra-advanced-routes 的README.