Как получить список всех маршрутов, используемых в приложении Sinatra? - программирование
Подтвердить что ты не робот

Как получить список всех маршрутов, используемых в приложении Sinatra?

Скажем, у меня есть:

require 'sinatra'

get '/' { "hi" }
get '/a' { "a" }
get '/b' { "b" }

Есть ли простой способ получить список всех определенных маршрутов в моем приложении Sinatra?

Я исследовал Sinatra::Base.routes, но, похоже, не содержит только что определенных маршрутов.

Я надеялся, что у меня будет хороший способ создания API для документирования, например routes.each { |r| p r }, чтобы получить:

/
/a
/b
4b9b3361

Ответ 1

Вы должны исследовать 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

Чтобы упростить задачу, просмотрите расширение 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

См. README синатра-продвинутых маршрутов для получения дополнительной документации и примеров.

Ответ 2

Здесь задание 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