19

私が持っているとしましょう:

require 'sinatra'

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

Sinatra アプリケーションで定義されたすべてのルートのリストを取得する簡単な方法はありますか?

を調査Sinatra::Base.routesしましたが、先ほど定義したルートが含まれていないようです。

私は、自己文書化 API を次のように作成するための良い方法を望んでいましたroutes.each { |r| p r }

/
/a
/b
4

2 に答える 2

32

ルートを含むを調査する必要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

より多くのドキュメントと例については、sinatra-advanced-routesのREADMEを参照してください。

于 2012-12-09T15:07:20.977 に答える