2012-12-04 38 views
14

Nói rằng tôi có:Cách lấy danh sách tất cả các tuyến đường được sử dụng trong ứng dụng Sinatra?

require 'sinatra' 

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

Có dễ dàng để cách có được một danh sách tất cả các tuyến đường được xác định trong ứng dụng của Sinatra của tôi?

Tôi đã điều tra Sinatra::Base.routes, nhưng điều đó dường như không chứa các tuyến đường mà tôi vừa xác định.

Tôi đã hy vọng có một cách tốt đẹp để làm cho một API tự chủ tài liệu như routes.each { |r| p r } để có được:

/ 
/a 
/b 

Trả lời

27

Bạn nên điều tra Sinatra::Application.routes, trong đó có tuyến đường của bạn. Điều này in biểu thức chính quy của các mẫu tuyến đường của bạn:

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 

Để đơn giản hơn, hãy xem phần mở rộng sinatra-advanced-routes. Nó mang đến cho bạn một API tốt đẹp cho introspecting các tuyến đường:

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 

Xem README của Sinatra-tiên tiến tìm đường khác cho tài liệu hơn và ví dụ.

+0

Cảm ơn! Điều đó giải thích phần Sinatra :: Application.instance_variables nơi tôi nhận được @routes từ nó. Ngoài ra còn có [: @conditions,: @routes,: @filters,: @errors,: @middleware,: @prototype,: @extensions,: @templates] mặc dù tôi vẫn chưa hiểu cách sử dụng chúng. Có lẽ tôi nên hỏi như một câu hỏi? –

1

Dưới đây là một nhiệm vụ cào để ra một danh sách các tuyến đường:

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 

Output:

GET /asset/:id 
    HEAD /asset/:id 
    POST /asset/:aggregate_id/provide 
OPTIONS /asset 
Các vấn đề liên quan