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

Routes 如何获取Sinatra应用程序中使用的所有路线的列表?,routes,sinatra,Routes,Sinatra,假设我有: require 'sinatra' get '/' { "hi" } get '/a' { "a" } get '/b' { "b" } 在我的Sinatra应用程序中,是否有任何简单的方法可以获取所有已定义路由的列表 我调查了Sinatra::Base.routes,但它似乎不包含我刚才定义的路由 我希望有一个很好的方法来制作一个像routes.each{r|pr}这样的自文档API,以获得: / /a /b 您应该调查包含路由的Sinatra::Application.ro

假设我有:

require 'sinatra'

get '/' { "hi" }
get '/a' { "a" }
get '/b' { "b" }
在我的Sinatra应用程序中,是否有任何简单的方法可以获取所有已定义路由的列表

我调查了
Sinatra::Base.routes
,但它似乎不包含我刚才定义的路由

我希望有一个很好的方法来制作一个像
routes.each{r|pr}
这样的自文档API,以获得:

/
/a
/b

您应该调查包含路由的
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
为了使事情更简单,请查看扩展。它为您提供了一个很好的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

有关更多文档和示例,请参阅sinatra advanced routes的说明。

这里有一个rake任务,用于输出路由列表:

desc 'List defined routes'
task :routes do
  require 'app/web/web'

  Shoebox::Server.routes.map do |method, routes|
    routes.map { |r| r.first.to_s }.map do |route|
      "#{method.rjust(7, ' ')} #{route}"
    end
  end.flatten.sort.each do |route|
    puts route
  end
end
输出:

    GET /asset/:id
   HEAD /asset/:id
   POST /asset/:aggregate_id/provide
OPTIONS /asset

谢谢这就解释了Sinatra::Application.instance_变量是从中获取@routes的部分。还有[:@conditions、:@routes、:@filters、:@errors、:@middleware、:@prototype、:@extensions、:@templates],尽管我还不知道如何使用它们。也许我应该问一个问题?