2011-06-11 22 views
9

Grape :: API (MyApi) alt sınıfım tarafından oluşturulan tüm rotaların bir listesini oluşturmaya çalışıyorum.Üzüm/Rack içinde derlenmiş rotalara erişme :: Mount :: Route

Ben arayarak yakın alabilirsiniz:

bana Rack :: Dağı :: Rota nesneleri dizisi verir
MyApi.send(:route_set).instance_variable_get(:@routes) 

.

yararlıdır Rota nesnesinin tek niteliktir: Karma böyle döner koşulları:

:path_info => (?-mix:\\A\\/api\\/(?<version>v1)\\/token(?:\\.(?<format>[^\\/]+))?\\Z)", "k: request_method, v: (?-mix:\\AGET\\Z) 

Eğer karma değerini görebileceğiniz gibi rotanın yolunu eşleştirmek için bir regexp olduğunu. Ben de kullanabilirsiniz: named_captures regexp tüm adlandırılmış tutukları almak için:

{:path_info=>{:version=>0, :format=>1}, :request_method=>{}} 

Sonuçta benim yapmaya çalışıyorum Grape aracılığıyla oluşturulan tüm yolların bir listesini oluşturmak olduğunu :: API, onların tam yol, vs Koşullarda regexp'i denemek ve yeniden yapılandırmak bana mantıklı gelmiyor. Rack :: Mount :: Route için insan tarafından okunabilir bir yola erişmenin/üretmenin başka bir yolu var mı?

cevap

7

ile Bu postayı rake routes with grape

öldürmekle alabilirsiniz yolları bakınız:

MyApi.routes 

GÜNCELLEME: İngilizce

Madde: rake routes command on grape gem

+0

Bu bağlantı aşağı ve bir .xxx etki alanına mı? Hmmm –

+1

Evet, @sardaukar aşağı, ama burada http: //hermes-vertigem.herokuapp.com/2013/04/02/rake-route-no-grape/Cevabın üzerine cevap verdim, Thankx – Duke

1

ben yaptım nasıl

desc "Print out routes" 
task :routes => :environment do 
    StudyTube::API::V1::Base.routes.each do |route| 
    info = route.instance_variable_get :@options 
    description = "%-40s..." % info[:description][0..39] 
    method = "%-7s" % info[:method] 
    puts "#{description} #{method}#{info[:path]}" 
    end 
end 

Bunları güzel bir şekilde yazdırır. Kesinti ile etrafta dolaşıyordum, ama elbette istersen bundan kurtulabilirsin.

2

Sadece buradaki cevaplara başka bir değişiklik eklemek için. Aşağıdaki iki komisyon görevini kullanıyorum.

task :all_routes => [:routes, :api_routes] 

task :api_routes => :environment do 
    longest_uri = MyAPI.routes.map{|api|api.route_path.length}.max 
    longest_desc = MyAPI.routes.map{|api|api.route_description.length}.max 
    pattern = "%10s %-#{longest_uri}s %-#{longest_desc}s\n" 

    # print column headers 
    printf(
    pattern, 
    "Verb", "URI Pattern", "Description" 
) 

    # print each column 
    MyAPI.routes.each do |api| 
    printf(
     pattern, 
     api.route_method, api.route_path, api.route_description 
    ) 
    end 
end 
0

Raylar çalışmıyorsa, özel komisyon görevlerinden biriyle giderdim. Eğer aslında Rayları kullanıyorsanız, grape-rails-routes gem'a bir göz atın.

Size rake routes_with_grape benzer bir komisyon görevi verir. Eğer grape_on_rails_routes gem kontrol, raylar ile üzüm kullanıyorsanız

O eklediği değer ancak http://localhost:3000/rails/info/routes_with_grape

2

de raylar bilgi bölümünde html tablo görünümüdür.

rake grape:routes'u çalıştırabilir ve tüm geçerli API'lerin ve bunların ayrıntılarının (url, açıklama, sürüm) güzel biçimlendirilmiş bir listesini görebilirsiniz.

+0

Bu bağlantı soruyu cevaplayabilirken, cevabın temel parçalarını buraya dahil etmek ve referans için bağlantı sağlamak daha iyidir. Bağlantılı sayfa değiştiğinde yalnızca bağlantı yanıtları geçersiz olabilir. - [Yorum yaz] (/ review/düşük kaliteli yazılar/11712383) – RickyA

+0

@RickyA Geri bildiriminiz için teşekkürler, sadece cevabı güncelledik! –

+0

Bu yöntem daha iyidir çünkü proje adına temel değildir, ancak Grape :: API'den tüm miras için ObjectSpace üzerinden arama yapar. –

İlgili konular