2010-10-21 8 views

Respuesta

4

He reescrito las rutas rastrillo ligeramente comando para generar una versión html un poco más útil de la salida de rutas rastrillo

Crear un archivo pretty_routes.rake y poner esto en lib/tasks/ y llame rake pretty_routes y debe ser ligeramente mejor

desc 'Pretty print out all defined routes in match order, with names. Target specific controller with CONTROLLER=x.' 
task :pretty_routes => :environment do 
    all_routes = ENV['CONTROLLER'] ? ActionController::Routing::Routes.routes.select { |route| route.defaults[:controller] == ENV['CONTROLLER'] } : ActionController::Routing::Routes.routes 
    routes = all_routes.collect do |route| 
    name = ActionController::Routing::Routes.named_routes.routes.index(route).to_s 
    verb = route.conditions[:method].to_s.upcase 
    segs = route.segments.inject("") { |str,s| str << s.to_s } 
    segs.chop! if segs.length > 1 
    reqs = route.requirements.empty? ? "" : route.requirements.inspect 
    {:name => name, :verb => verb, :segs => segs, :reqs => reqs} 
    end 
    File.open(File.join(RAILS_ROOT, "routes.html"), "w") do |f| 
    f.puts "<html><head><title>Rails Routes</title></head><body><table border=1>" 
    f.puts "<tr><th>Name</th><th>Verb</th><th>Segments</th><th>Requirements</th></tr>" 
    routes.each do |r| 
     f.puts "<tr><td>#{r[:name]}</td><td>#{r[:verb]}</td><td>#{r[:segs]}</td><td>#{r[:reqs]}</td></tr>" 
    end 
    f.puts "</table></body></html>" 
    end 
    `open #{File.join(RAILS_ROOT, "routes.html")}` 
end 

La penúltima línea solo funciona en Mac OSX y en rieles 2.x, pero abre automáticamente el archivo en su navegador. Si se encuentra en una plataforma diferente, tendrá que cambiar el comando.

Si está ejecutando rieles 3.x, la segunda a la última línea debe ser

`open #{File.join(Rails.root, "routes.html")}` 
+3

ITs listo. Y absolutamente te felicito por esto, pero no me gusta obtener todas las rutas a la vez. Suelo ir por 'rutas de rake | grep somethingSpecific' – Trip

+1

Esto parece roto con rails3? rake abortado! método indefinido 'segmentos 'para # (Vea el rastro completo ejecutando la tarea con --trace) – Lichtamberg

+0

Lichtamberg: absolutamente. Todavía estoy en Rails 2.3.x, rieles 3 rutas completamente modificadas, por lo que tendrás que modificar la solución para que funcione. –

1

gran consejo. Gracias.

Preparé la versión de trabajo para Rails 3.0. Disfrutar.

desc 'Pretty print out all defined routes in match order, with names. Target specific controller with CONTROLLER=x.' 

task :pretty_routes => :environment do 
    all_routes = ENV['CONTROLLER'] ? ActionController::Routing::Routes.routes.select { |route| route.defaults[:controller] == ENV['CONTROLLER'] } : ActionController::Routing::Routes.routes 
    routes = all_routes.collect do |route| 
    reqs = route.requirements.empty? ? "" : route.requirements.inspect 
    {:name => route.name, :verb => route.verb, :path => route.path, :reqs => reqs} 
    end 
    File.open(File.join(RAILS_ROOT, "routes.html"), "w") do |f| 
    f.puts "<html><head><title>Rails 3 Routes</title></head><body><table border=1>" 
    f.puts "<tr><th>Name</th><th>Verb</th><th>Path</th><th>Requirements</th></tr>" 
    routes.each do |r| 
     f.puts "<tr><td>#{r[:name]}</td><td>#{r[:verb]}</td><td>#{r[:path]}</td><td>#{r[:reqs]}</td></tr>" 
    end 
    f.puts "</table></body></html>" 
    end 
end 
5
Rails 3.1 version, Replace all <YourApp> tag with your application name. 

desc 'Pretty print out all defined routes in match order, with names. Target specific controller with CONTROLLER=x.' 
task :pretty_routes => :environment do 
    all_routes = ENV['CONTROLLER'] ? <YourApp>::Application.routes.select { |route| route.defaults[:controller] == ENV['CONTROLLER'] } : <YourApp>::Application.routes 
    routes = all_routes.routes.collect do |route| 
    reqs = route.requirements.empty? ? "" : route.requirements.inspect 
    {:name => route.name, :verb => route.verb, :path => route.path, :reqs => reqs} 
    end 
    File.open(File.join(Rails.root, "routes.html"), "w") do |f| 
    f.puts "<html><head><title>Rails 3 Routes</title></head><body><table border=1>" 
    f.puts "<tr><th>Name</th><th>Verb</th><th>Path</th><th>Requirements</th></tr>" 
    routes.each do |r| 
     f.puts "<tr><td>#{r[:name]}</td><td>#{r[:verb]}</td><td>#{r[:path]}</td><td>#{r[:reqs]}</td></tr>" 
    end 
    f.puts "</table></body></html>" 
    end 
end 
9

EDIT: La respuesta a continuación se empaquetó en la gema html_routes que soporta los carriles 3 y 4.

El siguiente código se realizó con los carriles actuales Rails 3.2.3, grupos por controlador y se ve increíble. Recuerde cambiar el <Your APP> al nombre de su aplicación y agregar la sintaxis de gema a su Gemfile.

Sample image

desc 'Pretty print out all defined routes in match order, with names. Target specific controller with CONTROLLER=x.' 

task :routes => :environment do 
if ENV['CONTROLLER'] 
    all_routes = <Your APP>::Application.routes.select { |route| route.defaults[:controller] == ENV['CONTROLLER'] } 
else 
    all_routes = <Your APP>::Application.routes 
end 

convertor = Syntax::Convertors::HTML.for_syntax "ruby" 

File.open(File.join(Rails.root, "routes.html"), "w") do |f| 
    f.puts "<html><head><title>Your APP</title> 
     <style type='text/css'> 
     body { background-color: #333; color: #FFF; } 
     table { border: 1px solid #777; background-color: #111; } 
     td, th { font-size: 11pt; text-align: left; padding-right: 10px; } 
     th { font-size: 12pt; } 
     pre { maring: 0; padding: 0; } 
     .contrl_head { font-size: 14pt; padding: 15px 0 5px 0; } 
     .contrl_name { color: #ACE; } 
     .punct { color: #99F; font-weight: bold; } 
     .symbol { color: #7DD; } 
     .regex { color: #F66; } 
     .string { color: #F99; }4 
     </style></head> 
     <body>" 

    last_contrl = nil 

    routes = all_routes.routes.collect do |route| 
    if !route.requirements.empty? 
     if route.requirements[:controller] != last_contrl 
     f.puts "</table>" if last_contrl 
     last_contrl = route.requirements[:controller] 
     f.puts "<div class='contrl_head'><b>Controller: <span class='contrl_name'>#{last_contrl}</span></b></div>" + 
       "<table width='100%' border='0'><tr><th>Name</th><th>Verb</th><th>Path</th><th>Requirements</th></tr>" 
     end 

     reqs = route.requirements.inspect 
     verb = route.verb.source 
     verb = verb[1..(verb.length-2)] if verb 
     r = { :name => route.name, :verb => verb, :path => route.path, :reqs => reqs } 
     f.puts "<tr><td width='12%'><b>#{r[:name]}</b></td><td width='5%'><b>#{r[:verb]}</b></td>" + 
       "<td width='3%'>#{r[:path]}</td><td width='80%'>#{convertor.convert(r[:reqs])}</td></tr>" 
    end 
    end 

    f.puts "</table></body></html>" 
end 
end 
+0

¡Esto se ve increíble! ¡¡Gracias!! ¡Sueño hecho realidad! – Trip

+0

Amigo esto es genial! Vamos a ver una gema :) –

+0

Estoy obteniendo la sintaxis constante 'no inicializada' – rkrdo

Cuestiones relacionadas